/ Hex Artifact Content
Login

Artifact 6ca8fb0a4da012c4ec4e92c76d868dca97ac6a03:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 2c  or ON or NORMAL,
04c0: 20 32 20 66 6f 72 20 46 55 4c 4c 2c 20 61 6e 64   2 for FULL, and
04d0: 20 33 20 66 6f 72 20 45 58 54 52 41 2e 20 20 52   3 for EXTRA.  R
04e0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
04f0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
0500: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
0510: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
0520: 55 4c 4c 20 61 6e 64 20 45 58 54 52 41 20 6f 70  ULL and EXTRA op
0530: 74 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77  tion is disallow
0540: 65 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69  ed.** if the omi
0550: 74 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20  tFull parameter 
0560: 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  it 1..**.** Note
0570: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
0580: 20 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e   returned are on
0590: 65 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20  e less that the 
05a0: 76 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73  values that.** s
05b0: 68 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20  hould be passed 
05c0: 69 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65  into sqlite3Btre
05d0: 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  eSetSafetyLevel(
05e0: 29 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a  ).  The is done.
05f0: 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65  ** to support le
0600: 67 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20  gacy SQL code.  
0610: 54 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c  The safety level
0620: 20 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c   used to be bool
0630: 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72  ean.** and older
0640: 20 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76   scripts may hav
0650: 65 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30  e used numbers 0
0660: 20 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66   for OFF and 1 f
0670: 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63  or ON..*/.static
0680: 20 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76   u8 getSafetyLev
0690: 65 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  el(const char *z
06a0: 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20  , int omitFull, 
06b0: 75 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20  u8 dflt){.      
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06d0: 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36         /* 123456
06e0: 37 38 39 20 31 32 33 34 35 36 37 38 39 20 31 32  789 123456789 12
06f0: 33 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  3 */.  static co
0700: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
0710: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
0720: 74 72 75 65 78 74 72 61 66 75 6c 6c 22 3b 0a 20  truextrafull";. 
0730: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0740: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0750: 20 31 2c 20 32 2c 20 20 34 2c 20 20 20 20 39 2c   1, 2,  4,    9,
0760: 20 20 31 32 2c 20 20 31 35 2c 20 20 20 32 30 7d    12,  15,   20}
0770: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
0780: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
0790: 7b 32 2c 20 32 2c 20 33 2c 20 20 35 2c 20 20 20  {2, 2, 3,  5,   
07a0: 20 33 2c 20 20 20 34 2c 20 20 20 35 2c 20 20 20   3,   4,   5,   
07b0: 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f   4};.  static co
07c0: 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20  nst u8 iValue[] 
07d0: 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 20 30 2c  =  {1, 0, 0,  0,
07e0: 20 20 20 20 31 2c 20 20 20 31 2c 20 20 20 33 2c      1,   1,   3,
07f0: 20 20 20 20 32 7d 3b 0a 20 20 20 20 20 20 20 20      2};.        
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0810: 20 20 20 20 2f 2a 20 6f 6e 20 6e 6f 20 6f 66 66      /* on no off
0820: 20 66 61 6c 73 65 20 79 65 73 20 74 72 75 65 20   false yes true 
0830: 65 78 74 72 61 20 66 75 6c 6c 20 2a 2f 0a 20 20  extra full */.  
0840: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20  int i, n;.  if( 
0850: 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a  sqlite3Isdigit(*
0860: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
0870: 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69   (u8)sqlite3Atoi
0880: 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73  (z);.  }.  n = s
0890: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
08a0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
08b0: 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74  ArraySize(iLengt
08c0: 68 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  h); i++){.    if
08d0: 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d 6e 20  ( iLength[i]==n 
08e0: 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  && sqlite3StrNIC
08f0: 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66 73 65  mp(&zText[iOffse
0900: 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 0a 20 20  t[i]],z,n)==0.  
0910: 20 20 20 26 26 20 28 21 6f 6d 69 74 46 75 6c 6c     && (!omitFull
0920: 20 7c 7c 20 69 56 61 6c 75 65 5b 69 5d 3c 3d 31   || iValue[i]<=1
0930: 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 72  ).    ){.      r
0940: 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b  eturn iValue[i];
0950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
0960: 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a  urn dflt;.}../*.
0970: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0980: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0990: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
09a0: 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47  ..*/.u8 sqlite3G
09b0: 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
09c0: 63 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c 74  char *z, u8 dflt
09d0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
09e0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
09f0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
0a00: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
0a10: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
0a20: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
0a30: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
0a40: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
0a50: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
0a60: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
0a70: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
0a80: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
0a90: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
0aa0: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
0ab0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
0ac0: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
0ad0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
0ae0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
0af0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
0b00: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
0b10: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
0b20: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
0b30: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
0b40: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
0b50: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
0b60: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0b70: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
0b80: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
0b90: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0ba0: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
0bb0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0bc0: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
0bd0: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
0be0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
0bf0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
0c00: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
0c10: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
0c20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
0c30: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
0c40: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0c50: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
0c60: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
0c70: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
0c80: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
0c90: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
0ca0: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
0cb0: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
0cc0: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
0cd0: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
0ce0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
0cf0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
0d00: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
0d10: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
0d20: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
0d30: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
0d40: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
0d50: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
0d60: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d70: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
0d80: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0d90: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
0da0: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
0db0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
0dc0: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
0dd0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0de0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
0df0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
0e00: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
0e10: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
0e20: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
0e30: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
0e40: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
0e50: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
0e60: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
0e70: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
0e80: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0e90: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
0ea0: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
0eb0: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
0ec0: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
0ed0: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
0ee0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
0ef0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
0f00: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
0f10: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
0f20: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
0f30: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
0f40: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
0f50: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
0f60: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
0f70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
0f80: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
0f90: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
0fa0: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
0fb0: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
0fc0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
0fd0: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
0fe0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
0ff0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
1000: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
1010: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
1020: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
1030: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
1040: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
1050: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
1060: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
1070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1080: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
1090: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
10a0: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
10b0: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
10c0: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
10d0: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
10e0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
10f0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
1100: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
1110: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
1120: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
1130: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
1140: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
1150: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
1160: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
1170: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
1180: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
1190: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
11a0: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
11b0: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
11c0: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
11d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
11e0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
11f0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
1200: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
1210: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
1220: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
1230: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
1240: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1250: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
1260: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
1270: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
1280: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
1290: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
12a0: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
12b0: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
12c0: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
12d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
12e0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
12f0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
1300: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
1310: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
1320: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
1330: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1340: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
1350: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
1360: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1370: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
1380: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
1390: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
13a0: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
13b0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
13c0: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
13d0: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
13e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
13f0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
1400: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
1410: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
1420: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
1430: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
1440: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
1450: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1460: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
1470: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
1480: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
1490: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
14a0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
14b0: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
14c0: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
14d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
14e0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
14f0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
1500: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
1510: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
1520: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1530: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
1540: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
1550: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 69 72  names of the fir
1560: 73 74 20 4e 20 63 6f 6c 75 6d 6e 73 20 74 6f 20  st N columns to 
1570: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 61 7a  the values in az
1580: 43 6f 6c 5b 5d 0a 2a 2f 0a 73 74 61 74 69 63 20  Col[].*/.static 
1590: 76 6f 69 64 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  void setAllColum
15a0: 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62 65 20 2a  nNames(.  Vdbe *
15b0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
15c0: 20 2f 2a 20 54 68 65 20 71 75 65 72 79 20 75 6e   /* The query un
15d0: 64 65 72 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e  der construction
15e0: 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20 20 20 20   */.  int N,    
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1600: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
1610: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
1620: 72 20 2a 2a 61 7a 43 6f 6c 20 20 20 20 20 2f 2a  r **azCol     /*
1630: 20 4e 61 6d 65 73 20 6f 66 20 63 6f 6c 75 6d 6e   Names of column
1640: 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b  s */.){.  int i;
1650: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
1660: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 4e 29 3b 0a  tNumCols(v, N);.
1670: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20    for(i=0; i<N; 
1680: 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
1690: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
16a0: 76 2c 20 69 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, i, COLNAME_NA
16b0: 4d 45 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 20 53 51  ME, azCol[i], SQ
16c0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
16d0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
16e0: 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65  setOneColumnName
16f0: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1700: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73 65 74 41  char *z){.  setA
1710: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
1720: 20 31 2c 20 26 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a   1, &z);.}../*.*
1730: 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65 20  * Generate code 
1740: 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67  to return a sing
1750: 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  le integer value
1760: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
1770: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
1780: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1790: 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36  char *zLabel, i6
17a0: 34 20 76 61 6c 75 65 29 7b 0a 20 20 73 71 6c 69  4 value){.  sqli
17b0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 44 75 70  te3VdbeAddOp4Dup
17c0: 38 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  8(v, OP_Int64, 0
17d0: 2c 20 31 2c 20 30 2c 20 28 63 6f 6e 73 74 20 75  , 1, 0, (const u
17e0: 38 2a 29 26 76 61 6c 75 65 2c 20 50 34 5f 49 4e  8*)&value, P4_IN
17f0: 54 36 34 29 3b 0a 20 20 73 65 74 4f 6e 65 43 6f  T64);.  setOneCo
1800: 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c 61 62  lumnName(v, zLab
1810: 65 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  el);.  sqlite3Vd
1820: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
1830: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
1840: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61  .}../*.** Genera
1850: 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72  te code to retur
1860: 6e 20 61 20 73 69 6e 67 6c 65 20 74 65 78 74 20  n a single text 
1870: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
1880: 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67   void returnSing
1890: 6c 65 54 65 78 74 28 0a 20 20 56 64 62 65 20 2a  leText(.  Vdbe *
18a0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
18b0: 20 20 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74    /* Prepared st
18c0: 61 74 65 6d 65 6e 74 20 75 6e 64 65 72 20 63 6f  atement under co
18d0: 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
18e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62  const char *zLab
18f0: 65 6c 2c 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  el,     /* Name 
1900: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
1910: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  lumn */.  const 
1920: 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 20 20 20  char *zValue    
1930: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 62 65    /* Value to be
1940: 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a 29 7b 0a   returned */.){.
1950: 20 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a    if( zValue ){.
1960: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
1970: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20  oadString(v, 1, 
1980: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 56 61  (const char*)zVa
1990: 6c 75 65 29 3b 0a 20 20 20 20 73 65 74 4f 6e 65  lue);.    setOne
19a0: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c  ColumnName(v, zL
19b0: 61 62 65 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74  abel);.    sqlit
19c0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
19d0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
19e0: 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a   1);.  }.}.../*.
19f0: 2a 2a 20 53 65 74 20 74 68 65 20 73 61 66 65 74  ** Set the safet
1a00: 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70 61 67 65  y_level and page
1a10: 72 20 66 6c 61 67 73 20 66 6f 72 20 70 61 67 65  r flags for page
1a20: 72 20 69 44 62 2e 20 20 4f 72 20 69 66 20 69 44  r iDb.  Or if iD
1a30: 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68 65 73 65  b<0.** set these
1a40: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
1a50: 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  pagers..*/.#ifnd
1a60: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
1a70: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 73 74 61  AGER_PRAGMAS.sta
1a80: 74 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 50  tic void setAllP
1a90: 61 67 65 72 46 6c 61 67 73 28 73 71 6c 69 74 65  agerFlags(sqlite
1aa0: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
1ab0: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1ac0: 20 20 20 20 44 62 20 2a 70 44 62 20 3d 20 64 62      Db *pDb = db
1ad0: 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e  ->aDb;.    int n
1ae0: 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20   = db->nDb;.    
1af0: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 46  assert( SQLITE_F
1b00: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
1b10: 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20  FULLFSYNC );.   
1b20: 20 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f   assert( SQLITE_
1b30: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  CkptFullFSync==P
1b40: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
1b50: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
1b60: 74 28 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  t( SQLITE_CacheS
1b70: 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48  pill==PAGER_CACH
1b80: 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73  ESPILL );.    as
1b90: 73 65 72 74 28 20 28 50 41 47 45 52 5f 46 55 4c  sert( (PAGER_FUL
1ba0: 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43  LFSYNC | PAGER_C
1bb0: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20  KPT_FULLFSYNC | 
1bc0: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
1bd0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3d  ).             =
1be0: 3d 20 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d  =  PAGER_FLAGS_M
1bf0: 41 53 4b 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ASK );.    asser
1c00: 74 28 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f  t( (pDb->safety_
1c10: 6c 65 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59  level & PAGER_SY
1c20: 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d  NCHRONOUS_MASK)=
1c30: 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  =pDb->safety_lev
1c40: 65 6c 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  el );.    while(
1c50: 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20   (n--) > 0 ){.  
1c60: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
1c70: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1c80: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 72  te3BtreeSetPager
1c90: 46 6c 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a  Flags(pDb->pBt,.
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb0: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
1cc0: 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20  el | (db->flags 
1cd0: 26 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41  & PAGER_FLAGS_MA
1ce0: 53 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  SK) );.      }. 
1cf0: 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20       pDb++;.    
1d00: 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20  }.  }.}.#else.# 
1d10: 64 65 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67  define setAllPag
1d20: 65 72 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e  erFlags(X)  /* n
1d30: 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  o-op */.#endif..
1d40: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
1d50: 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e  human-readable n
1d60: 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72  ame for a constr
1d70: 61 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  aint resolution 
1d80: 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  action..*/.#ifnd
1d90: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1da0: 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69  OREIGN_KEY.stati
1db0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63  c const char *ac
1dc0: 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69  tionName(u8 acti
1dd0: 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  on){.  const cha
1de0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74  r *zName;.  swit
1df0: 63 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ch( action ){.  
1e00: 20 20 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c    case OE_SetNul
1e10: 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54  l:  zName = "SET
1e20: 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62   NULL";        b
1e30: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1e40: 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d  E_SetDflt:  zNam
1e50: 65 20 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54  e = "SET DEFAULT
1e60: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
1e70: 20 20 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64    case OE_Cascad
1e80: 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53  e:  zName = "CAS
1e90: 43 41 44 45 22 3b 20 20 20 20 20 20 20 20 20 62  CADE";         b
1ea0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1eb0: 45 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d  E_Restrict: zNam
1ec0: 65 20 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20  e = "RESTRICT"; 
1ed0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1ee0: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
1ef0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20      zName = "NO 
1f00: 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20  ACTION";  .     
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f20: 20 61 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d   assert( action=
1f30: 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61  =OE_None ); brea
1f40: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1f50: 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a  zName;.}.#endif.
1f60: 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ../*.** Paramete
1f70: 72 20 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20  r eMode must be 
1f80: 6f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52  one of the PAGER
1f90: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
1fa0: 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1fb0: 66 69 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68  fined in pager.h
1fc0: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
1fd0: 72 65 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f  returns the asso
1fe0: 63 69 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65  ciated lowercase
1ff0: 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  .** journal-mode
2000: 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20   name..*/.const 
2010: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2020: 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2030: 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69   eMode){.  stati
2040: 63 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  c char * const a
2050: 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zModeName[] = {.
2060: 20 20 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70      "delete", "p
2070: 65 72 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20  ersist", "off", 
2080: 22 74 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d  "truncate", "mem
2090: 6f 72 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c  ory".#ifndef SQL
20a0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20  ITE_OMIT_WAL.   
20b0: 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66    , "wal".#endif
20c0: 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20  .  };.  assert( 
20d0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
20e0: 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20  E_DELETE==0 );. 
20f0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
2100: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
2110: 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  ST==1 );.  asser
2120: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2130: 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20  MODE_OFF==2 );. 
2140: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
2150: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
2160: 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65  ATE==3 );.  asse
2170: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
2180: 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20  LMODE_MEMORY==4 
2190: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
21a0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
21b0: 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72  AL==5 );.  asser
21c0: 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65  t( eMode>=0 && e
21d0: 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28  Mode<=ArraySize(
21e0: 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a  azModeName) );..
21f0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72    if( eMode==Arr
2200: 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d  aySize(azModeNam
2210: 65 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  e) ) return 0;. 
2220: 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61   return azModeNa
2230: 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a  me[eMode];.}../*
2240: 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72  .** Process a pr
2250: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
2260: 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20   .**.** Pragmas 
2270: 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  are of this form
2280: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41  :.**.**      PRA
2290: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20  GMA [schema.]id 
22a0: 5b 3d 20 76 61 6c 75 65 2d 6c 69 73 74 5d 0a 2a  [= value-list].*
22b0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6c 65 66 74  *.** If the left
22c0: 20 73 69 64 65 20 69 73 20 22 64 61 74 61 62 61   side is "databa
22d0: 73 65 2e 69 64 22 20 74 68 65 6e 20 70 49 64 31  se.id" then pId1
22e0: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
22f0: 20 6e 61 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64   name.** and pId
2300: 32 20 69 73 20 74 68 65 20 69 64 2e 20 20 49 66  2 is the id.  If
2310: 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69   the left side i
2320: 73 20 6a 75 73 74 20 22 69 64 22 20 74 68 65 6e  s just "id" then
2330: 20 70 49 64 31 20 69 73 20 74 68 65 0a 2a 2a 20   pId1 is the.** 
2340: 69 64 20 61 6e 64 20 70 49 64 32 20 69 73 20 61  id and pId2 is a
2350: 6e 79 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  ny empty string.
2360: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2370: 50 72 61 67 6d 61 28 0a 20 20 50 61 72 73 65 20  Pragma(.  Parse 
2380: 2a 70 50 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65  *pParse, .  Toke
2390: 6e 20 2a 70 49 64 31 2c 20 20 20 20 20 20 20 20  n *pId1,        
23a0: 2f 2a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66  /* First part of
23b0: 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20 66 69 65   [schema.]id fie
23c0: 6c 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  ld */.  Token *p
23d0: 49 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53  Id2,        /* S
23e0: 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 73  econd part of [s
23f0: 63 68 65 6d 61 2e 5d 69 64 20 66 69 65 6c 64 2c  chema.]id field,
2400: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 49 64   or NULL */.  Id
2410: 4c 69 73 74 20 2a 70 56 61 6c 75 65 73 20 20 20  List *pValues   
2420: 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 2d 6c    /* The value-l
2430: 69 73 74 20 61 72 67 75 6d 65 6e 74 73 2e 20 20  ist arguments.  
2440: 4e 55 4c 4c 20 69 66 20 6f 6d 69 74 74 65 64 20  NULL if omitted 
2450: 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c  */.){.  char *zL
2460: 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20 20 2f  eft = 0;       /
2470: 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64  * Nul-terminated
2480: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 69   UTF-8 string <i
2490: 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52  d> */.  char *zR
24a0: 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20 20 2f  ight = 0;      /
24b0: 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64  * Nul-terminated
24c0: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 76   UTF-8 string <v
24d0: 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a  alue>, or NULL *
24e0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
24f0: 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54 68  zDb = 0;   /* Th
2500: 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  e database name 
2510: 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 3b  */.  Token *pId;
2520: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
2530: 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20 74  ointer to <id> t
2540: 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  oken */.  char *
2550: 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20 20 20 20  aFcntl[4];      
2560: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
2570: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2580: 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  GMA */.  int iDb
2590: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25a0: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e 64 65  /* Database inde
25b0: 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73 65 3e  x for <database>
25c0: 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72 2c 20 75   */.  int lwr, u
25d0: 70 72 2c 20 6d 69 64 20 3d 20 30 3b 20 20 20 20  pr, mid = 0;    
25e0: 20 20 20 2f 2a 20 42 69 6e 61 72 79 20 73 65 61     /* Binary sea
25f0: 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f 0a 20 20  rch bounds */.  
2600: 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
2610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2620: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66 6f 72  return value for
2630: 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  m SQLITE_FCNTL_P
2640: 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c 69 74  RAGMA */.  sqlit
2650: 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d  e3 *db = pParse-
2660: 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65 20 64  >db;    /* The d
2670: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
2680: 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b  on */.  Db *pDb;
2690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70 65 63       /* The spec
26b0: 69 66 69 63 20 64 61 74 61 62 61 73 65 20 62 65  ific database be
26c0: 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a 2f 0a  ing pragmaed */.
26d0: 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69    Vdbe *v = sqli
26e0: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
26f0: 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72 65 64  e);  /* Prepared
2700: 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
2710: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50 72  const struct sPr
2720: 61 67 6d 61 4e 61 6d 65 73 20 2a 70 50 72 61 67  agmaNames *pPrag
2730: 6d 61 3b 0a 0a 20 20 69 66 28 20 76 3d 3d 30 20  ma;..  if( v==0 
2740: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
2750: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
2760: 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a  RunOnlyOnce(v);.
2770: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
2780: 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70   2;..  /* Interp
2790: 72 65 74 20 74 68 65 20 5b 73 63 68 65 6d 61 2e  ret the [schema.
27a0: 5d 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  ] part of the pr
27b0: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
27c0: 69 44 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20  iDb is the.  ** 
27d0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
27e0: 61 62 61 73 65 20 74 68 69 73 20 70 72 61 67 6d  abase this pragm
27f0: 61 20 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69  a is being appli
2800: 65 64 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b  ed to in db.aDb[
2810: 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71  ]. */.  iDb = sq
2820: 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
2830: 28 70 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70  (pParse, pId1, p
2840: 49 64 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66  Id2, &pId);.  if
2850: 28 20 69 44 62 3c 30 20 29 20 67 6f 74 6f 20 70  ( iDb<0 ) goto p
2860: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 70 44 62  ragma_out;.  pDb
2870: 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
2880: 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 74  ;..  /* If the t
2890: 65 6d 70 20 64 61 74 61 62 61 73 65 20 68 61 73  emp database has
28a0: 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74 6c 79   been explicitly
28b0: 20 6e 61 6d 65 64 20 61 73 20 70 61 72 74 20 6f   named as part o
28c0: 66 20 74 68 65 20 0a 20 20 2a 2a 20 70 72 61 67  f the .  ** prag
28d0: 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74  ma, make sure it
28e0: 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a   is open. .  */.
28f0: 20 20 69 66 28 20 69 44 62 3d 3d 31 20 26 26 20    if( iDb==1 && 
2900: 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
2910: 61 74 61 62 61 73 65 28 70 50 61 72 73 65 29 20  atabase(pParse) 
2920: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  ){.    return;. 
2930: 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d 20 73 71   }..  zLeft = sq
2940: 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
2950: 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a 20 20 69  en(db, pId);.  i
2960: 66 28 20 21 7a 4c 65 66 74 20 29 20 67 6f 74 6f  f( !zLeft ) goto
2970: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 69   pragma_out;.  i
2980: 66 28 20 70 56 61 6c 75 65 73 20 29 20 7a 52 69  f( pValues ) zRi
2990: 67 68 74 20 3d 20 70 56 61 6c 75 65 73 2d 3e 61  ght = pValues->a
29a0: 5b 30 5d 2e 7a 4e 61 6d 65 3b 0a 0a 20 20 61 73  [0].zName;..  as
29b0: 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a 20 20  sert( pId2 );.  
29c0: 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20  zDb = pId2->n>0 
29d0: 3f 20 70 44 62 2d 3e 7a 44 62 53 4e 61 6d 65 20  ? pDb->zDbSName 
29e0: 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  : 0;.  if( sqlit
29f0: 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72  e3AuthCheck(pPar
2a00: 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d  se, SQLITE_PRAGM
2a10: 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  A, zLeft, zRight
2a20: 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f  , zDb) ){.    go
2a30: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2a40: 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e   }..  /* Send an
2a50: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2a60: 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f  AGMA file-contro
2a70: 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  l to the underly
2a80: 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e  ing VFS.  ** con
2a90: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20  nection.  If it 
2aa0: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
2ab0: 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74  K, then assume t
2ac0: 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a  hat the VFS.  **
2ad0: 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61   handled the pra
2ae0: 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65  gma and generate
2af0: 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65   a no-op prepare
2b00: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a  d statement..  *
2b10: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
2b20: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33  ATION-OF: R-1223
2b30: 38 2d 35 35 31 32 30 20 57 68 65 6e 65 76 65 72  8-55120 Whenever
2b40: 20 61 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d   a PRAGMA statem
2b50: 65 6e 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20  ent is parsed,. 
2b60: 20 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43   ** an SQLITE_FC
2b70: 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20  NTL_PRAGMA file 
2b80: 63 6f 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20  control is sent 
2b90: 74 6f 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69  to the open sqli
2ba0: 74 65 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62  te3_file.  ** ob
2bb0: 6a 65 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69  ject correspondi
2bc0: 6e 67 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ng to the databa
2bd0: 73 65 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68  se file to which
2be0: 20 74 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a   the pragma.  **
2bf0: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72   statement refer
2c00: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50  s..  **.  ** IMP
2c10: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
2c20: 52 2d 32 39 38 37 35 2d 33 31 36 37 38 20 54 68  R-29875-31678 Th
2c30: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  e argument to th
2c40: 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  e SQLITE_FCNTL_P
2c50: 52 41 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20  RAGMA.  ** file 
2c60: 63 6f 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72  control is an ar
2c70: 72 61 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ray of pointers 
2c80: 74 6f 20 73 74 72 69 6e 67 73 20 28 63 68 61 72  to strings (char
2c90: 2a 2a 29 20 69 6e 20 77 68 69 63 68 20 74 68 65  **) in which the
2ca0: 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65  .  ** second ele
2cb0: 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61  ment of the arra
2cc0: 79 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  y is the name of
2cd0: 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20   the pragma and 
2ce0: 74 68 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65  the third.  ** e
2cf0: 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72  lement is the ar
2d00: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
2d10: 61 67 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20  agma or NULL if 
2d20: 74 68 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e  the pragma has n
2d30: 6f 0a 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  o.  ** argument.
2d40: 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30  .  */.  aFcntl[0
2d50: 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b  ] = 0;.  aFcntl[
2d60: 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46  1] = zLeft;.  aF
2d70: 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74  cntl[2] = zRight
2d80: 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20  ;.  aFcntl[3] = 
2d90: 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  0;.  db->busyHan
2da0: 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a  dler.nBusy = 0;.
2db0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
2dc0: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
2dd0: 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
2de0: 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a  L_PRAGMA, (void*
2df0: 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20  )aFcntl);.  if( 
2e00: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2e10: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
2e20: 65 54 65 78 74 28 76 2c 20 22 72 65 73 75 6c 74  eText(v, "result
2e30: 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20  ", aFcntl[0]);. 
2e40: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2e50: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
2e60: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
2e70: 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53  .  }.  if( rc!=S
2e80: 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29  QLITE_NOTFOUND )
2e90: 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c  {.    if( aFcntl
2ea0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  [0] ){.      sql
2eb0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
2ec0: 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74  rse, "%s", aFcnt
2ed0: 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c  l[0]);.      sql
2ee0: 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c  ite3_free(aFcntl
2ef0: 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  [0]);.    }.    
2f00: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
2f10: 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d      pParse->rc =
2f20: 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72   rc;.    goto pr
2f30: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  agma_out;.  }.. 
2f40: 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70   /* Locate the p
2f50: 72 61 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f  ragma in the loo
2f60: 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c  kup table */.  l
2f70: 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20  wr = 0;.  upr = 
2f80: 41 72 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d  ArraySize(aPragm
2f90: 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69  aNames)-1;.  whi
2fa0: 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a  le( lwr<=upr ){.
2fb0: 20 20 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75      mid = (lwr+u
2fc0: 70 72 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20  pr)/2;.    rc = 
2fd0: 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28  sqlite3_stricmp(
2fe0: 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d 61 4e 61  zLeft, aPragmaNa
2ff0: 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b  mes[mid].zName);
3000: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20 29  .    if( rc==0 )
3010: 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20   break;.    if( 
3020: 72 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 75 70  rc<0 ){.      up
3030: 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20  r = mid - 1;.   
3040: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77   }else{.      lw
3050: 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20  r = mid + 1;.   
3060: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77 72   }.  }.  if( lwr
3070: 3e 75 70 72 20 29 20 67 6f 74 6f 20 70 72 61 67  >upr ) goto prag
3080: 6d 61 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d  ma_out;.  pPragm
3090: 61 20 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d 65  a = &aPragmaName
30a0: 73 5b 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61  s[mid];..  /* Ma
30b0: 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61  ke sure the data
30c0: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c  base schema is l
30d0: 6f 61 64 65 64 20 69 66 20 74 68 65 20 70 72 61  oaded if the pra
30e0: 67 6d 61 20 72 65 71 75 69 72 65 73 20 74 68 61  gma requires tha
30f0: 74 20 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61  t */.  if( (pPra
3100: 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26  gma->mPragFlag &
3110: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
3120: 68 65 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20  hema)!=0 ){.    
3130: 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53  if( sqlite3ReadS
3140: 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20  chema(pParse) ) 
3150: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
3160: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  .  }..  /* Jump 
3170: 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  to the appropria
3180: 74 65 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65  te pragma handle
3190: 72 20 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70  r */.  switch( p
31a0: 50 72 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70  Pragma->ePragTyp
31b0: 20 29 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69   ){.  .#if !defi
31c0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
31d0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26  PAGER_PRAGMAS) &
31e0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
31f0: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
3200: 44 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  D).  /*.  **  PR
3210: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65  AGMA [schema.]de
3220: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3230: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
3240: 63 68 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63  chema.]default_c
3250: 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  ache_size=N.  **
3260: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
3270: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
3280: 20 63 75 72 72 65 6e 74 20 70 65 72 73 69 73 74   current persist
3290: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
32a0: 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  the.  ** page ca
32b0: 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76  che size.  The v
32c0: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73  alue returned is
32d0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
32e0: 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65  ber of.  ** page
32f0: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61  s in the page ca
3300: 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  che.  The second
3310: 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20   form sets both 
3320: 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a  the current.  **
3330: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
3340: 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70   value and the p
3350: 65 72 73 69 73 74 65 6e 74 20 70 61 67 65 20 63  ersistent page c
3360: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a  ache size value.
3370: 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
3380: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
3390: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65  ..  **.  ** Olde
33a0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
33b0: 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74  Lite would set t
33c0: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
33d0: 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20   size to a.  ** 
33e0: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
33f0: 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63  to indicate sync
3400: 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68  hronous=OFF.  Th
3410: 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72  ese days, synchr
3420: 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c  onous.  ** is al
3430: 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75  ways on by defau
3440: 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  lt regardless of
3450: 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65   the sign of the
3460: 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20   default cache. 
3470: 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63   ** size.  But c
3480: 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20  ontinue to take 
3490: 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c  the absolute val
34a0: 75 65 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  ue of the defaul
34b0: 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a  t cache.  ** siz
34c0: 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20  e of historical 
34d0: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20  compatibility.. 
34e0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
34f0: 79 70 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  yp_DEFAULT_CACHE
3500: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61  _SIZE: {.    sta
3510: 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c  tic const int iL
3520: 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f  n = VDBE_OFFSET_
3530: 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73  LINENO(2);.    s
3540: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
3550: 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68 65 53  OpList getCacheS
3560: 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ize[] = {.      
3570: 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
3580: 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30  , 0, 0,        0
3590: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  },              
35a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
35b0: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  */.      { OP_Re
35c0: 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c  adCookie,  0, 1,
35d0: 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 44 45          BTREE_DE
35e0: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
35f0: 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20  },  /* 1 */.    
3600: 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20    { OP_IfPos,   
3610: 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20      1, 8,       
3620: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
3630: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20  Integer,     0, 
3640: 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  2,        0},.  
3650: 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63      { OP_Subtrac
3660: 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20  t,    1, 2,     
3670: 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     1},.      { O
3680: 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
3690: 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 8,        0},.
36a0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
36b0: 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20  er,     0, 1,   
36c0: 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20       0},        
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e0: 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 6 */.      {
36f0: 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20   OP_Noop,       
3700: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
3710: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73  ,.      { OP_Res
3720: 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20  ultRow,   1, 1, 
3730: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d         0},.    }
3740: 3b 0a 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f  ;.    VdbeOp *aO
3750: 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  p;.    sqlite3Vd
3760: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
3770: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  Db);.    if( !zR
3780: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 65  ight ){.      se
3790: 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76  tOneColumnName(v
37a0: 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 29 3b  , "cache_size");
37b0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
37c0: 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20  Mem += 2;.      
37d0: 73 71 6c 69 74 65 33 56 64 62 65 56 65 72 69 66  sqlite3VdbeVerif
37e0: 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65  yNoMallocRequire
37f0: 64 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67  d(v, ArraySize(g
3800: 65 74 43 61 63 68 65 53 69 7a 65 29 29 3b 0a 20  etCacheSize));. 
3810: 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74       aOp = sqlit
3820: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
3830: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74  v, ArraySize(get
3840: 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43  CacheSize), getC
3850: 61 63 68 65 53 69 7a 65 2c 20 69 4c 6e 29 3b 0a  acheSize, iLn);.
3860: 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49        if( ONLY_I
3870: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
3880: 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b  (aOp==0) ) break
3890: 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70  ;.      aOp[0].p
38a0: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61  1 = iDb;.      a
38b0: 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a  Op[1].p1 = iDb;.
38c0: 20 20 20 20 20 20 61 4f 70 5b 36 5d 2e 70 31 20        aOp[6].p1 
38d0: 3d 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  = SQLITE_DEFAULT
38e0: 5f 43 41 43 48 45 5f 53 49 5a 45 3b 0a 20 20 20  _CACHE_SIZE;.   
38f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
3900: 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  t size = sqlite3
3910: 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33  AbsInt32(sqlite3
3920: 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
3930: 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69       sqlite3Begi
3940: 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
3950: 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b  pParse, 0, iDb);
3960: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3970: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53  beAddOp3(v, OP_S
3980: 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42  etCookie, iDb, B
3990: 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43  TREE_DEFAULT_CAC
39a0: 48 45 5f 53 49 5a 45 2c 20 73 69 7a 65 29 3b 0a  HE_SIZE, size);.
39b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
39c0: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
39d0: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
39e0: 20 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70   );.      pDb->p
39f0: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
3a00: 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20  ze = size;.     
3a10: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
3a20: 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70  CacheSize(pDb->p
3a30: 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  Bt, pDb->pSchema
3a40: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
3a50: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
3a60: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53    }.#endif /* !S
3a70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
3a80: 5f 50 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c  _PRAGMAS && !SQL
3a90: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
3aa0: 54 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  TED */..#if !def
3ab0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
3ac0: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
3ad0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
3ae0: 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f  A [schema.]page_
3af0: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  PRAGM
3b00: 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f  A [schema.]page_
3b10: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
3b20: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
3b30: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
3b40: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
3b50: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
3b60: 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62  e page size in b
3b70: 79 74 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e  ytes.  The secon
3b80: 64 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a  d form sets the.
3b90: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
3ba0: 67 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  ge size value.  
3bb0: 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e  The value can on
3bc0: 6c 79 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a  ly be set if.  *
3bd0: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  * the database h
3be0: 61 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20  as not yet been 
3bf0: 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20  created..  */.  
3c00: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47  case PragTyp_PAG
3c10: 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74  E_SIZE: {.    Bt
3c20: 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e  ree *pBt = pDb->
3c30: 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28  pBt;.    assert(
3c40: 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69   pBt!=0 );.    i
3c50: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
3c60: 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41      int size = A
3c70: 4c 57 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c  LWAYS(pBt) ? sql
3c80: 69 74 65 33 42 74 72 65 65 47 65 74 50 61 67 65  ite3BtreeGetPage
3c90: 53 69 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20  Size(pBt) : 0;. 
3ca0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
3cb0: 65 49 6e 74 28 76 2c 20 22 70 61 67 65 5f 73 69  eInt(v, "page_si
3cc0: 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20  ze", size);.    
3cd0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
3ce0: 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20  Malloc may fail 
3cf0: 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65  when setting the
3d00: 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20 74   page-size, as t
3d10: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 72  here is an inter
3d20: 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75 66  nal.      ** buf
3d30: 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61 67  fer that the pag
3d40: 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65  er module resize
3d50: 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  s using sqlite3_
3d60: 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20  realloc()..     
3d70: 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65   */.      db->ne
3d80: 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71 6c  xtPagesize = sql
3d90: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
3da0: 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49  ;.      if( SQLI
3db0: 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65  TE_NOMEM==sqlite
3dc0: 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69 7a  3BtreeSetPageSiz
3dd0: 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50  e(pBt, db->nextP
3de0: 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b  agesize,-1,0) ){
3df0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
3e00: 4f 6f 6d 46 61 75 6c 74 28 64 62 29 3b 0a 20 20  OomFault(db);.  
3e10: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3e20: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
3e30: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
3e40: 63 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65  chema.]secure_de
3e50: 6c 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  lete.  **  PRAGM
3e60: 41 20 5b 73 63 68 65 6d 61 2e 5d 73 65 63 75 72  A [schema.]secur
3e70: 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a  e_delete=ON/OFF.
3e80: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69    **.  ** The fi
3e90: 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73  rst form reports
3ea0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74   the current set
3eb0: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
3ec0: 2a 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20  * secure_delete 
3ed0: 66 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f 6e  flag.  The secon
3ee0: 64 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74  d form changes t
3ef0: 68 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65  he secure_delete
3f00: 0a 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74 69  .  ** flag setti
3f10: 6e 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20 74  ng and reports t
3f20: 68 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a  henew value..  *
3f30: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
3f40: 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a 20  _SECURE_DELETE: 
3f50: 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  {.    Btree *pBt
3f60: 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20   = pDb->pBt;.   
3f70: 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20   int b = -1;.   
3f80: 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20   assert( pBt!=0 
3f90: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
3fa0: 74 20 29 7b 0a 20 20 20 20 20 20 62 20 3d 20 73  t ){.      b = s
3fb0: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
3fc0: 28 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20 20  (zRight, 0);.   
3fd0: 20 7d 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d   }.    if( pId2-
3fe0: 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b  >n==0 && b>=0 ){
3ff0: 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20  .      int ii;. 
4000: 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
4010: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
4020: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4030: 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65  3BtreeSecureDele
4040: 74 65 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  te(db->aDb[ii].p
4050: 42 74 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a  Bt, b);.      }.
4060: 20 20 20 20 7d 0a 20 20 20 20 62 20 3d 20 73 71      }.    b = sq
4070: 6c 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65  lite3BtreeSecure
4080: 44 65 6c 65 74 65 28 70 42 74 2c 20 62 29 3b 0a  Delete(pBt, b);.
4090: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
40a0: 49 6e 74 28 76 2c 20 22 73 65 63 75 72 65 5f 64  Int(v, "secure_d
40b0: 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20 20 20  elete", b);.    
40c0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
40d0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
40e0: 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f  chema.]max_page_
40f0: 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47  count.  **  PRAG
4100: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 61 78 5f  MA [schema.]max_
4110: 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a  page_count=N.  *
4120: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
4130: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
4140: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
4150: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d  g for the.  ** m
4160: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
4170: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
4180: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
4190: 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66  e .  ** second f
41a0: 6f 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20  orm attempts to 
41b0: 63 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74  change this sett
41c0: 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20  ing.  Both.  ** 
41d0: 66 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65  forms return the
41e0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
41f0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
4200: 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
4210: 66 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68  f N is used.  Th
4220: 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  is is undocument
4230: 65 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a  ed and might.  *
4240: 2a 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f  * change.  The o
4250: 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74  nly purpose is t
4260: 6f 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73  o provide an eas
4270: 79 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20  y way to test.  
4280: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62  ** the sqlite3Ab
4290: 73 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f  sInt32() functio
42a0: 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52  n..  **.  **  PR
42b0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61  AGMA [schema.]pa
42c0: 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20  ge_count.  **.  
42d0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
42e0: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
42f0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64   the specified d
4300: 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20  atabase..  */.  
4310: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47  case PragTyp_PAG
4320: 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69  E_COUNT: {.    i
4330: 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71 6c  nt iReg;.    sql
4340: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
4350: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
4360: 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b  );.    iReg = ++
4370: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20  pParse->nMem;.  
4380: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c    if( sqlite3Tol
4390: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
43a0: 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  'p' ){.      sql
43b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
43c0: 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20  , OP_Pagecount, 
43d0: 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20  iDb, iReg);.    
43e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
43f0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
4400: 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69  , OP_MaxPgcnt, i
4410: 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20  Db, iReg, .     
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74     sqlite3AbsInt
4440: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
4450: 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a  Right)));.    }.
4460: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
4470: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
4480: 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b  ltRow, iReg, 1);
4490: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
44a0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
44b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
44c0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
44d0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
44e0: 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
44f0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62 72  ANSIENT);.    br
4500: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
4510: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
4520: 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ema.]locking_mod
4530: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
4540: 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f  schema.]locking_
4550: 6d 6f 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65  mode = (normal|e
4560: 78 63 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20  xclusive).  */. 
4570: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
4580: 43 4b 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20  CKING_MODE: {.  
4590: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52    const char *zR
45a0: 65 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20  et = "normal";. 
45b0: 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67     int eMode = g
45c0: 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52  etLockingMode(zR
45d0: 69 67 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20  ight);..    if( 
45e0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d  pId2->n==0 && eM
45f0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
4600: 4e 47 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a  NGMODE_QUERY ){.
4610: 20 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20        /* Simple 
4620: 22 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f  "PRAGMA locking_
4630: 6d 6f 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74  mode;" statement
4640: 2e 20 54 68 69 73 20 69 73 20 61 20 71 75 65 72  . This is a quer
4650: 79 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74  y for.      ** t
4660: 68 65 20 63 75 72 72 65 6e 74 20 64 65 66 61 75  he current defau
4670: 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20  lt locking mode 
4680: 28 77 68 69 63 68 20 6d 61 79 20 62 65 20 64 69  (which may be di
4690: 66 66 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20  fferent to.     
46a0: 20 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d   ** the locking-
46b0: 6d 6f 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e  mode of the main
46c0: 20 64 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20   database)..    
46d0: 20 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65    */.      eMode
46e0: 20 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d   = db->dfltLockM
46f0: 6f 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ode;.    }else{.
4700: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
4710: 67 65 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ger;.      if( p
4720: 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20  Id2->n==0 ){.   
4730: 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64       /* This ind
4740: 69 63 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64  icates that no d
4750: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73  atabase name was
4760: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
4770: 72 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66  rt.        ** of
4780: 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d   the PRAGMA comm
4790: 61 6e 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  and. In this cas
47a0: 65 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  e the locking-mo
47b0: 64 65 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20  de must be.     
47c0: 20 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c     ** set on all
47d0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
47e0: 73 65 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20  ses, as well as 
47f0: 74 68 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65  the main db file
4800: 2e 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20  ..        **.   
4810: 20 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68       ** Also, th
4820: 65 20 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f  e sqlite3.dfltLo
4830: 63 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20  ckMode variable 
4840: 69 73 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20  is set so that. 
4850: 20 20 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75         ** any su
4860: 62 73 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63  bsequently attac
4870: 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6c  hed databases al
4880: 73 6f 20 75 73 65 20 74 68 65 20 73 70 65 63 69  so use the speci
4890: 66 69 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  fied.        ** 
48a0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20  locking mode..  
48b0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
48c0: 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20   int ii;.       
48d0: 20 61 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62   assert(pDb==&db
48e0: 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20  ->aDb[0]);.     
48f0: 20 20 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c     for(ii=2; ii<
4900: 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
4910: 20 20 20 20 20 20 20 20 20 20 70 50 61 67 65 72            pPager
4920: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
4930: 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d  ager(db->aDb[ii]
4940: 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20  .pBt);.         
4950: 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63   sqlite3PagerLoc
4960: 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c  kingMode(pPager,
4970: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20   eMode);.       
4980: 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64   }.        db->d
4990: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75  fltLockMode = (u
49a0: 38 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d  8)eMode;.      }
49b0: 0a 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20  .      pPager = 
49c0: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
49d0: 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  r(pDb->pBt);.   
49e0: 20 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74     eMode = sqlit
49f0: 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f  e3PagerLockingMo
4a00: 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65  de(pPager, eMode
4a10: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73  );.    }..    as
4a20: 73 65 72 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47  sert( eMode==PAG
4a30: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e  ER_LOCKINGMODE_N
4a40: 4f 52 4d 41 4c 0a 20 20 20 20 20 20 20 20 20 20  ORMAL.          
4a50: 20 20 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45    || eMode==PAGE
4a60: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58  R_LOCKINGMODE_EX
4a70: 43 4c 55 53 49 56 45 20 29 3b 0a 20 20 20 20 69  CLUSIVE );.    i
4a80: 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  f( eMode==PAGER_
4a90: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
4aa0: 55 53 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a  USIVE ){.      z
4ab0: 52 65 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65  Ret = "exclusive
4ac0: 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  ";.    }.    ret
4ad0: 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c  urnSingleText(v,
4ae0: 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c   "locking_mode",
4af0: 20 7a 52 65 74 29 3b 0a 20 20 20 20 62 72 65 61   zRet);.    brea
4b00: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
4b10: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4b20: 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a  a.]journal_mode.
4b30: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
4b40: 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f  hema.]journal_mo
4b50: 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20  de =.  **       
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
4b70: 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f  delete|persist|o
4b80: 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f  ff|truncate|memo
4b90: 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f  ry|wal|off).  */
4ba0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
4bb0: 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a  JOURNAL_MODE: {.
4bc0: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20      int eMode;  
4bd0: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
4be0: 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  the PAGER_JOURNA
4bf0: 4c 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c  LMODE_XXX symbol
4c00: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b  s */.    int ii;
4c10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
4c20: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20  op counter */.. 
4c30: 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e     setOneColumnN
4c40: 61 6d 65 28 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f  ame(v, "journal_
4c50: 6d 6f 64 65 22 29 3b 0a 20 20 20 20 69 66 28 20  mode");.    if( 
4c60: 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20  zRight==0 ){.   
4c70: 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
4c80: 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72  s no "=MODE" par
4c90: 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 2c  t of the pragma,
4ca0: 20 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72 20   do a query for 
4cb0: 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  the.      ** cur
4cc0: 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20  rent mode */.   
4cd0: 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52     eMode = PAGER
4ce0: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
4cf0: 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  RY;.    }else{. 
4d00: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
4d10: 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e  *zMode;.      in
4d20: 74 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72  t n = sqlite3Str
4d30: 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a 20  len30(zRight);. 
4d40: 20 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30       for(eMode=0
4d50: 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74  ; (zMode = sqlit
4d60: 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
4d70: 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d  e(eMode))!=0; eM
4d80: 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ode++){.        
4d90: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
4da0: 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64  Cmp(zRight, zMod
4db0: 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b  e, n)==0 ) break
4dc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
4dd0: 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20  if( !zMode ){.  
4de0: 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
4df0: 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f 65  "=MODE" part doe
4e00: 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20  s not match any 
4e10: 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f  known journal mo
4e20: 64 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  de,.        ** t
4e30: 68 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20 2a  hen do a query *
4e40: 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20  /.        eMode 
4e50: 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  = PAGER_JOURNALM
4e60: 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 20  ODE_QUERY;.     
4e70: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4e80: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f   eMode==PAGER_JO
4e90: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20  URNALMODE_QUERY 
4ea0: 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b  && pId2->n==0 ){
4eb0: 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72  .      /* Conver
4ec0: 74 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61  t "PRAGMA journa
4ed0: 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50 52  l_mode" into "PR
4ee0: 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61  AGMA main.journa
4ef0: 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20  l_mode" */.     
4f00: 20 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20   iDb = 0;.      
4f10: 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20  pId2->n = 1;.   
4f20: 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62   }.    for(ii=db
4f30: 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20  ->nDb-1; ii>=0; 
4f40: 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28  ii--){.      if(
4f50: 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74   db->aDb[ii].pBt
4f60: 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20   && (ii==iDb || 
4f70: 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20  pId2->n==0) ){. 
4f80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4f90: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
4fa0: 69 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  i);.        sqli
4fb0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
4fc0: 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c   OP_JournalMode,
4fd0: 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a   ii, 1, eMode);.
4fe0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
4ff0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5000: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
5010: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
5020: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
5030: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
5040: 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73  chema.]journal_s
5050: 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20  ize_limit.  **  
5060: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
5070: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
5080: 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47  it=N.  **.  ** G
5090: 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 73 69  et or set the si
50a0: 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c  ze limit on roll
50b0: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
50c0: 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  es..  */.  case 
50d0: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
50e0: 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20  SIZE_LIMIT: {.  
50f0: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20    Pager *pPager 
5100: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
5110: 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ger(pDb->pBt);. 
5120: 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d 20     i64 iLimit = 
5130: 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  -2;.    if( zRig
5140: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
5150: 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
5160: 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74  (zRight, &iLimit
5170: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69  );.      if( iLi
5180: 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20  mit<-1 ) iLimit 
5190: 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  = -1;.    }.    
51a0: 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65 33  iLimit = sqlite3
51b0: 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65  PagerJournalSize
51c0: 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69 4c  Limit(pPager, iL
51d0: 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75 72  imit);.    retur
51e0: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6a  nSingleInt(v, "j
51f0: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
5200: 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t", iLimit);.   
5210: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e   break;.  }..#en
5220: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
5230: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
5240: 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20   */..  /*.  **  
5250: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
5260: 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a  auto_vacuum.  **
5270: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
5280: 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a  .]auto_vacuum=N.
5290: 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72    **.  ** Get or
52a0: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
52b0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 27  f the database '
52c0: 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70 61 72  auto-vacuum' par
52d0: 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65  ameter..  ** The
52e0: 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66   value is one of
52f0: 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c  :  0 NONE 1 FULL
5300: 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20   2 INCREMENTAL. 
5310: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
5320: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
5330: 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UM.  case PragTy
5340: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b  p_AUTO_VACUUM: {
5350: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
5360: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
5370: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
5380: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
5390: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
53a0: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 61  nSingleInt(v, "a
53b0: 75 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c  uto_vacuum", sql
53c0: 69 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f  ite3BtreeGetAuto
53d0: 56 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20  Vacuum(pBt));.  
53e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
53f0: 6e 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75  nt eAuto = getAu
5400: 74 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29  toVacuum(zRight)
5410: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5420: 65 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74  eAuto>=0 && eAut
5430: 6f 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62  o<=2 );.      db
5440: 2d 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20  ->nextAutovac = 
5450: 28 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20  (u8)eAuto;.     
5460: 20 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f   /* Call SetAuto
5470: 56 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20  Vacuum() to set 
5480: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69  initialize the i
5490: 6e 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64  nternal auto and
54a0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76  .      ** incr-v
54b0: 61 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69  acuum flags. Thi
54c0: 73 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e  s is required in
54d0: 20 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65   case this conne
54e0: 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63  ction.      ** c
54f0: 72 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62  reates the datab
5500: 61 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20  ase file. It is 
5510: 69 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69  important that i
5520: 74 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20  t is created.   
5530: 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f     ** as an auto
5540: 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20  -vacuum capable 
5550: 64 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  db..      */.   
5560: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
5570: 74 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75  treeSetAutoVacuu
5580: 6d 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20  m(pBt, eAuto);. 
5590: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
55a0: 49 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f  ITE_OK && (eAuto
55b0: 3d 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29  ==1 || eAuto==2)
55c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57   ){.        /* W
55d0: 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20  hen setting the 
55e0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65  auto_vacuum mode
55f0: 20 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c   to either "full
5600: 22 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a  " or .        **
5610: 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20   "incremental", 
5620: 77 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20  write the value 
5630: 6f 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68  of meta[6] in th
5640: 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
5650: 20 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f     ** file. Befo
5660: 72 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65  re writing to me
5670: 74 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61  ta[6], check tha
5680: 74 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61  t meta[3] indica
5690: 74 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  tes.        ** t
56a0: 68 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20  hat this really 
56b0: 69 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  is an auto-vacuu
56c0: 6d 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61  m capable databa
56d0: 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  se..        */. 
56e0: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
56f0: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
5700: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
5710: 28 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61  (2);.        sta
5720: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
5730: 4c 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20  List setMeta6[] 
5740: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20  = {.          { 
5750: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
5760: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c     0,         1,
5770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5780: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
5790: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52            { OP_R
57a0: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30  eadCookie,     0
57b0: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
57c0: 20 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45       BTREE_LARGE
57d0: 53 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20  ST_ROOT_PAGE},. 
57e0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66           { OP_If
57f0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c  ,             1,
5800: 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20           0,     
5810: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
5820: 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20     /* 2 */.     
5830: 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20       { OP_Halt, 
5840: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
5850: 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20  _OK, OE_Abort,  
5860: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
5870: 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 3 */.         
5880: 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c   { OP_SetCookie,
5890: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
58a0: 20 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55   BTREE_INCR_VACU
58b0: 55 4d 2c 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20  UM, 0},    /* 4 
58c0: 2a 2f 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20  */.        };.  
58d0: 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f        VdbeOp *aO
58e0: 70 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  p;.        int i
58f0: 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  Addr = sqlite3Vd
5900: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
5910: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
5920: 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c  3VdbeVerifyNoMal
5930: 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41  locRequired(v, A
5940: 72 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61  rraySize(setMeta
5950: 36 29 29 3b 0a 20 20 20 20 20 20 20 20 61 4f 70  6));.        aOp
5960: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
5970: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
5980: 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20  Size(setMeta6), 
5990: 73 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a  setMeta6, iLn);.
59a0: 20 20 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59          if( ONLY
59b0: 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  _IF_REALLOC_STRE
59c0: 53 53 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65  SS(aOp==0) ) bre
59d0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b  ak;.        aOp[
59e0: 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20  0].p1 = iDb;.   
59f0: 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d       aOp[1].p1 =
5a00: 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61 4f   iDb;.        aO
5a10: 70 5b 32 5d 2e 70 32 20 3d 20 69 41 64 64 72 2b  p[2].p2 = iAddr+
5a20: 34 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 34  4;.        aOp[4
5a30: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
5a40: 20 20 20 20 61 4f 70 5b 34 5d 2e 70 33 20 3d 20      aOp[4].p3 = 
5a50: 65 41 75 74 6f 20 2d 20 31 3b 0a 20 20 20 20 20  eAuto - 1;.     
5a60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
5a70: 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b  esBtree(v, iDb);
5a80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5a90: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
5aa0: 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ndif..  /*.  ** 
5ab0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
5ac0: 5d 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63  ]incremental_vac
5ad0: 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a  uum(N).  **.  **
5ae0: 20 44 6f 20 4e 20 73 74 65 70 73 20 6f 66 20 69   Do N steps of i
5af0: 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
5b00: 6d 69 6e 67 20 6f 6e 20 61 20 64 61 74 61 62 61  ming on a databa
5b10: 73 65 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66  se..  */.#ifndef
5b20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
5b30: 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50  OVACUUM.  case P
5b40: 72 61 67 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54  ragTyp_INCREMENT
5b50: 41 4c 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20  AL_VACUUM: {.   
5b60: 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 61 64 64   int iLimit, add
5b70: 72 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  r;.    if( zRigh
5b80: 74 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33  t==0 || !sqlite3
5b90: 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c  GetInt32(zRight,
5ba0: 20 26 69 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69   &iLimit) || iLi
5bb0: 6d 69 74 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20  mit<=0 ){.      
5bc0: 69 4c 69 6d 69 74 20 3d 20 30 78 37 66 66 66 66  iLimit = 0x7ffff
5bd0: 66 66 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  fff;.    }.    s
5be0: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
5bf0: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
5c00: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 73  , 0, iDb);.    s
5c10: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
5c20: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
5c30: 69 4c 69 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20  iLimit, 1);.    
5c40: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
5c50: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
5c60: 6e 63 72 56 61 63 75 75 6d 2c 20 69 44 62 29 3b  ncrVacuum, iDb);
5c70: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
5c80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5c90: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65  eAddOp1(v, OP_Re
5ca0: 73 75 6c 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20  sultRow, 1);.   
5cb0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5cc0: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
5cd0: 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c   1, -1);.    sql
5ce0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
5cf0: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61  , OP_IfPos, 1, a
5d00: 64 64 72 29 3b 20 56 64 62 65 43 6f 76 65 72 61  ddr); VdbeCovera
5d10: 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  ge(v);.    sqlit
5d20: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
5d30: 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 62 72 65  , addr);.    bre
5d40: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
5d50: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5d60: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
5d70: 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  S.  /*.  **  PRA
5d80: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63  GMA [schema.]cac
5d90: 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  he_size.  **  PR
5da0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61  AGMA [schema.]ca
5db0: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
5dc0: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
5dd0: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
5de0: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
5df0: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
5e00: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
5e10: 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66  ze. The second f
5e20: 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63  orm sets the loc
5e30: 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  al.  ** page cac
5e40: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  he size value.  
5e50: 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  If N is positive
5e60: 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68   then that is th
5e70: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
5e80: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61   pages in the ca
5e90: 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  che.  If N is ne
5ea0: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
5eb0: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
5ec0: 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65  pages is adjuste
5ed0: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61  d so that the ca
5ee0: 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69  che uses -N kibi
5ef0: 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65  bytes.  ** of me
5f00: 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  mory..  */.  cas
5f10: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
5f20: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65  SIZE: {.    asse
5f30: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
5f40: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
5f50: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
5f60: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
5f70: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
5f80: 6e 74 28 76 2c 20 22 63 61 63 68 65 5f 73 69 7a  nt(v, "cache_siz
5f90: 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  e", pDb->pSchema
5fa0: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
5fb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5fc0: 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74  int size = sqlit
5fd0: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
5fe0: 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65        pDb->pSche
5ff0: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d  ma->cache_size =
6000: 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c   size;.      sql
6010: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
6020: 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20  eSize(pDb->pBt, 
6030: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
6040: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
6050: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6060: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6070: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68  MA [schema.]cach
6080: 65 5f 73 70 69 6c 6c 0a 20 20 2a 2a 20 20 50 52  e_spill.  **  PR
6090: 41 47 4d 41 20 63 61 63 68 65 5f 73 70 69 6c 6c  AGMA cache_spill
60a0: 3d 42 4f 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20 50  =BOOLEAN.  **  P
60b0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63  RAGMA [schema.]c
60c0: 61 63 68 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a  ache_spill=N.  *
60d0: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
60e0: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
60f0: 65 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20  e current local 
6100: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
6110: 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20    ** page cache 
6120: 73 70 69 6c 6c 20 73 69 7a 65 2e 20 54 68 65 20  spill size. The 
6130: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 75 72 6e  second form turn
6140: 73 20 63 61 63 68 65 20 73 70 69 6c 6c 20 6f 6e  s cache spill on
6150: 0a 20 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 57  .  ** or off.  W
6160: 68 65 6e 20 74 75 72 6e 6e 69 6e 67 20 63 61 63  hen turnning cac
6170: 68 65 20 73 70 69 6c 6c 20 6f 6e 2c 20 74 68 65  he spill on, the
6180: 20 73 69 7a 65 20 69 73 20 73 65 74 20 74 6f 20   size is set to 
6190: 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74  the.  ** current
61a0: 20 63 61 63 68 65 5f 73 69 7a 65 2e 20 20 54 68   cache_size.  Th
61b0: 65 20 74 68 69 72 64 20 66 6f 72 6d 20 73 65 74  e third form set
61c0: 73 20 61 20 73 70 69 6c 6c 20 73 69 7a 65 20 74  s a spill size t
61d0: 68 61 74 0a 20 20 2a 2a 20 6d 61 79 20 62 65 20  hat.  ** may be 
61e0: 64 69 66 66 65 72 65 6e 74 20 66 6f 72 6d 20 74  different form t
61f0: 68 65 20 63 61 63 68 65 20 73 69 7a 65 2e 0a 20  he cache size.. 
6200: 20 2a 2a 20 49 66 20 4e 20 69 73 20 70 6f 73 69   ** If N is posi
6210: 74 69 76 65 20 74 68 65 6e 20 74 68 61 74 20 69  tive then that i
6220: 73 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65  s the.  ** numbe
6230: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
6240: 65 20 63 61 63 68 65 2e 20 20 49 66 20 4e 20 69  e cache.  If N i
6250: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e  s negative, then
6260: 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72   the.  ** number
6270: 20 6f 66 20 70 61 67 65 73 20 69 73 20 61 64 6a   of pages is adj
6280: 75 73 74 65 64 20 73 6f 20 74 68 61 74 20 74 68  usted so that th
6290: 65 20 63 61 63 68 65 20 75 73 65 73 20 2d 4e 20  e cache uses -N 
62a0: 6b 69 62 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f  kibibytes.  ** o
62b0: 66 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20  f memory..  **. 
62c0: 20 2a 2a 20 49 66 20 74 68 65 20 6e 75 6d 62 65   ** If the numbe
62d0: 72 20 6f 66 20 63 61 63 68 65 5f 73 70 69 6c 6c  r of cache_spill
62e0: 20 70 61 67 65 73 20 69 73 20 6c 65 73 73 20 74   pages is less t
62f0: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
6300: 66 0a 20 20 2a 2a 20 63 61 63 68 65 5f 73 69 7a  f.  ** cache_siz
6310: 65 20 70 61 67 65 73 2c 20 6e 6f 20 73 70 69 6c  e pages, no spil
6320: 6c 69 6e 67 20 6f 63 63 75 72 73 20 75 6e 74 69  ling occurs unti
6330: 6c 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74  l the page count
6340: 20 65 78 63 65 65 64 73 0a 20 20 2a 2a 20 74 68   exceeds.  ** th
6350: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63 68  e number of cach
6360: 65 5f 73 69 7a 65 20 70 61 67 65 73 2e 0a 20 20  e_size pages..  
6370: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 63 61 63 68  **.  ** The cach
6380: 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20  e_spill=BOOLEAN 
6390: 73 65 74 74 69 6e 67 20 61 70 70 6c 69 65 73 20  setting applies 
63a0: 74 6f 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  to all attached 
63b0: 73 63 68 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f  schemas,.  ** no
63c0: 74 20 6a 75 73 74 20 74 68 65 20 73 63 68 65 6d  t just the schem
63d0: 61 20 73 70 65 63 69 66 69 65 64 2e 0a 20 20 2a  a specified..  *
63e0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
63f0: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a  _CACHE_SPILL: {.
6400: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
6410: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
6420: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
6430: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
6440: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
6450: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 63  nSingleInt(v, "c
6460: 61 63 68 65 5f 73 70 69 6c 6c 22 2c 20 0a 20 20  ache_spill", .  
6470: 20 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67         (db->flag
6480: 73 20 26 20 53 51 4c 49 54 45 5f 43 61 63 68 65  s & SQLITE_Cache
6490: 53 70 69 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a 20  Spill)==0 ? 0 : 
64a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
64b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 70 69 6c  ite3BtreeSetSpil
64c0: 6c 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 30  lSize(pDb->pBt,0
64d0: 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ));.    }else{. 
64e0: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
64f0: 31 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  1;.      if( sql
6500: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
6510: 67 68 74 2c 20 26 73 69 7a 65 29 20 29 7b 0a 20  ght, &size) ){. 
6520: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
6530: 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28  reeSetSpillSize(
6540: 70 44 62 2d 3e 70 42 74 2c 20 73 69 7a 65 29 3b  pDb->pBt, size);
6550: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
6560: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
6570: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 73 69 7a  lean(zRight, siz
6580: 65 21 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20  e!=0) ){.       
6590: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
65a0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b  LITE_CacheSpill;
65b0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
65c0: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
65d0: 26 3d 20 7e 53 51 4c 49 54 45 5f 43 61 63 68 65  &= ~SQLITE_Cache
65e0: 53 70 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  Spill;.      }. 
65f0: 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72       setAllPager
6600: 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d  Flags(db);.    }
6610: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6620: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6630: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61 70  MA [schema.]mmap
6640: 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20  _size(N).  **.  
6650: 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d  ** Used to set m
6660: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
6670: 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73  t. The mapping s
6680: 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a  ize limit is.  *
6690: 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  * used to limit 
66a0: 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 69  the aggregate si
66b0: 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79  ze of all memory
66c0: 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20   mapped regions 
66d0: 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  of the.  ** data
66e0: 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68  base file. If th
66f0: 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  is parameter is 
6700: 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65  set to zero, the
6710: 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67  n memory mapping
6720: 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65  .  ** is not use
6730: 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20  d at all.  If N 
6740: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
6750: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65  n the default me
6760: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69  mory map.  ** li
6770: 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62  mit determined b
6780: 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  y sqlite3_config
6790: 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  (SQLITE_CONFIG_M
67a0: 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74  MAP_SIZE) is set
67b0: 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d  ..  ** The param
67c0: 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72  eter N is measur
67d0: 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a  ed in bytes..  *
67e0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75  *.  ** This valu
67f0: 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20  e is advisory.  
6800: 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56  The underlying V
6810: 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65  FS is free to me
6820: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73  mory map.  ** as
6830: 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75   little or as mu
6840: 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20  ch as it wants. 
6850: 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73   Except, if N is
6860: 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74   set to 0 then t
6870: 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61  he.  ** upper la
6880: 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20  yers will never 
6890: 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63  invoke the xFetc
68a0: 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20  h interfaces to 
68b0: 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20  the VFS..  */.  
68c0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  case PragTyp_MMA
68d0: 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71  P_SIZE: {.    sq
68e0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a  lite3_int64 sz;.
68f0: 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  #if SQLITE_MAX_M
6900: 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61  MAP_SIZE>0.    a
6910: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
6920: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
6930: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
6940: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
6950: 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20       int ii;.   
6960: 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48     sqlite3DecOrH
6970: 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
6980: 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20  &sz);.      if( 
6990: 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69  sz<0 ) sz = sqli
69a0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
69b0: 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66  szMmap;.      if
69c0: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64  ( pId2->n==0 ) d
69d0: 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a  b->szMmap = sz;.
69e0: 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d        for(ii=db-
69f0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
6a00: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i--){.        if
6a10: 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  ( db->aDb[ii].pB
6a20: 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c  t && (ii==iDb ||
6a30: 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a   pId2->n==0) ){.
6a40: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
6a50: 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d  3BtreeSetMmapLim
6a60: 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  it(db->aDb[ii].p
6a70: 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20  Bt, sz);.       
6a80: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
6a90: 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20  .    sz = -1;.  
6aa0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
6ab0: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
6ac0: 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
6ad0: 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a  L_MMAP_SIZE, &sz
6ae0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20  );.#else.    sz 
6af0: 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 0;.    rc = SQ
6b00: 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a  LITE_OK;.#endif.
6b10: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
6b20: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
6b30: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
6b40: 2c 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 20 73  , "mmap_size", s
6b50: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  z);.    }else if
6b60: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54  ( rc!=SQLITE_NOT
6b70: 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20 20 70  FOUND ){.      p
6b80: 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20  Parse->nErr++;. 
6b90: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20       pParse->rc 
6ba0: 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20  = rc;.    }.    
6bb0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6bc0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
6bd0: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a 20 20  emp_store.  **  
6be0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6bf0: 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22 7c 22  re = "default"|"
6c00: 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a 20  memory"|"file". 
6c10: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
6c20: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
6c30: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
6c40: 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e 20 20  mp_store flag.  
6c50: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
6c60: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f  e local value do
6c70: 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e  es not make chan
6c80: 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20  ges to the disk 
6c90: 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64 65 66  file and the def
6ca0: 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20  ault.  ** value 
6cb0: 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64  will be restored
6cc0: 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74   the next time t
6cd0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f  he database is o
6ce0: 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  pened..  **.  **
6cf0: 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69 73   Note that it is
6d00: 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68   possible for th
6d10: 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c  e library compil
6d20: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74  e-time options t
6d30: 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64 65 20  o.  ** override 
6d40: 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20 20 2a  this setting.  *
6d50: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
6d60: 5f 54 45 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a 20  _TEMP_STORE: {. 
6d70: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
6d80: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
6d90: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 65 6d 70  ngleInt(v, "temp
6da0: 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d  _store", db->tem
6db0: 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65  p_store);.    }e
6dc0: 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67  lse{.      chang
6dd0: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
6de0: 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  rse, zRight);.  
6df0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
6e00: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
6e10: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6e20: 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a  e_directory.  **
6e30: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6e40: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d  tore_directory =
6e50: 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e   ""|"directory_n
6e60: 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ame".  **.  ** R
6e70: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
6e80: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
6e90: 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  the temp_store_d
6ea0: 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20  irectory flag.  
6eb0: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
6ec0: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
6ed0: 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72  pecific director
6ee0: 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  y to be used for
6ef0: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
6f00: 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20 74  ..  ** Setting t
6f10: 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20  o a null string 
6f20: 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20 64  reverts to the d
6f30: 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72 79  efault temporary
6f40: 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72 63   directory searc
6f50: 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f  h..  ** If tempo
6f60: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 69  rary directory i
6f70: 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e 20  s changed, then 
6f80: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
6f90: 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f  orage..  **.  */
6fa0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
6fb0: 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45 43  TEMP_STORE_DIREC
6fc0: 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  TORY: {.    if( 
6fd0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
6fe0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78   returnSingleTex
6ff0: 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65  t(v, "temp_store
7000: 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 73 71 6c  _directory", sql
7010: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
7020: 6f 72 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ory);.    }else{
7030: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7040: 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69  OMIT_WSD.      i
7050: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
7060: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b          int res;
7070: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
7080: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
7090: 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20  ->pVfs, zRight, 
70a0: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45  SQLITE_ACCESS_RE
70b0: 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a  ADWRITE, &res);.
70c0: 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
70d0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
70e0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
70f0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
7100: 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20  (pParse, "not a 
7110: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
7120: 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ry");.          
7130: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
7140: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
7150: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c   }.      if( SQL
7160: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
7170: 30 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  0.       || (SQL
7180: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
7190: 31 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  1 && db->temp_st
71a0: 6f 72 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c  ore<=1).       |
71b0: 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  | (SQLITE_TEMP_S
71c0: 54 4f 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74  TORE==2 && db->t
71d0: 65 6d 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20  emp_store==1).  
71e0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
71f0: 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f  nvalidateTempSto
7200: 72 61 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20  rage(pParse);.  
7210: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
7220: 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33  te3_free(sqlite3
7230: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29  _temp_directory)
7240: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  ;.      if( zRig
7250: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
7260: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
7270: 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65  rectory = sqlite
7280: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
7290: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
72a0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
72b0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
72c0: 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  tory = 0;.      
72d0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
72e0: 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20  TE_OMIT_WSD */. 
72f0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
7300: 20 20 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f    }..#if SQLITE_
7310: 4f 53 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a  OS_WIN.  /*.  **
7320: 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73     PRAGMA data_s
7330: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20  tore_directory. 
7340: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74   **   PRAGMA dat
7350: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
7360: 79 20 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72  y = ""|"director
7370: 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a  y_name".  **.  *
7380: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
7390: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
73a0: 6f 66 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72  of the data_stor
73b0: 65 5f 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67  e_directory flag
73c0: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
73d0: 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20   the value sets 
73e0: 61 20 73 70 65 63 69 66 69 63 20 64 69 72 65 63  a specific direc
73f0: 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65 64 20  tory to be used 
7400: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
7410: 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72  es that.  ** wer
7420: 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
7430: 20 61 20 72 65 6c 61 74 69 76 65 20 70 61 74 68   a relative path
7440: 6e 61 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74  name.  Setting t
7450: 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20  o a null string 
7460: 72 65 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20  reverts.  ** to 
7470: 74 68 65 20 64 65 66 61 75 6c 74 20 64 61 74 61  the default data
7480: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20  base directory, 
7490: 77 68 69 63 68 20 66 6f 72 20 64 61 74 61 62 61  which for databa
74a0: 73 65 20 66 69 6c 65 73 20 73 70 65 63 69 66 69  se files specifi
74b0: 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72  ed with.  ** a r
74c0: 65 6c 61 74 69 76 65 20 70 61 74 68 20 77 69 6c  elative path wil
74d0: 6c 20 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61  l probably be ba
74e0: 73 65 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65  sed on the curre
74f0: 6e 74 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72  nt directory for
7500: 20 74 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73   the.  ** proces
7510: 73 2e 20 20 44 61 74 61 62 61 73 65 20 66 69 6c  s.  Database fil
7520: 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
7530: 20 61 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74   an absolute pat
7540: 68 20 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74  h are not impact
7550: 65 64 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20  ed.  ** by this 
7560: 73 65 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c  setting, regardl
7570: 65 73 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65  ess of its value
7580: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
7590: 73 65 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f  se PragTyp_DATA_
75a0: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
75b0: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
75c0: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
75d0: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
75e0: 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65  "data_store_dire
75f0: 63 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f  ctory", sqlite3_
7600: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b  data_directory);
7610: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e  .    }else{.#ifn
7620: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7630: 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52  WSD.      if( zR
7640: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7650: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
7660: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
7670: 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66  OsAccess(db->pVf
7680: 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54  s, zRight, SQLIT
7690: 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49  E_ACCESS_READWRI
76a0: 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  TE, &res);.     
76b0: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
76c0: 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
76d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
76e0: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
76f0: 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61  se, "not a writa
7700: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b  ble directory");
7710: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
7720: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
7730: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
7740: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
7750: 28 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69  (sqlite3_data_di
7760: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
7770: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
7780: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
7790: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20  _data_directory 
77a0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
77b0: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
77c0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
77d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61        sqlite3_da
77e0: 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  ta_directory = 0
77f0: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
7800: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
7810: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
7820: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
7830: 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  if..#if SQLITE_E
7840: 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
7850: 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  YLE.  /*.  **   
7860: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
7870: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a  lock_proxy_file.
7880: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
7890: 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78  chema.]lock_prox
78a0: 79 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a  y_file = ":auto:
78b0: 22 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74  "|"lock_file_pat
78c0: 68 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  h".  **.  ** Ret
78d0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76  urn or set the v
78e0: 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b  alue of the lock
78f0: 5f 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67  _proxy_file flag
7900: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
7910: 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20   the value sets 
7920: 61 20 73 70 65 63 69 66 69 63 20 66 69 6c 65 20  a specific file 
7930: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64  to be used for d
7940: 61 74 61 62 61 73 65 20 61 63 63 65 73 73 20 6c  atabase access l
7950: 6f 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a  ocks..  **.  */.
7960: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c    case PragTyp_L
7970: 4f 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20  OCK_PROXY_FILE: 
7980: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
7990: 74 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72  t ){.      Pager
79a0: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
79b0: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
79c0: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68  ->pBt);.      ch
79d0: 61 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70  ar *proxy_file_p
79e0: 61 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  ath = NULL;.    
79f0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a    sqlite3_file *
7a00: 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  pFile = sqlite3P
7a10: 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29  agerFile(pPager)
7a20: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
7a30: 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74  sFileControlHint
7a40: 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47  (pFile, SQLITE_G
7a50: 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45  ET_LOCKPROXYFILE
7a60: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70                &p
7a80: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b  roxy_file_path);
7a90: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7aa0: 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f 63 6b  gleText(v, "lock
7ab0: 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 70 72  _proxy_file", pr
7ac0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a  oxy_file_path);.
7ad0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7ae0: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
7af0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
7b00: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
7b10: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
7b20: 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65   *pFile = sqlite
7b30: 33 50 61 67 65 72 46 69 6c 65 28 70 50 61 67 65  3PagerFile(pPage
7b40: 72 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65  r);.      int re
7b50: 73 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  s;.      if( zRi
7b60: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
7b70: 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46    res=sqlite3OsF
7b80: 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65  ileControl(pFile
7b90: 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43  , SQLITE_SET_LOC
7ba0: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bd0: 20 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20    zRight);.     
7be0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
7bf0: 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46    res=sqlite3OsF
7c00: 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65  ileControl(pFile
7c10: 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43  , SQLITE_SET_LOC
7c20: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d    NULL);.      }
7c60: 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 21 3d  .      if( res!=
7c70: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
7c80: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
7c90: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 66 61  rMsg(pParse, "fa
7ca0: 69 6c 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b  iled to set lock
7cb0: 20 70 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20   proxy file");. 
7cc0: 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67         goto prag
7cd0: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  ma_out;.      }.
7ce0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7cf0: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
7d00: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
7d10: 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20  KING_STYLE */   
7d20: 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20     .    .  /*.  
7d30: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
7d40: 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ema.]synchronous
7d50: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
7d60: 73 63 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e  schema.]synchron
7d70: 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41  ous=OFF|ON|NORMA
7d80: 4c 7c 46 55 4c 4c 7c 45 58 54 52 41 0a 20 20 2a  L|FULL|EXTRA.  *
7d90: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
7da0: 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76   set the local v
7db0: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e 63  alue of the sync
7dc0: 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43  hronous flag.  C
7dd0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
7de0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65   local value doe
7df0: 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67  s not make chang
7e00: 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66  es to the disk f
7e10: 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a  ile and the.  **
7e20: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77   default value w
7e30: 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20  ill be restored 
7e40: 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68  the next time th
7e50: 65 20 64 61 74 61 62 61 73 65 20 69 73 0a 20 20  e database is.  
7e60: 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a  ** opened..  */.
7e70: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53    case PragTyp_S
7e80: 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20  YNCHRONOUS: {.  
7e90: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
7ea0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7eb0: 67 6c 65 49 6e 74 28 76 2c 20 22 73 79 6e 63 68  gleInt(v, "synch
7ec0: 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61  ronous", pDb->sa
7ed0: 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20  fety_level-1);. 
7ee0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7ef0: 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
7f00: 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73  mit ){.        s
7f10: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7f20: 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20  Parse, .        
7f30: 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76 65      "Safety leve
7f40: 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61  l may not be cha
7f50: 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74 72  nged inside a tr
7f60: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
7f70: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7f80: 20 20 69 6e 74 20 69 4c 65 76 65 6c 20 3d 20 28    int iLevel = (
7f90: 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a  getSafetyLevel(z
7fa0: 52 69 67 68 74 2c 30 2c 31 29 2b 31 29 20 26 20  Right,0,1)+1) & 
7fb0: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
7fc0: 53 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20 20  S_MASK;.        
7fd0: 69 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20  if( iLevel==0 ) 
7fe0: 69 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20  iLevel = 1;.    
7ff0: 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f      pDb->safety_
8000: 6c 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a  level = iLevel;.
8010: 20 20 20 20 20 20 20 20 70 44 62 2d 3e 62 53 79          pDb->bSy
8020: 6e 63 53 65 74 20 3d 20 31 3b 0a 20 20 20 20 20  ncSet = 1;.     
8030: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
8040: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ags(db);.      }
8050: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
8060: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
8070: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
8080: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
8090: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
80a0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20  T_FLAG_PRAGMAS. 
80b0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c   case PragTyp_FL
80c0: 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  AG: {.    if( zR
80d0: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
80e0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
80f0: 28 76 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61  (v, pPragma->zNa
8100: 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  me, (db->flags &
8110: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 29 21   pPragma->iArg)!
8120: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
8130: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20  .      int mask 
8140: 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b  = pPragma->iArg;
8150: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62      /* Mask of b
8160: 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c  its to set or cl
8170: 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  ear. */.      if
8180: 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
8190: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
81a0: 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75  * Foreign key su
81b0: 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65  pport may not be
81c0: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
81d0: 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20  bled while not. 
81e0: 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74         ** in aut
81f0: 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20  o-commit mode.  
8200: 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20  */.        mask 
8210: 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65  &= ~(SQLITE_Fore
8220: 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20  ignKeys);.      
8230: 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45  }.#if SQLITE_USE
8240: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
8250: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
8260: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55  uth.authLevel==U
8270: 41 55 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20  AUTH_User ){.   
8280: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61       /* Do not a
8290: 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75  llow non-admin u
82a0: 73 65 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74  sers to modify t
82b0: 68 65 20 73 63 68 65 6d 61 20 61 72 62 69 74 72  he schema arbitr
82c0: 61 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20  arily */.       
82d0: 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54   mask &= ~(SQLIT
82e0: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a  E_WriteSchema);.
82f0: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a        }.#endif..
8300: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
8310: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
8320: 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20  ht, 0) ){.      
8330: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d    db->flags |= m
8340: 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ask;.      }else
8350: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c  {.        db->fl
8360: 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20  ags &= ~mask;.  
8370: 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d        if( mask==
8380: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
8390: 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  ) db->nDeferredI
83a0: 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20  mmCons = 0;.    
83b0: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61    }..      /* Ma
83c0: 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70  ny of the flag-p
83d0: 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68  ragmas modify th
83e0: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64  e code generated
83f0: 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20   by the SQL .   
8400: 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28     ** compiler (
8410: 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  eg. count_change
8420: 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70  s). So add an op
8430: 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20 61  code to expire a
8440: 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70  ll.      ** comp
8450: 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  iled SQL stateme
8460: 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79  nts after modify
8470: 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c  ing a pragma val
8480: 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ue..      */.   
8490: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
84a0: 64 4f 70 30 28 76 2c 20 4f 50 5f 45 78 70 69 72  dOp0(v, OP_Expir
84b0: 65 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c  e);.      setAll
84c0: 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a  PagerFlags(db);.
84d0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
84e0: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
84f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
8500: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
8510: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8520: 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20  SCHEMA_PRAGMAS. 
8530: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
8540: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61  A table_info(<ta
8550: 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ble>).  **.  ** 
8560: 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20  Return a single 
8570: 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  row for each col
8580: 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64  umn of the named
8590: 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75   table. The colu
85a0: 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20  mns of.  ** the 
85b0: 72 65 74 75 72 6e 65 64 20 64 61 74 61 20 73 65  returned data se
85c0: 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a  t are:.  **.  **
85d0: 20 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c   cid:        Col
85e0: 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64  umn id (numbered
85f0: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
8600: 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74  ght, starting at
8610: 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20   0).  ** name:  
8620: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65       Column name
8630: 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20  .  ** type:     
8640: 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61    Column declara
8650: 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20  tion type..  ** 
8660: 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65  notnull:    True
8670: 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69   if 'NOT NULL' i
8680: 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e  s part of column
8690: 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a   declaration.  *
86a0: 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68  * dflt_value: Th
86b0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
86c0: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20  for the column, 
86d0: 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63  if any..  */.  c
86e0: 61 73 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c  ase PragTyp_TABL
86f0: 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67  E_INFO: if( zRig
8700: 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20  ht ){.    Table 
8710: 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20  *pTab;.    pTab 
8720: 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54  = sqlite3LocateT
8730: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 4c 4f 43  able(pParse, LOC
8740: 41 54 45 5f 4e 4f 45 52 52 2c 20 7a 52 69 67 68  ATE_NOERR, zRigh
8750: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
8760: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73   pTab ){.      s
8770: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
8780: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20   *azCol[] = {.  
8790: 20 20 20 20 20 20 20 22 63 69 64 22 2c 20 22 6e         "cid", "n
87a0: 61 6d 65 22 2c 20 22 74 79 70 65 22 2c 20 22 6e  ame", "type", "n
87b0: 6f 74 6e 75 6c 6c 22 2c 20 22 64 66 6c 74 5f 76  otnull", "dflt_v
87c0: 61 6c 75 65 22 2c 20 22 70 6b 22 0a 20 20 20 20  alue", "pk".    
87d0: 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 69    };.      int i
87e0: 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  , k;.      int n
87f0: 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20  Hidden = 0;.    
8800: 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a    Column *pCol;.
8810: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b        Index *pPk
8820: 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72   = sqlite3Primar
8830: 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b  yKeyIndex(pTab);
8840: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
8850: 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73  Mem = 6;.      s
8860: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
8870: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
8880: 44 62 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c  Db);.      setAl
8890: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
88a0: 36 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  6, azCol); asser
88b0: 74 28 20 36 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 6==ArraySize(
88c0: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20  azCol) );.      
88d0: 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
88e0: 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65  lumnNames(pParse
88f0: 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66  , pTab);.      f
8900: 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61  or(i=0, pCol=pTa
8910: 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d  b->aCol; i<pTab-
8920: 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c  >nCol; i++, pCol
8930: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
8940: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
8950: 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20  pCol) ){.       
8960: 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20     nHidden++;.  
8970: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
8980: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
8990: 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63      if( (pCol->c
89a0: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
89b0: 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b  G_PRIMKEY)==0 ){
89c0: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
89d0: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
89e0: 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20  if( pPk==0 ){.  
89f0: 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20          k = 1;. 
8a00: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
8a10: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b          for(k=1;
8a20: 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20 26   k<=pTab->nCol &
8a30: 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b  & pPk->aiColumn[
8a40: 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a  k-1]!=i; k++){}.
8a50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8a60: 20 20 61 73 73 65 72 74 28 20 70 43 6f 6c 2d 3e    assert( pCol->
8a70: 70 44 66 6c 74 3d 3d 30 20 7c 7c 20 70 43 6f 6c  pDflt==0 || pCol
8a80: 2d 3e 70 44 66 6c 74 2d 3e 6f 70 3d 3d 54 4b 5f  ->pDflt->op==TK_
8a90: 53 50 41 4e 20 29 3b 0a 20 20 20 20 20 20 20 20  SPAN );.        
8aa0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
8ab0: 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 73 69  Load(v, 1, "issi
8ac0: 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  si",.           
8ad0: 20 20 20 20 69 2d 6e 48 69 64 64 65 6e 2c 0a 20      i-nHidden,. 
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
8af0: 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ol->zName,.     
8b00: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
8b10: 33 43 6f 6c 75 6d 6e 54 79 70 65 28 70 43 6f 6c  3ColumnType(pCol
8b20: 2c 22 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20  ,""),.          
8b30: 20 20 20 20 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75       pCol->notNu
8b40: 6c 6c 20 3f 20 31 20 3a 20 30 2c 0a 20 20 20 20  ll ? 1 : 0,.    
8b50: 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d             pCol-
8b60: 3e 70 44 66 6c 74 20 3f 20 70 43 6f 6c 2d 3e 70  >pDflt ? pCol->p
8b70: 44 66 6c 74 2d 3e 75 2e 7a 54 6f 6b 65 6e 20 3a  Dflt->u.zToken :
8b80: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
8b90: 20 20 20 6b 29 3b 0a 20 20 20 20 20 20 20 20 73     k);.        s
8ba0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
8bb0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
8bc0: 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d  , 1, 6);.      }
8bd0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
8be0: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
8bf0: 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20  Typ_STATS: {.   
8c00: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8c10: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20  ar *azCol[] = { 
8c20: 22 74 61 62 6c 65 22 2c 20 22 69 6e 64 65 78 22  "table", "index"
8c30: 2c 20 22 77 69 64 74 68 22 2c 20 22 68 65 69 67  , "width", "heig
8c40: 68 74 22 20 7d 3b 0a 20 20 20 20 49 6e 64 65 78  ht" };.    Index
8c50: 20 2a 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68   *pIdx;.    Hash
8c60: 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d  Elem *i;.    v =
8c70: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
8c80: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 70 50 61  pParse);.    pPa
8c90: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20  rse->nMem = 4;. 
8ca0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
8cb0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
8cc0: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 65 74  e, iDb);.    set
8cd0: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
8ce0: 2c 20 34 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73  , 4, azCol);  as
8cf0: 73 65 72 74 28 20 34 3d 3d 41 72 72 61 79 53 69  sert( 4==ArraySi
8d00: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
8d10: 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73   for(i=sqliteHas
8d20: 68 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63  hFirst(&pDb->pSc
8d30: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20  hema->tblHash); 
8d40: 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e  i; i=sqliteHashN
8d50: 65 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54  ext(i)){.      T
8d60: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
8d70: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a  iteHashData(i);.
8d80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8d90: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
8da0: 20 22 73 73 69 69 22 2c 0a 20 20 20 20 20 20 20   "ssii",.       
8db0: 20 20 20 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c      pTab->zName,
8dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 30 2c 0a 20  .           0,. 
8dd0: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
8de0: 73 7a 54 61 62 52 6f 77 2c 0a 20 20 20 20 20 20  szTabRow,.      
8df0: 20 20 20 20 20 70 54 61 62 2d 3e 6e 52 6f 77 4c       pTab->nRowL
8e00: 6f 67 45 73 74 29 3b 0a 20 20 20 20 20 20 73 71  ogEst);.      sq
8e10: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8e20: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
8e30: 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 66 6f   1, 4);.      fo
8e40: 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  r(pIdx=pTab->pIn
8e50: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
8e60: 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pIdx->pNext){.  
8e70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8e80: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 32 2c  eMultiLoad(v, 2,
8e90: 20 22 73 69 69 22 2c 0a 20 20 20 20 20 20 20 20   "sii",.        
8ea0: 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a     pIdx->zName,.
8eb0: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
8ec0: 3e 73 7a 49 64 78 52 6f 77 2c 0a 20 20 20 20 20  >szIdxRow,.     
8ed0: 20 20 20 20 20 20 70 49 64 78 2d 3e 61 69 52 6f        pIdx->aiRo
8ee0: 77 4c 6f 67 45 73 74 5b 30 5d 29 3b 0a 20 20 20  wLogEst[0]);.   
8ef0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8f00: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
8f10: 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20  ultRow, 1, 4);. 
8f20: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
8f30: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
8f40: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
8f50: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
8f60: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
8f70: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
8f80: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
8f90: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
8fa0: 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  x(db, zRight, zD
8fb0: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  b);.    if( pIdx
8fc0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 54 61  ==0 ){.      pTa
8fd0: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
8fe0: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
8ff0: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 69 66 28   zDb);.      if(
9000: 20 70 54 61 62 20 26 26 20 21 48 61 73 52 6f 77   pTab && !HasRow
9010: 69 64 28 70 54 61 62 29 20 29 20 70 49 64 78 20  id(pTab) ) pIdx 
9020: 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79  = sqlite3Primary
9030: 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a  KeyIndex(pTab);.
9040: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49      }.    if( pI
9050: 64 78 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  dx ){.      stat
9060: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
9070: 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  zCol[] = {.     
9080: 20 20 20 20 22 73 65 71 6e 6f 22 2c 20 22 63 69      "seqno", "ci
9090: 64 22 2c 20 22 6e 61 6d 65 22 2c 20 22 64 65 73  d", "name", "des
90a0: 63 22 2c 20 22 63 6f 6c 6c 22 2c 20 22 6b 65 79  c", "coll", "key
90b0: 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  ".      };.     
90c0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 69 6e   int i;.      in
90d0: 74 20 6d 78 3b 0a 20 20 20 20 20 20 69 66 28 20  t mx;.      if( 
90e0: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b  pPragma->iArg ){
90f0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47  .        /* PRAG
9100: 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 28  MA index_xinfo (
9110: 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 20 77 69  newer version wi
9120: 74 68 20 6d 6f 72 65 20 72 6f 77 73 20 61 6e 64  th more rows and
9130: 20 63 6f 6c 75 6d 6e 73 29 20 2a 2f 0a 20 20 20   columns) */.   
9140: 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e       mx = pIdx->
9150: 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20 20 20  nColumn;.       
9160: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9170: 36 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  6;.      }else{.
9180: 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47 4d          /* PRAGM
9190: 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20 28 6c 65  A index_info (le
91a0: 67 61 63 79 20 76 65 72 73 69 6f 6e 29 20 2a 2f  gacy version) */
91b0: 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49  .        mx = pI
91c0: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20  dx->nKeyCol;.   
91d0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
91e0: 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a 20  m = 3;.      }. 
91f0: 20 20 20 20 20 70 54 61 62 20 3d 20 70 49 64 78       pTab = pIdx
9200: 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20  ->pTable;.      
9210: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
9220: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
9230: 69 44 62 29 3b 0a 20 20 20 20 20 20 61 73 73 65  iDb);.      asse
9240: 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  rt( pParse->nMem
9250: 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  <=ArraySize(azCo
9260: 6c 29 20 29 3b 0a 20 20 20 20 20 20 73 65 74 41  l) );.      setA
9270: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
9280: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 61   pParse->nMem, a
9290: 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20 66 6f 72  zCol);.      for
92a0: 28 69 3d 30 3b 20 69 3c 6d 78 3b 20 69 2b 2b 29  (i=0; i<mx; i++)
92b0: 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20 63 6e  {.        i16 cn
92c0: 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c  um = pIdx->aiCol
92d0: 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  umn[i];.        
92e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
92f0: 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 69 73 22  Load(v, 1, "iis"
9300: 2c 20 69 2c 20 63 6e 75 6d 2c 0a 20 20 20 20 20  , i, cnum,.     
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9320: 20 20 20 20 20 20 20 20 63 6e 75 6d 3c 30 20 3f          cnum<0 ?
9330: 20 30 20 3a 20 70 54 61 62 2d 3e 61 43 6f 6c 5b   0 : pTab->aCol[
9340: 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  cnum].zName);.  
9350: 20 20 20 20 20 20 69 66 28 20 70 50 72 61 67 6d        if( pPragm
9360: 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20  a->iArg ){.     
9370: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9380: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 34 2c 20  MultiLoad(v, 4, 
9390: 22 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20  "isi",.         
93a0: 20 20 20 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72     pIdx->aSortOr
93b0: 64 65 72 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20  der[i],.        
93c0: 20 20 20 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c      pIdx->azColl
93d0: 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  [i],.           
93e0: 20 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c   i<pIdx->nKeyCol
93f0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
9400: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9410: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
9420: 75 6c 74 52 6f 77 2c 20 31 2c 20 70 50 61 72 73  ultRow, 1, pPars
9430: 65 2d 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20  e->nMem);.      
9440: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
9450: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
9460: 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a  gTyp_INDEX_LIST:
9470: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
9480: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
9490: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
94a0: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
94b0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
94c0: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67  ndTable(db, zRig
94d0: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
94e0: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
94f0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
9500: 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20  r *azCol[] = {. 
9510: 20 20 20 20 20 20 20 22 73 65 71 22 2c 20 22 6e         "seq", "n
9520: 61 6d 65 22 2c 20 22 75 6e 69 71 75 65 22 2c 20  ame", "unique", 
9530: 22 6f 72 69 67 69 6e 22 2c 20 22 70 61 72 74 69  "origin", "parti
9540: 61 6c 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20  al".      };.   
9550: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
9560: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
9570: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
9580: 6d 20 3d 20 35 3b 0a 20 20 20 20 20 20 73 71 6c  m = 5;.      sql
9590: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
95a0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
95b0: 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43  );.      setAllC
95c0: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 35 2c  olumnNames(v, 5,
95d0: 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74   azCol);  assert
95e0: 28 20 35 3d 3d 41 72 72 61 79 53 69 7a 65 28 61  ( 5==ArraySize(a
95f0: 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 66  zCol) );.      f
9600: 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  or(pIdx=pTab->pI
9610: 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64 78 3b  ndex, i=0; pIdx;
9620: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
9630: 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, i++){.       
9640: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4f   const char *azO
9650: 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22 63 22 2c  rigin[] = { "c",
9660: 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b 0a 20 20   "u", "pk" };.  
9670: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9680: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
9690: 20 22 69 73 69 73 69 22 2c 0a 20 20 20 20 20 20   "isisi",.      
96a0: 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20       i,.        
96b0: 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a     pIdx->zName,.
96c0: 20 20 20 20 20 20 20 20 20 20 20 49 73 55 6e 69             IsUni
96d0: 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 2c 0a  queIndex(pIdx),.
96e0: 20 20 20 20 20 20 20 20 20 20 20 61 7a 4f 72 69             azOri
96f0: 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78 54 79 70  gin[pIdx->idxTyp
9700: 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70  e],.           p
9710: 49 64 78 2d 3e 70 50 61 72 74 49 64 78 57 68 65  Idx->pPartIdxWhe
9720: 72 65 21 3d 30 29 3b 0a 20 20 20 20 20 20 20 20  re!=0);.        
9730: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9740: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
9750: 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20 20 20 20  w, 1, 5);.      
9760: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
9770: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
9780: 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49  gTyp_DATABASE_LI
9790: 53 54 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  ST: {.    static
97a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
97b0: 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65 71 22 2c 20  ol[] = { "seq", 
97c0: 22 6e 61 6d 65 22 2c 20 22 66 69 6c 65 22 20 7d  "name", "file" }
97d0: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
97e0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
97f0: 33 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  3;.    setAllCol
9800: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 33 2c 20 61  umnNames(v, 3, a
9810: 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 33  zCol); assert( 3
9820: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
9830: 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  l) );.    for(i=
9840: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
9850: 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  +){.      if( db
9860: 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20  ->aDb[i].pBt==0 
9870: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
9880: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44    assert( db->aD
9890: 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65 21 3d 30  b[i].zDbSName!=0
98a0: 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
98b0: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
98c0: 2c 20 31 2c 20 22 69 73 73 22 2c 0a 20 20 20 20  , 1, "iss",.    
98d0: 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20       i,.        
98e0: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53   db->aDb[i].zDbS
98f0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 73  Name,.         s
9900: 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46 69  qlite3BtreeGetFi
9910: 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69  lename(db->aDb[i
9920: 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20 20 20 73  ].pBt));.      s
9930: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9940: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
9950: 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 3);.    }. 
9960: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
9970: 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c  ase PragTyp_COLL
9980: 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20  ATION_LIST: {.  
9990: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
99a0: 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b  har *azCol[] = {
99b0: 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22 20 7d   "seq", "name" }
99c0: 3b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  ;.    int i = 0;
99d0: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70  .    HashElem *p
99e0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
99f0: 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 65 74 41  em = 2;.    setA
9a00: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
9a10: 20 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65   2, azCol); asse
9a20: 72 74 28 20 32 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 2==ArraySize
9a30: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66  (azCol) );.    f
9a40: 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46  or(p=sqliteHashF
9a50: 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  irst(&db->aCollS
9a60: 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65  eq); p; p=sqlite
9a70: 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20  HashNext(p)){.  
9a80: 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f      CollSeq *pCo
9a90: 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29  ll = (CollSeq *)
9aa0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70  sqliteHashData(p
9ab0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9ac0: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
9ad0: 20 31 2c 20 22 69 73 22 2c 20 69 2b 2b 2c 20 70   1, "is", i++, p
9ae0: 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  Coll->zName);.  
9af0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9b00: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
9b10: 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20  ltRow, 1, 2);.  
9b20: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
9b30: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
9b40: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
9b50: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
9b60: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
9b70: 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65  REIGN_KEY.  case
9b80: 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e   PragTyp_FOREIGN
9b90: 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a  _KEY_LIST: if( z
9ba0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65  Right ){.    FKe
9bb0: 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c  y *pFK;.    Tabl
9bc0: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61  e *pTab;.    pTa
9bd0: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
9be0: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
9bf0: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
9c00: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  Tab ){.      v =
9c10: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
9c20: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70  pParse);.      p
9c30: 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79  FK = pTab->pFKey
9c40: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20  ;.      if( pFK 
9c50: 29 7b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69  ){.        stati
9c60: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
9c70: 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  Col[] = {.      
9c80: 20 20 20 20 20 22 69 64 22 2c 20 22 73 65 71 22       "id", "seq"
9c90: 2c 20 22 74 61 62 6c 65 22 2c 20 22 66 72 6f 6d  , "table", "from
9ca0: 22 2c 20 22 74 6f 22 2c 20 22 6f 6e 5f 75 70 64  ", "to", "on_upd
9cb0: 61 74 65 22 2c 20 22 6f 6e 5f 64 65 6c 65 74 65  ate", "on_delete
9cc0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 22 6d  ",.           "m
9cd0: 61 74 63 68 22 0a 20 20 20 20 20 20 20 20 7d 3b  atch".        };
9ce0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d  .        int i =
9cf0: 20 30 3b 20 0a 20 20 20 20 20 20 20 20 70 50 61   0; .        pPa
9d00: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20  rse->nMem = 8;. 
9d10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f         sqlite3Co
9d20: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
9d30: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
9d40: 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d       setAllColum
9d50: 6e 4e 61 6d 65 73 28 76 2c 20 38 2c 20 61 7a 43  nNames(v, 8, azC
9d60: 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 38 3d 3d  ol); assert( 8==
9d70: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
9d80: 20 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c   );.        whil
9d90: 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20  e(pFK){.        
9da0: 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20    int j;.       
9db0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46     for(j=0; j<pF
9dc0: 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  K->nCol; j++){. 
9dd0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
9de0: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9df0: 76 2c 20 31 2c 20 22 69 69 73 73 73 73 73 73 22  v, 1, "iissssss"
9e00: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
9e10: 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20       i,.        
9e20: 20 20 20 20 20 20 20 20 20 20 20 6a 2c 0a 20 20             j,.  
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e40: 20 70 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20   pFK->zTo,.     
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 54                pT
9e60: 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43  ab->aCol[pFK->aC
9e70: 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61  ol[j].iFrom].zNa
9e80: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
9e90: 20 20 20 20 20 20 20 70 46 4b 2d 3e 61 43 6f 6c         pFK->aCol
9ea0: 5b 6a 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20 20 20  [j].zCol,.      
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74               act
9ec0: 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63  ionName(pFK->aAc
9ed0: 74 69 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e  tion[1]),  /* ON
9ee0: 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 20 20 20   UPDATE */.     
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 63                ac
9f00: 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41  tionName(pFK->aA
9f10: 63 74 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f  ction[0]),  /* O
9f20: 4e 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20 20 20  N DELETE */.    
9f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
9f40: 4e 4f 4e 45 22 29 3b 0a 20 20 20 20 20 20 20 20  NONE");.        
9f50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9f60: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
9f70: 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20  ltRow, 1, 8);.  
9f80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9f90: 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20      ++i;.       
9fa0: 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e     pFK = pFK->pN
9fb0: 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20  extFrom;.       
9fc0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
9fd0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
9fe0: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
9ff0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
a000: 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69  EIGN_KEY) */..#i
a010: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a020: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69  T_FOREIGN_KEY.#i
a030: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a040: 54 5f 54 52 49 47 47 45 52 0a 20 20 63 61 73 65  T_TRIGGER.  case
a050: 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e   PragTyp_FOREIGN
a060: 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20  _KEY_CHECK: {.  
a070: 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20    FKey *pFK;    
a080: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f           /* A fo
a090: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
a0a0: 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c  aint */.    Tabl
a0b0: 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
a0c0: 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c     /* Child tabl
a0d0: 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52  e contain "REFER
a0e0: 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a  ENCES" keyword *
a0f0: 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61  /.    Table *pPa
a100: 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  rent;        /* 
a110: 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61  Parent table tha
a120: 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74  t child points t
a130: 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a  o */.    Index *
a140: 70 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 20  pIdx;           
a150: 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20  /* Index in the 
a160: 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a  parent table */.
a170: 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20      int i;      
a180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
a190: 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72  op counter:  For
a1a0: 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20  eign key number 
a1b0: 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20  for pTab */.    
a1c0: 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
a1d0: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
a1e0: 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f  ounter:  Field o
a1f0: 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  f the foreign ke
a200: 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65  y */.    HashEle
a210: 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20  m *k;           
a220: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a  /* Loop counter:
a230: 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20    Next table in 
a240: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e  schema */.    in
a250: 74 20 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  t x;            
a260: 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76       /* result v
a270: 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  ariable */.    i
a280: 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
a290: 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73        /* 3 regis
a2a0: 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72  ters to hold a r
a2b0: 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20  esult row */.   
a2c0: 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20   int regKey;    
a2d0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
a2e0: 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20  ter to hold key 
a2f0: 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65  for checking the
a300: 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72   FK */.    int r
a310: 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20  egRow;          
a320: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74    /* Registers t
a330: 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f  o hold a row fro
a340: 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e  m pTab */.    in
a350: 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20  t addrTop;      
a360: 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61       /* Top of a
a370: 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66   loop checking f
a380: 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20  oreign keys */. 
a390: 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20     int addrOk;  
a3a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
a3b0: 70 20 68 65 72 65 20 69 66 20 74 68 65 20 6b 65  p here if the ke
a3c0: 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69  y is OK */.    i
a3d0: 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20  nt *aiCols;     
a3e0: 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74        /* child t
a3f0: 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20  o parent column 
a400: 6d 61 70 70 69 6e 67 20 2a 2f 0a 20 20 20 20 73  mapping */.    s
a410: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
a420: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74   *azCol[] = { "t
a430: 61 62 6c 65 22 2c 20 22 72 6f 77 69 64 22 2c 20  able", "rowid", 
a440: 22 70 61 72 65 6e 74 22 2c 20 22 66 6b 69 64 22  "parent", "fkid"
a450: 20 7d 3b 0a 0a 20 20 20 20 72 65 67 52 65 73 75   };..    regResu
a460: 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65  lt = pParse->nMe
a470: 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  m+1;.    pParse-
a480: 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20  >nMem += 4;.    
a490: 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73  regKey = ++pPars
a4a0: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67  e->nMem;.    reg
a4b0: 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Row = ++pParse->
a4c0: 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71  nMem;.    v = sq
a4d0: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
a4e0: 72 73 65 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c  rse);.    setAll
a4f0: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34  ColumnNames(v, 4
a500: 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74  , azCol); assert
a510: 28 20 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61  ( 4==ArraySize(a
a520: 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 73 71 6c  zCol) );.    sql
a530: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
a540: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
a550: 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74  );.    k = sqlit
a560: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
a570: 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61  aDb[iDb].pSchema
a580: 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20  ->tblHash);.    
a590: 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20  while( k ){.    
a5a0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
a5b0: 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 73          pTab = s
a5c0: 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
a5d0: 65 28 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69  e(pParse, 0, zRi
a5e0: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  ght, zDb);.     
a5f0: 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20     k = 0;.      
a600: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
a610: 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71  Tab = (Table*)sq
a620: 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b  liteHashData(k);
a630: 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c  .        k = sql
a640: 69 74 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a  iteHashNext(k);.
a650: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
a660: 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61  ( pTab==0 || pTa
a670: 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f  b->pFKey==0 ) co
a680: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71  ntinue;.      sq
a690: 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70  lite3TableLock(p
a6a0: 50 61 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62  Parse, iDb, pTab
a6b0: 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d  ->tnum, 0, pTab-
a6c0: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69  >zName);.      i
a6d0: 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65  f( pTab->nCol+re
a6e0: 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65  gRow>pParse->nMe
a6f0: 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  m ) pParse->nMem
a700: 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20   = pTab->nCol + 
a710: 72 65 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71  regRow;.      sq
a720: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70  lite3OpenTable(p
a730: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70  Parse, 0, iDb, p
a740: 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  Tab, OP_OpenRead
a750: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
a760: 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76  VdbeLoadString(v
a770: 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 70 54 61  , regResult, pTa
a780: 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  b->zName);.     
a790: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
a7a0: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
a7b0: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
a7c0: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
a7d0: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
a7e0: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
a7f0: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
a800: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
a810: 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  rent==0 ) contin
a820: 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78  ue;.        pIdx
a830: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71   = 0;.        sq
a840: 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70  lite3TableLock(p
a850: 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72  Parse, iDb, pPar
a860: 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50  ent->tnum, 0, pP
a870: 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20  arent->zName);. 
a880: 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74         x = sqlit
a890: 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
a8a0: 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c  pParse, pParent,
a8b0: 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b   pFK, &pIdx, 0);
a8c0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d  .        if( x==
a8d0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  0 ){.          i
a8e0: 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20  f( pIdx==0 ){.  
a8f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a900: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
a910: 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65  e, i, iDb, pPare
a920: 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29  nt, OP_OpenRead)
a930: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
a940: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  e{.            s
a950: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
a960: 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c  (v, OP_OpenRead,
a970: 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20   i, pIdx->tnum, 
a980: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  iDb);.          
a990: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a9a0: 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72 73 65  P4KeyInfo(pParse
a9b0: 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20  , pIdx);.       
a9c0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
a9d0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20  se{.          k 
a9e0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62  = 0;.          b
a9f0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
aa00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
aa10: 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45  sert( pParse->nE
aa20: 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29  rr>0 || pFK==0 )
aa30: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20  ;.      if( pFK 
aa40: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69  ) break;.      i
aa50: 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c  f( pParse->nTab<
aa60: 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62  i ) pParse->nTab
aa70: 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72   = i;.      addr
aa80: 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Top = sqlite3Vdb
aa90: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65  eAddOp1(v, OP_Re
aaa0: 77 69 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f  wind, 0); VdbeCo
aab0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
aac0: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
aad0: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
aae0: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
aaf0: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
ab00: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
ab10: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
ab20: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
ab30: 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20  .        pIdx = 
ab40: 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c  0;.        aiCol
ab50: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  s = 0;.        i
ab60: 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20  f( pParent ){.  
ab70: 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69          x = sqli
ab80: 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
ab90: 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74  (pParse, pParent
aba0: 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61  , pFK, &pIdx, &a
abb0: 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20  iCols);.        
abc0: 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29    assert( x==0 )
abd0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
abe0: 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c      addrOk = sql
abf0: 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65  ite3VdbeMakeLabe
ac00: 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66  l(v);.        if
ac10: 28 20 70 50 61 72 65 6e 74 20 26 26 20 70 49 64  ( pParent && pId
ac20: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
ac30: 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b    int iKey = pFK
ac40: 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b  ->aCol[0].iFrom;
ac50: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
ac60: 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b  t( iKey>=0 && iK
ac70: 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b  ey<pTab->nCol );
ac80: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
ac90: 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79  Key!=pTab->iPKey
aca0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
acb0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
acc0: 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  3(v, OP_Column, 
acd0: 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29  0, iKey, regRow)
ace0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
acf0: 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
ad00: 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79  lt(v, pTab, iKey
ad10: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
ad20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ad30: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
ad40: 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61  sNull, regRow, a
ad50: 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65  ddrOk); VdbeCove
ad60: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
ad70: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
ad80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ad90: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f  eAddOp2(v, OP_Ro
ada0: 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b  wid, 0, regRow);
adb0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
adc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
add0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53  beAddOp3(v, OP_S
ade0: 65 65 6b 52 6f 77 69 64 2c 20 69 2c 20 30 2c 20  eekRowid, i, 0, 
adf0: 72 65 67 52 6f 77 29 3b 20 56 64 62 65 43 6f 76  regRow); VdbeCov
ae00: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
ae10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47      sqlite3VdbeG
ae20: 6f 74 6f 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a  oto(v, addrOk);.
ae30: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ae40: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
ae50: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
ae60: 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20  entAddr(v)-2);. 
ae70: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
ae80: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
ae90: 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b   j<pFK->nCol; j+
aea0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
aeb0: 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
aec0: 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
aed0: 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20  v, pTab, 0,.    
aee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aef0: 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f          aiCols ?
af00: 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b   aiCols[j] : pFK
af10: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c  ->aCol[j].iFrom,
af20: 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20   regRow+j);.    
af30: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
af40: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
af50: 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a  IsNull, regRow+j
af60: 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43  , addrOk); VdbeC
af70: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
af80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
af90: 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b    if( pParent ){
afa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
afb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
afc0: 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c  , OP_MakeRecord,
afd0: 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43   regRow, pFK->nC
afe0: 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20  ol, regKey,.    
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b000: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b010: 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
b020: 72 28 64 62 2c 70 49 64 78 29 2c 20 70 46 4b 2d  r(db,pIdx), pFK-
b030: 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20  >nCol);.        
b040: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b050: 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46  ddOp4Int(v, OP_F
b060: 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c  ound, i, addrOk,
b070: 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20   regKey, 0);.   
b080: 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76           VdbeCov
b090: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
b0a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
b0b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b0c0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b0d0: 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73  Rowid, 0, regRes
b0e0: 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20  ult+1);.        
b0f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
b100: 4c 6f 61 64 28 76 2c 20 72 65 67 52 65 73 75 6c  Load(v, regResul
b110: 74 2b 32 2c 20 22 73 69 22 2c 20 70 46 4b 2d 3e  t+2, "si", pFK->
b120: 7a 54 6f 2c 20 69 2d 31 29 3b 0a 20 20 20 20 20  zTo, i-1);.     
b130: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b140: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
b150: 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c  tRow, regResult,
b160: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   4);.        sql
b170: 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c  ite3VdbeResolveL
b180: 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b  abel(v, addrOk);
b190: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b1a0: 44 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c  DbFree(db, aiCol
b1b0: 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  s);.      }.    
b1c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b1d0: 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20  Op2(v, OP_Next, 
b1e0: 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 20 56  0, addrTop+1); V
b1f0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
b200: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b210: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
b220: 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rTop);.    }.  }
b230: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
b240: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
b250: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
b260: 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21  ) */.#endif /* !
b270: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
b280: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
b290: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45   */..#ifndef NDE
b2a0: 42 55 47 0a 20 20 63 61 73 65 20 50 72 61 67 54  BUG.  case PragT
b2b0: 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a  yp_PARSER_TRACE:
b2c0: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
b2d0: 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  t ){.      if( s
b2e0: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
b2f0: 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20  (zRight, 0) ){. 
b300: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
b310: 72 73 65 72 54 72 61 63 65 28 73 74 64 6f 75 74  rserTrace(stdout
b320: 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20  , "parser: ");. 
b330: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
b340: 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65      sqlite3Parse
b350: 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20  rTrace(0, 0);.  
b360: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
b370: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a    break;.#endif.
b380: 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20  .  /* Reinstall 
b390: 74 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f  the LIKE and GLO
b3a0: 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68  B functions.  Th
b3b0: 65 20 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b  e variant of LIK
b3c0: 45 0a 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c  E.  ** used will
b3d0: 20 62 65 20 63 61 73 65 20 73 65 6e 73 69 74 69   be case sensiti
b3e0: 76 65 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64  ve or not depend
b3f0: 69 6e 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a  ing on the RHS..
b400: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
b410: 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49  Typ_CASE_SENSITI
b420: 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69  VE_LIKE: {.    i
b430: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
b440: 20 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74     sqlite3Regist
b450: 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
b460: 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f  db, sqlite3GetBo
b470: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29  olean(zRight, 0)
b480: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
b490: 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  reak;..  /*.  **
b4a0: 20 20 20 50 52 41 47 4d 41 20 65 73 74 5f 72 6f     PRAGMA est_ro
b4b0: 77 5f 63 6e 74 28 3c 74 61 62 6c 65 2d 6f 72 2d  w_cnt(<table-or-
b4c0: 69 6e 64 65 78 3e 2c 3c 66 72 61 63 74 69 6f 6e  index>,<fraction
b4d0: 3e 29 3b 0a 20 20 2a 2a 0a 20 20 2a 2a 20 53 65  >);.  **.  ** Se
b4e0: 65 6b 20 69 6e 20 3c 74 61 62 6c 65 2d 6f 72 2d  ek in <table-or-
b4f0: 69 6e 64 65 78 3e 20 74 68 72 6f 75 67 68 20 74  index> through t
b500: 68 65 20 66 69 72 73 74 20 3c 66 72 61 63 74 69  he first <fracti
b510: 6f 6e 3e 20 6f 66 20 72 6f 77 73 20 61 6e 64 0a  on> of rows and.
b520: 20 20 2a 2a 20 65 73 74 69 6d 61 74 65 20 74 68    ** estimate th
b530: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
b540: 66 20 72 6f 77 73 20 62 61 73 65 64 20 6f 6e 20  f rows based on 
b550: 74 68 65 20 70 61 74 68 20 62 61 63 6b 20 75 70  the path back up
b560: 20 74 6f 20 74 68 65 0a 20 20 2a 2a 20 72 6f 6f   to the.  ** roo
b570: 74 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  t..  */.  case P
b580: 72 61 67 54 79 70 5f 45 53 54 5f 43 4f 55 4e 54  ragTyp_EST_COUNT
b590: 3a 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  : {.    Index *p
b5a0: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
b5b0: 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 50 67  pTab = 0;.    Pg
b5c0: 6e 6f 20 69 52 6f 6f 74 20 3d 20 30 3b 0a 20 20  no iRoot = 0;.  
b5d0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
b5e0: 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74  ame = 0;.    int
b5f0: 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 20 20   regResult;.    
b600: 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20 20 73 74  double r;.    st
b610: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
b620: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 65 73  *azCol[] = { "es
b630: 74 22 20 7d 3b 0a 20 20 20 20 69 66 28 20 28 70  t" };.    if( (p
b640: 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Idx = sqlite3Fin
b650: 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68  dIndex(db, zRigh
b660: 74 2c 20 7a 44 62 29 29 21 3d 30 20 29 7b 0a 20  t, zDb))!=0 ){. 
b670: 20 20 20 20 20 69 52 6f 6f 74 20 3d 20 70 49 64       iRoot = pId
b680: 78 2d 3e 74 6e 75 6d 3b 0a 20 20 20 20 20 20 7a  x->tnum;.      z
b690: 4e 61 6d 65 20 3d 20 70 49 64 78 2d 3e 7a 4e 61  Name = pIdx->zNa
b6a0: 6d 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  me;.    }else if
b6b0: 28 20 28 70 54 61 62 20 3d 20 73 71 6c 69 74 65  ( (pTab = sqlite
b6c0: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
b6d0: 52 69 67 68 74 2c 20 7a 44 62 29 29 21 3d 30 20  Right, zDb))!=0 
b6e0: 29 7b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  ){.      zName =
b6f0: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 3b 0a 20 20   pTab->zName;.  
b700: 20 20 20 20 69 66 28 20 48 61 73 52 6f 77 69 64      if( HasRowid
b710: 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20  (pTab) ){.      
b720: 20 20 69 52 6f 6f 74 20 3d 20 70 54 61 62 2d 3e    iRoot = pTab->
b730: 74 6e 75 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tnum;.      }els
b740: 65 7b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  e{.        pIdx 
b750: 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79  = sqlite3Primary
b760: 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a  KeyIndex(pTab);.
b770: 20 20 20 20 20 20 20 20 69 52 6f 6f 74 20 3d 20          iRoot = 
b780: 70 49 64 78 2d 3e 74 6e 75 6d 3b 0a 20 20 20 20  pIdx->tnum;.    
b790: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
b7a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b7b0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 54 61 62  }.    sqlite3Tab
b7c0: 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69  leLock(pParse, i
b7d0: 44 62 2c 20 69 52 6f 6f 74 2c 20 30 2c 20 7a 4e  Db, iRoot, 0, zN
b7e0: 61 6d 65 29 3b 0a 20 20 20 20 72 65 67 52 65 73  ame);.    regRes
b7f0: 75 6c 74 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  ult = ++pParse->
b800: 6e 4d 65 6d 3b 0a 20 20 20 20 73 65 74 41 6c 6c  nMem;.    setAll
b810: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 31  ColumnNames(v, 1
b820: 2c 20 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 69 66  , azCol);.    if
b830: 28 20 70 56 61 6c 75 65 73 2d 3e 6e 49 64 3e 3d  ( pValues->nId>=
b840: 32 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  2 ){.      const
b850: 20 63 68 61 72 20 2a 7a 20 3d 20 70 56 61 6c 75   char *z = pValu
b860: 65 73 2d 3e 61 5b 31 5d 2e 7a 4e 61 6d 65 3b 0a  es->a[1].zName;.
b870: 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 74 6f        sqlite3Ato
b880: 46 28 7a 2c 20 26 72 2c 20 73 71 6c 69 74 65 33  F(z, &r, sqlite3
b890: 53 74 72 6c 65 6e 33 30 28 7a 29 2c 20 53 51 4c  Strlen30(z), SQL
b8a0: 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 7d  ITE_UTF8);.    }
b8b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 20 3d 20  else{.      r = 
b8c0: 30 2e 35 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  0.5;.    }.    i
b8d0: 66 28 20 72 3c 30 2e 30 20 29 20 72 20 3d 20 30  f( r<0.0 ) r = 0
b8e0: 2e 30 3b 0a 20 20 20 20 69 66 28 20 72 3e 31 2e  .0;.    if( r>1.
b8f0: 30 20 29 20 72 20 3d 20 31 2e 30 3b 0a 20 20 20  0 ) r = 1.0;.   
b900: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
b910: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
b920: 20 69 44 62 29 3b 0a 20 20 20 20 70 50 61 72 73   iDb);.    pPars
b930: 65 2d 3e 6e 54 61 62 2b 2b 3b 0a 20 20 20 20 73  e->nTab++;.    s
b940: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
b950: 49 6e 74 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65  Int(v, OP_OpenRe
b960: 61 64 2c 20 30 2c 20 69 52 6f 6f 74 2c 20 69 44  ad, 0, iRoot, iD
b970: 62 2c 20 31 29 3b 0a 20 20 20 20 69 66 28 20 70  b, 1);.    if( p
b980: 49 64 78 20 29 20 73 71 6c 69 74 65 33 56 64 62  Idx ) sqlite3Vdb
b990: 65 53 65 74 50 34 4b 65 79 49 6e 66 6f 28 70 50  eSetP4KeyInfo(pP
b9a0: 61 72 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20  arse, pIdx);.   
b9b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b9c0: 70 33 28 76 2c 20 4f 50 5f 45 73 74 52 6f 77 43  p3(v, OP_EstRowC
b9d0: 6e 74 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  nt, 0, regResult
b9e0: 2c 20 28 69 6e 74 29 28 72 2a 31 30 30 30 30 30  , (int)(r*100000
b9f0: 30 30 30 30 29 29 3b 0a 20 20 20 20 73 71 6c 69  0000));.    sqli
ba00: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ba10: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72   OP_ResultRow, r
ba20: 65 67 52 65 73 75 6c 74 2c 20 31 29 3b 0a 20 20  egResult, 1);.  
ba30: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a  }.  break;..  /*
ba40: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62  .  **   PRAGMA b
ba50: 74 72 65 65 5f 73 61 6d 70 6c 65 28 3c 74 61 62  tree_sample(<tab
ba60: 6c 65 2d 6f 72 2d 69 6e 64 65 78 3e 2c 3c 66 72  le-or-index>,<fr
ba70: 61 63 74 69 6f 6e 3e 2c 3c 6c 69 6d 69 74 3e 29  action>,<limit>)
ba80: 3b 0a 20 20 2a 2a 0a 20 20 2a 2a 20 53 65 65 6b  ;.  **.  ** Seek
ba90: 20 69 6e 20 3c 74 61 62 6c 65 2d 6f 72 2d 69 6e   in <table-or-in
baa0: 64 65 78 3e 20 74 68 72 6f 75 67 68 20 74 68 65  dex> through the
bab0: 20 66 69 72 73 74 20 3c 66 72 61 63 74 69 6f 6e   first <fraction
bac0: 3e 20 6f 66 20 72 6f 77 73 20 61 6e 64 0a 20 20  > of rows and.  
bad0: 2a 2a 20 74 68 65 6e 20 62 65 67 69 6e 20 72 65  ** then begin re
bae0: 74 75 72 6e 69 6e 67 20 72 6f 77 73 2c 20 6f 6e  turning rows, on
baf0: 65 20 62 79 20 6f 6e 65 2e 20 20 41 20 6d 61 78  e by one.  A max
bb00: 20 6f 66 20 3c 6c 69 6d 69 74 3e 20 72 6f 77 73   of <limit> rows
bb10: 20 77 69 6c 6c 0a 20 20 2a 2a 20 62 65 20 72 65   will.  ** be re
bb20: 74 75 72 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63  turned..  */.  c
bb30: 61 73 65 20 50 72 61 67 54 79 70 5f 42 54 52 45  ase PragTyp_BTRE
bb40: 45 5f 53 41 4d 50 4c 45 3a 20 7b 0a 20 20 20 20  E_SAMPLE: {.    
bb50: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
bb60: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 30   Table *pTab = 0
bb70: 3b 0a 20 20 20 20 50 67 6e 6f 20 69 52 6f 6f 74  ;.    Pgno iRoot
bb80: 20 3d 20 30 3b 0a 20 20 20 20 50 67 6e 6f 20 69   = 0;.    Pgno i
bb90: 4c 6f 63 6b 20 3d 20 30 3b 0a 20 20 20 20 69 6e  Lock = 0;.    in
bba0: 74 20 6e 43 6f 6c 20 3d 20 30 3b 0a 20 20 20 20  t nCol = 0;.    
bbb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
bbc0: 65 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69  e = 0;.    int i
bbd0: 4c 69 6d 69 74 20 3d 20 31 30 3b 0a 20 20 20 20  Limit = 10;.    
bbe0: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 72  int i;.    int r
bbf0: 65 67 52 65 73 75 6c 74 3b 0a 20 20 20 20 69 6e  egResult;.    in
bc00: 74 20 72 65 67 4c 69 6d 69 74 3b 0a 20 20 20 20  t regLimit;.    
bc10: 69 6e 74 20 61 64 64 72 54 6f 70 3b 0a 20 20 20  int addrTop;.   
bc20: 20 69 6e 74 20 61 64 64 72 4a 6d 70 3b 0a 20 20   int addrJmp;.  
bc30: 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 3b 0a    int addrSkip;.
bc40: 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20      double r;.  
bc50: 20 20 69 66 28 20 28 70 49 64 78 20 3d 20 73 71    if( (pIdx = sq
bc60: 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64  lite3FindIndex(d
bc70: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 29  b, zRight, zDb))
bc80: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 52 6f  !=0 ){.      iRo
bc90: 6f 74 20 3d 20 70 49 64 78 2d 3e 74 6e 75 6d 3b  ot = pIdx->tnum;
bca0: 0a 20 20 20 20 20 20 69 4c 6f 63 6b 20 3d 20 70  .      iLock = p
bcb0: 49 64 78 2d 3e 70 54 61 62 6c 65 2d 3e 74 6e 75  Idx->pTable->tnu
bcc0: 6d 3b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  m;.      zName =
bcd0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 3b 0a 20 20   pIdx->zName;.  
bce0: 20 20 20 20 6e 43 6f 6c 20 3d 20 70 49 64 78 2d      nCol = pIdx-
bcf0: 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 7d 65  >nColumn;.    }e
bd00: 6c 73 65 20 69 66 28 20 28 70 54 61 62 20 3d 20  lse if( (pTab = 
bd10: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
bd20: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
bd30: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 7a  ))!=0 ){.      z
bd40: 4e 61 6d 65 20 3d 20 70 54 61 62 2d 3e 7a 4e 61  Name = pTab->zNa
bd50: 6d 65 3b 0a 20 20 20 20 20 20 69 66 28 20 48 61  me;.      if( Ha
bd60: 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a  sRowid(pTab) ){.
bd70: 20 20 20 20 20 20 20 20 69 4c 6f 63 6b 20 3d 20          iLock = 
bd80: 69 52 6f 6f 74 20 3d 20 70 54 61 62 2d 3e 74 6e  iRoot = pTab->tn
bd90: 75 6d 3b 0a 20 20 20 20 20 20 20 20 6e 43 6f 6c  um;.        nCol
bda0: 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 3b 0a 20   = pTab->nCol;. 
bdb0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
bdc0: 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74      pIdx = sqlit
bdd0: 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
bde0: 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 20  x(pTab);.       
bdf0: 20 69 4c 6f 63 6b 20 3d 20 69 52 6f 6f 74 20 3d   iLock = iRoot =
be00: 20 70 49 64 78 2d 3e 74 6e 75 6d 3b 0a 20 20 20   pIdx->tnum;.   
be10: 20 20 20 20 20 6e 43 6f 6c 20 3d 20 70 49 64 78       nCol = pIdx
be20: 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20  ->nColumn;.     
be30: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
be40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
be50: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
be60: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 6e 43  SetNumCols(v, nC
be70: 6f 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  ol);.    for(i=0
be80: 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a  ; i<nCol; i++){.
be90: 20 20 20 20 20 20 63 68 61 72 20 7a 43 6f 6c 5b        char zCol[
bea0: 33 30 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  30];.      sqlit
beb0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
bec0: 6f 66 28 7a 43 6f 6c 29 2c 7a 43 6f 6c 2c 22 63  of(zCol),zCol,"c
bed0: 25 30 36 64 22 2c 69 29 3b 0a 20 20 20 20 20 20  %06d",i);.      
bee0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
bef0: 6c 4e 61 6d 65 28 76 2c 20 69 2c 20 43 4f 4c 4e  lName(v, i, COLN
bf00: 41 4d 45 5f 4e 41 4d 45 2c 20 7a 43 6f 6c 2c 20  AME_NAME, zCol, 
bf10: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
bf20: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
bf30: 20 70 56 61 6c 75 65 73 2d 3e 6e 49 64 3e 3d 32   pValues->nId>=2
bf40: 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   ){.      const 
bf50: 63 68 61 72 20 2a 7a 20 3d 20 70 56 61 6c 75 65  char *z = pValue
bf60: 73 2d 3e 61 5b 31 5d 2e 7a 4e 61 6d 65 3b 0a 20  s->a[1].zName;. 
bf70: 20 20 20 20 20 73 71 6c 69 74 65 33 41 74 6f 46       sqlite3AtoF
bf80: 28 7a 2c 20 26 72 2c 20 73 71 6c 69 74 65 33 53  (z, &r, sqlite3S
bf90: 74 72 6c 65 6e 33 30 28 7a 29 2c 20 53 51 4c 49  trlen30(z), SQLI
bfa0: 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 7d 65  TE_UTF8);.    }e
bfb0: 6c 73 65 7b 0a 20 20 20 20 20 20 72 20 3d 20 30  lse{.      r = 0
bfc0: 2e 35 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  .5;.    }.    if
bfd0: 28 20 72 3c 30 2e 30 20 29 20 72 20 3d 20 30 2e  ( r<0.0 ) r = 0.
bfe0: 30 3b 0a 20 20 20 20 69 66 28 20 72 3e 31 2e 30  0;.    if( r>1.0
bff0: 20 29 20 72 20 3d 20 31 2e 30 3b 0a 20 20 20 20   ) r = 1.0;.    
c000: 69 66 28 20 70 56 61 6c 75 65 73 2d 3e 6e 49 64  if( pValues->nId
c010: 3e 3d 33 20 29 7b 0a 20 20 20 20 20 20 69 4c 69  >=3 ){.      iLi
c020: 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  mit = sqlite3Ato
c030: 69 28 70 56 61 6c 75 65 73 2d 3e 61 5b 32 5d 2e  i(pValues->a[2].
c040: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zName);.    }.  
c050: 20 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 2b 2b    pParse->nTab++
c060: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 54 61 62  ;.    sqlite3Tab
c070: 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69  leLock(pParse, i
c080: 44 62 2c 20 69 4c 6f 63 6b 2c 20 30 2c 20 7a 4e  Db, iLock, 0, zN
c090: 61 6d 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ame);.    sqlite
c0a0: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
c0b0: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
c0c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c0d0: 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 4f  ddOp4Int(v, OP_O
c0e0: 70 65 6e 52 65 61 64 2c 20 30 2c 20 69 52 6f 6f  penRead, 0, iRoo
c0f0: 74 2c 20 69 44 62 2c 20 6e 43 6f 6c 29 3b 0a 20  t, iDb, nCol);. 
c100: 20 20 20 69 66 28 20 70 49 64 78 20 29 20 73 71     if( pIdx ) sq
c110: 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65  lite3VdbeSetP4Ke
c120: 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49  yInfo(pParse, pI
c130: 64 78 29 3b 0a 20 20 20 20 72 65 67 4c 69 6d 69  dx);.    regLimi
c140: 74 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  t = ++pParse->nM
c150: 65 6d 3b 0a 20 20 20 20 72 65 67 52 65 73 75 6c  em;.    regResul
c160: 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  t = pParse->nMem
c170: 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  +1;.    pParse->
c180: 6e 4d 65 6d 20 2b 3d 20 6e 43 6f 6c 3b 0a 20 20  nMem += nCol;.  
c190: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c1a0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c1b0: 72 2c 20 69 4c 69 6d 69 74 2c 20 72 65 67 4c 69  r, iLimit, regLi
c1c0: 6d 69 74 29 3b 0a 20 20 20 20 61 64 64 72 53 6b  mit);.    addrSk
c1d0: 69 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ip = sqlite3Vdbe
c1e0: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77  AddOp1(v, OP_Rew
c1f0: 69 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76  ind, 0); VdbeCov
c200: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71  erage(v);.    sq
c210: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
c220: 76 2c 20 4f 50 5f 45 73 74 52 6f 77 43 6e 74 2c  v, OP_EstRowCnt,
c230: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 28   0, regResult, (
c240: 69 6e 74 29 28 72 2a 31 30 30 30 30 30 30 30 30  int)(r*100000000
c250: 30 29 29 3b 0a 20 20 20 20 61 64 64 72 54 6f 70  0));.    addrTop
c260: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
c270: 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20  rrentAddr(v);.  
c280: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f    for(i=0; i<nCo
c290: 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  l; i++){.      s
c2a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
c2b0: 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30  (v, OP_Column, 0
c2c0: 2c 20 69 2c 20 72 65 67 52 65 73 75 6c 74 2b 69  , i, regResult+i
c2d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
c2e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c2f0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
c300: 72 65 67 52 65 73 75 6c 74 2c 20 6e 43 6f 6c 29  regResult, nCol)
c310: 3b 0a 20 20 20 20 61 64 64 72 4a 6d 70 20 3d 20  ;.    addrJmp = 
c320: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c330: 31 28 76 2c 20 4f 50 5f 44 65 63 72 4a 75 6d 70  1(v, OP_DecrJump
c340: 5a 65 72 6f 2c 20 72 65 67 4c 69 6d 69 74 29 3b  Zero, regLimit);
c350: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
c360: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
c370: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65  eAddOp2(v, OP_Ne
c380: 78 74 2c 20 30 2c 20 61 64 64 72 54 6f 70 29 3b  xt, 0, addrTop);
c390: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
c3a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
c3b0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
c3c0: 72 4a 6d 70 29 3b 0a 20 20 20 20 73 71 6c 69 74  rJmp);.    sqlit
c3d0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
c3e0: 2c 20 61 64 64 72 53 6b 69 70 29 3b 0a 20 20 7d  , addrSkip);.  }
c3f0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64  .  break;..#ifnd
c400: 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52  ef SQLITE_INTEGR
c410: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
c420: 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAX.# define SQL
c430: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
c440: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30  ECK_ERROR_MAX 10
c450: 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  0.#endif..#ifnde
c460: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
c470: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20  TEGRITY_CHECK.  
c480: 2f 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b  /* Pragma "quick
c490: 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63  _check" is reduc
c4a0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20  ed version of . 
c4b0: 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68   ** integrity_ch
c4c0: 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20  eck designed to 
c4d0: 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61  detect most data
c4e0: 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a  base corruption.
c4f0: 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73    ** without mos
c500: 74 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61  t of the overhea
c510: 64 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65  d of a full inte
c520: 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a  grity-check..  *
c530: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
c540: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
c550: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a  : {.    int i, j
c560: 2c 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a  , addr, mxErr;..
c570: 20 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20      int isQuick 
c580: 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  = (sqlite3Tolowe
c590: 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27  r(zLeft[0])=='q'
c5a0: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
c5b0: 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
c5c0: 20 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d   was of the form
c5d0: 20 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e   "PRAGMA <db>.in
c5e0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
c5f0: 20 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20      ** then iDb 
c600: 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e  is set to the in
c610: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
c620: 61 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ase identified b
c630: 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49  y <db>..    ** I
c640: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
c650: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61   integrity of da
c660: 74 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20  tabase iDb only 
c670: 69 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20  is verified by. 
c680: 20 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63     ** the VDBE c
c690: 72 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20  reated below..  
c6a0: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65    **.    ** Othe
c6b0: 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f  rwise, if the co
c6c0: 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79  mmand was simply
c6d0: 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   "PRAGMA integri
c6e0: 74 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20  ty_check" (or.  
c6f0: 20 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69    ** "PRAGMA qui
c700: 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e  ck_check"), then
c710: 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30   iDb is set to 0
c720: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  . In this case, 
c730: 73 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74  set iDb.    ** t
c740: 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e  o -1 here, to in
c750: 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20  dicate that the 
c760: 56 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69  VDBE should veri
c770: 66 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  fy the integrity
c780: 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61  .    ** of all a
c790: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
c7a0: 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  s.  */.    asser
c7b0: 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  t( iDb>=0 );.   
c7c0: 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20   assert( iDb==0 
c7d0: 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20  || pId2->z );.  
c7e0: 20 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30    if( pId2->z==0
c7f0: 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20   ) iDb = -1;..  
c800: 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
c810: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
c820: 20 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e   */.    pParse->
c830: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 65  nMem = 6;.    se
c840: 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76  tOneColumnName(v
c850: 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65  , "integrity_che
c860: 63 6b 22 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65  ck");..    /* Se
c870: 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72  t the maximum er
c880: 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  ror count */.   
c890: 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f   mxErr = SQLITE_
c8a0: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
c8b0: 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69  ERROR_MAX;.    i
c8c0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
c8d0: 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74     sqlite3GetInt
c8e0: 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72  32(zRight, &mxEr
c8f0: 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78  r);.      if( mx
c900: 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20  Err<=0 ){.      
c910: 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
c920: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
c930: 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
c940: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
c950: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c960: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d  v, OP_Integer, m
c970: 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65  xErr, 1);  /* re
c980: 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72  g[1] holds error
c990: 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f  s left */..    /
c9a0: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
c9b0: 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20  y check on each 
c9c0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
c9d0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
c9e0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
c9f0: 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78       HashElem *x
ca00: 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70 54  ;.      Hash *pT
ca10: 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 2a  bls;.      int *
ca20: 61 52 6f 6f 74 3b 0a 20 20 20 20 20 20 69 6e 74  aRoot;.      int
ca30: 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
ca40: 69 6e 74 20 6d 78 49 64 78 20 3d 20 30 3b 0a 20  int mxIdx = 0;. 
ca50: 20 20 20 20 20 69 6e 74 20 6e 49 64 78 3b 0a 0a       int nIdx;..
ca60: 20 20 20 20 20 20 69 66 28 20 4f 4d 49 54 5f 54        if( OMIT_T
ca70: 45 4d 50 44 42 20 26 26 20 69 3d 3d 31 20 29 20  EMPDB && i==1 ) 
ca80: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
ca90: 69 66 28 20 69 44 62 3e 3d 30 20 26 26 20 69 21  if( iDb>=0 && i!
caa0: 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b  =iDb ) continue;
cab0: 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ..      sqlite3C
cac0: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
cad0: 70 50 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20  pParse, i);.    
cae0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
caf0: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
cb00: 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48  _IfPos, 1); /* H
cb10: 61 6c 74 20 69 66 20 6f 75 74 20 6f 66 20 65 72  alt if out of er
cb20: 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 56 64  rors */.      Vd
cb30: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
cb40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cb50: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
cb60: 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
cb70: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
cb80: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20  ere(v, addr);.. 
cb90: 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e       /* Do an in
cba0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66  tegrity check of
cbb0: 20 74 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20   the B-Tree.    
cbc0: 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65    **.      ** Be
cbd0: 67 69 6e 20 62 79 20 66 69 6e 64 69 6e 67 20 74  gin by finding t
cbe0: 68 65 20 72 6f 6f 74 20 70 61 67 65 73 20 6e 75  he root pages nu
cbf0: 6d 62 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 66  mbers.      ** f
cc00: 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e  or all tables an
cc10: 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65  d indices in the
cc20: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
cc30: 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
cc40: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
cc50: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 2c 20  utexHeld(db, i, 
cc60: 30 29 20 29 3b 0a 20 20 20 20 20 20 70 54 62 6c  0) );.      pTbl
cc70: 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e  s = &db->aDb[i].
cc80: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
cc90: 3b 0a 20 20 20 20 20 20 66 6f 72 28 63 6e 74 3d  ;.      for(cnt=
cca0: 30 2c 20 78 3d 73 71 6c 69 74 65 48 61 73 68 46  0, x=sqliteHashF
ccb0: 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20  irst(pTbls); x; 
ccc0: 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  x=sqliteHashNext
ccd0: 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61  (x)){.        Ta
cce0: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
ccf0: 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20  teHashData(x);. 
cd00: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
cd10: 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  dx;.        if( 
cd20: 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
cd30: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20   cnt++;.        
cd40: 66 6f 72 28 6e 49 64 78 3d 30 2c 20 70 49 64 78  for(nIdx=0, pIdx
cd50: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
cd60: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
cd70: 70 4e 65 78 74 2c 20 6e 49 64 78 2b 2b 29 7b 20  pNext, nIdx++){ 
cd80: 63 6e 74 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  cnt++; }.       
cd90: 20 69 66 28 20 6e 49 64 78 3e 6d 78 49 64 78 20   if( nIdx>mxIdx 
cda0: 29 20 6d 78 49 64 78 20 3d 20 6e 49 64 78 3b 0a  ) mxIdx = nIdx;.
cdb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 52        }.      aR
cdc0: 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  oot = sqlite3DbM
cdd0: 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73  allocRawNN(db, s
cde0: 69 7a 65 6f 66 28 69 6e 74 29 2a 28 63 6e 74 2b  izeof(int)*(cnt+
cdf0: 31 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61  1));.      if( a
ce00: 52 6f 6f 74 3d 3d 30 20 29 20 62 72 65 61 6b 3b  Root==0 ) break;
ce10: 0a 20 20 20 20 20 20 66 6f 72 28 63 6e 74 3d 30  .      for(cnt=0
ce20: 2c 20 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69  , x=sqliteHashFi
ce30: 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20 78  rst(pTbls); x; x
ce40: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
ce50: 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62  x)){.        Tab
ce60: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
ce70: 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20  eHashData(x);.  
ce80: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64        Index *pId
ce90: 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 48  x;.        if( H
cea0: 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 20  asRowid(pTab) ) 
ceb0: 61 52 6f 6f 74 5b 63 6e 74 2b 2b 5d 20 3d 20 70  aRoot[cnt++] = p
cec0: 54 61 62 2d 3e 74 6e 75 6d 3b 0a 20 20 20 20 20  Tab->tnum;.     
ced0: 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62     for(pIdx=pTab
cee0: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
cef0: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
cf00: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 52 6f  ){.          aRo
cf10: 6f 74 5b 63 6e 74 2b 2b 5d 20 3d 20 70 49 64 78  ot[cnt++] = pIdx
cf20: 2d 3e 74 6e 75 6d 3b 0a 20 20 20 20 20 20 20 20  ->tnum;.        
cf30: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
cf40: 61 52 6f 6f 74 5b 63 6e 74 5d 20 3d 20 30 3b 0a  aRoot[cnt] = 0;.
cf50: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
cf60: 75 72 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e  ure sufficient n
cf70: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
cf80: 72 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  rs have been all
cf90: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20  ocated */.      
cfa0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d  pParse->nMem = M
cfb0: 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  AX( pParse->nMem
cfc0: 2c 20 38 2b 6d 78 49 64 78 20 29 3b 0a 0a 20 20  , 8+mxIdx );..  
cfd0: 20 20 20 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d      /* Do the b-
cfe0: 74 72 65 65 20 69 6e 74 65 67 72 69 74 79 20 63  tree integrity c
cff0: 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73  hecks */.      s
d000: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
d010: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  (v, OP_Integrity
d020: 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 2c 20 28  Ck, 2, cnt, 1, (
d030: 63 68 61 72 2a 29 61 52 6f 6f 74 2c 50 34 5f 49  char*)aRoot,P4_I
d040: 4e 54 41 52 52 41 59 29 3b 0a 20 20 20 20 20 20  NTARRAY);.      
d050: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
d060: 65 50 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20  eP5(v, (u8)i);. 
d070: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
d080: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
d090: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20   OP_IsNull, 2); 
d0a0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d0b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
d0c0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d0d0: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
d0e0: 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  .         sqlite
d0f0: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a  3MPrintf(db, "**
d100: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 25 73  * in database %s
d110: 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62   ***\n", db->aDb
d120: 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65 29 2c 0a 20  [i].zDbSName),. 
d130: 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d          P4_DYNAM
d140: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
d150: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
d160: 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20 31  OP_Move, 2, 4, 1
d170: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d180: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
d190: 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32  _Concat, 4, 3, 2
d1a0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d1b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d1c0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31  _ResultRow, 2, 1
d1d0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d1e0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
d1f0: 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  addr);..      /*
d200: 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74   Make sure all t
d210: 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20 63  he indices are c
d220: 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72 65  onstructed corre
d230: 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ctly..      */. 
d240: 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
d250: 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
d260: 29 3b 20 78 20 26 26 20 21 69 73 51 75 69 63 6b  ); x && !isQuick
d270: 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; x=sqliteHashNe
d280: 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20  xt(x)){.        
d290: 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
d2a0: 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b  liteHashData(x);
d2b0: 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
d2c0: 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20 20  pIdx, *pPk;.    
d2d0: 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72 69 6f      Index *pPrio
d2e0: 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  r = 0;.        i
d2f0: 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20 20  nt loopTop;.    
d300: 20 20 20 20 69 6e 74 20 69 44 61 74 61 43 75 72      int iDataCur
d310: 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20 20 20  , iIdxCur;.     
d320: 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b 0a     int r1 = -1;.
d330: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61  .        if( pTa
d340: 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63  b->pIndex==0 ) c
d350: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
d360: 20 70 50 6b 20 3d 20 48 61 73 52 6f 77 69 64 28   pPk = HasRowid(
d370: 70 54 61 62 29 20 3f 20 30 20 3a 20 73 71 6c 69  pTab) ? 0 : sqli
d380: 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
d390: 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20  ex(pTab);.      
d3a0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
d3b0: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
d3c0: 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20  _IfPos, 1);  /* 
d3d0: 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20 65  Stop if out of e
d3e0: 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 20  rrors */.       
d3f0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d400: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d410: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d420: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
d430: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d440: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
d450: 64 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  dr);.        sql
d460: 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
d470: 61 72 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ar(pParse);.    
d480: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
d490: 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70  ableAndIndices(p
d4a0: 50 61 72 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f  Parse, pTab, OP_
d4b0: 4f 70 65 6e 52 65 61 64 2c 20 30 2c 0a 20 20 20  OpenRead, 0,.   
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4e0: 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75 72 2c  1, 0, &iDataCur,
d4f0: 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20 20 20   &iIdxCur);.    
d500: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d510: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
d520: 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20  ger, 0, 7);.    
d530: 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
d540: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
d550: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
d560: 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
d570: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d580: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d590: 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29  Integer, 0, 8+j)
d5a0: 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69  ; /* index entri
d5b0: 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  es counter */.  
d5c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
d5d0: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
d5e0: 6e 4d 65 6d 3e 3d 38 2b 6a 20 29 3b 0a 20 20 20  nMem>=8+j );.   
d5f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
d600: 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e  ite3NoTempsInRan
d610: 67 65 28 70 50 61 72 73 65 2c 31 2c 37 2b 6a 29  ge(pParse,1,7+j)
d620: 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
d630: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d640: 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69 44 61 74   OP_Rewind, iDat
d650: 61 43 75 72 2c 20 30 29 3b 20 56 64 62 65 43 6f  aCur, 0); VdbeCo
d660: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d670: 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c     loopTop = sql
d680: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d690: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20  , OP_AddImm, 7, 
d6a0: 31 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56  1);.        /* V
d6b0: 65 72 69 66 79 20 74 68 61 74 20 61 6c 6c 20 4e  erify that all N
d6c0: 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20  OT NULL columns 
d6d0: 72 65 61 6c 6c 79 20 61 72 65 20 4e 4f 54 20 4e  really are NOT N
d6e0: 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  ULL */.        f
d6f0: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e  or(j=0; j<pTab->
d700: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
d710: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72        char *zErr
d720: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
d730: 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20  jmp2, jmp3;.    
d740: 20 20 20 20 20 20 69 66 28 20 6a 3d 3d 70 54 61        if( j==pTa
d750: 62 2d 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74 69  b->iPKey ) conti
d760: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nue;.          i
d770: 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d  f( pTab->aCol[j]
d780: 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f  .notNull==0 ) co
d790: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
d7a0: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
d7b0: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
d7c0: 65 28 76 2c 20 70 54 61 62 2c 20 69 44 61 74 61  e(v, pTab, iData
d7d0: 43 75 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20  Cur, j, 3);.    
d7e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d7f0: 65 43 68 61 6e 67 65 50 35 28 76 2c 20 4f 50 46  eChangeP5(v, OPF
d800: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a  LAG_TYPEOFARG);.
d810: 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d            jmp2 =
d820: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d830: 70 31 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c  p1(v, OP_NotNull
d840: 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 3); VdbeCovera
d850: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
d860: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d870: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
d880: 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72   1, -1); /* Decr
d890: 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69  ement error limi
d8a0: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a  t */.          z
d8b0: 45 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Err = sqlite3MPr
d8c0: 69 6e 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76  intf(db, "NULL v
d8d0: 61 6c 75 65 20 69 6e 20 25 73 2e 25 73 22 2c 20  alue in %s.%s", 
d8e0: 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d900: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
d910: 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b  >aCol[j].zName);
d920: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d930: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
d940: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
d950: 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59  , 0, zErr, P4_DY
d960: 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20  NAMIC);.        
d970: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d980: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
d990: 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20  Row, 3, 1);.    
d9a0: 20 20 20 20 20 20 6a 6d 70 33 20 3d 20 73 71 6c        jmp3 = sql
d9b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
d9c0: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
d9d0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d9e0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d9f0: 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20  e3VdbeAddOp0(v, 
da00: 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20  OP_Halt);.      
da10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
da20: 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29  umpHere(v, jmp2)
da30: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
da40: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
da50: 76 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20  v, jmp3);.      
da60: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 56    }.        /* V
da70: 61 6c 69 64 61 74 65 20 69 6e 64 65 78 20 65 6e  alidate index en
da80: 74 72 69 65 73 20 66 6f 72 20 74 68 65 20 63 75  tries for the cu
da90: 72 72 65 6e 74 20 72 6f 77 20 2a 2f 0a 20 20 20  rrent row */.   
daa0: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
dab0: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
dac0: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
dad0: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
dae0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
daf0: 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a  2, jmp3, jmp4, j
db00: 6d 70 35 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mp5;.          i
db10: 6e 74 20 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69  nt ckUniq = sqli
db20: 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
db30: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  (v);.          i
db40: 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63  f( pPk==pIdx ) c
db50: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
db60: 20 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47     r1 = sqlite3G
db70: 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
db80: 70 50 61 72 73 65 2c 20 70 49 64 78 2c 20 69 44  pParse, pIdx, iD
db90: 61 74 61 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a  ataCur, 0, 0, &j
dba0: 6d 70 33 2c 0a 20 20 20 20 20 20 20 20 20 20 20  mp3,.           
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 50 72 69              pPri
dbd0: 6f 72 2c 20 72 31 29 3b 0a 20 20 20 20 20 20 20  or, r1);.       
dbe0: 20 20 20 70 50 72 69 6f 72 20 3d 20 70 49 64 78     pPrior = pIdx
dbf0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
dc00: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
dc10: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c   OP_AddImm, 8+j,
dc20: 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65   1);  /* increme
dc30: 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a  nt entry count *
dc40: 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  /.          /* V
dc50: 65 72 69 66 79 20 74 68 61 74 20 61 6e 20 69 6e  erify that an in
dc60: 64 65 78 20 65 6e 74 72 79 20 65 78 69 73 74 73  dex entry exists
dc70: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
dc80: 20 74 61 62 6c 65 20 72 6f 77 20 2a 2f 0a 20 20   table row */.  
dc90: 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
dca0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
dcb0: 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c  Int(v, OP_Found,
dcc0: 20 69 49 64 78 43 75 72 2b 6a 2c 20 63 6b 55 6e   iIdxCur+j, ckUn
dcd0: 69 71 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20  iq, r1,.        
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49                pI
dd00: 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64  dx->nColumn); Vd
dd10: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
dd20: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
dd30: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
dd40: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
dd50: 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72   /* Decrement er
dd60: 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20  ror limit */.   
dd70: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
dd80: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
dd90: 33 2c 20 22 72 6f 77 20 22 29 3b 0a 20 20 20 20  3, "row ");.    
dda0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ddb0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
ddc0: 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a  ncat, 7, 3, 3);.
ddd0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
dde0: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
ddf0: 76 2c 20 34 2c 20 22 20 6d 69 73 73 69 6e 67 20  v, 4, " missing 
de00: 66 72 6f 6d 20 69 6e 64 65 78 20 22 29 3b 0a 20  from index ");. 
de10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
de20: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
de30: 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33  _Concat, 4, 3, 3
de40: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
de50: 35 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4c  5 = sqlite3VdbeL
de60: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 34 2c 20  oadString(v, 4, 
de70: 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  pIdx->zName);.  
de80: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
de90: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
dea0: 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29  Concat, 4, 3, 3)
deb0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
dec0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ded0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33   OP_ResultRow, 3
dee0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
def0: 6a 6d 70 34 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp4 = sqlite3Vd
df00: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
df10: 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f  fPos, 1); VdbeCo
df20: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
df30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
df40: 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c  AddOp0(v, OP_Hal
df50: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
df60: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
df70: 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20  e(v, jmp2);.    
df80: 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 55 4e 49        /* For UNI
df90: 51 55 45 20 69 6e 64 65 78 65 73 2c 20 76 65 72  QUE indexes, ver
dfa0: 69 66 79 20 74 68 61 74 20 6f 6e 6c 79 20 6f 6e  ify that only on
dfb0: 65 20 65 6e 74 72 79 20 65 78 69 73 74 73 20 77  e entry exists w
dfc0: 69 74 68 20 74 68 65 0a 20 20 20 20 20 20 20 20  ith the.        
dfd0: 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6b 65 79    ** current key
dfe0: 2e 20 20 54 68 65 20 65 6e 74 72 79 20 69 73 20  .  The entry is 
dff0: 75 6e 69 71 75 65 20 69 66 20 28 31 29 20 61 6e  unique if (1) an
e000: 79 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  y column is NULL
e010: 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 72  .          ** or
e020: 20 28 32 29 20 74 68 65 20 6e 65 78 74 20 65 6e   (2) the next en
e030: 74 72 79 20 68 61 73 20 61 20 64 69 66 66 65 72  try has a differ
e040: 65 6e 74 20 6b 65 79 20 2a 2f 0a 20 20 20 20 20  ent key */.     
e050: 20 20 20 20 20 69 66 28 20 49 73 55 6e 69 71 75       if( IsUniqu
e060: 65 49 6e 64 65 78 28 70 49 64 78 29 20 29 7b 0a  eIndex(pIdx) ){.
e070: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
e080: 75 6e 69 71 4f 6b 20 3d 20 73 71 6c 69 74 65 33  uniqOk = sqlite3
e090: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
e0a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ;.            in
e0b0: 74 20 6a 6d 70 36 3b 0a 20 20 20 20 20 20 20 20  t jmp6;.        
e0c0: 20 20 20 20 69 6e 74 20 6b 6b 3b 0a 20 20 20 20      int kk;.    
e0d0: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 6b 3d 30          for(kk=0
e0e0: 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79 43  ; kk<pIdx->nKeyC
e0f0: 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20 20  ol; kk++){.     
e100: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f           int iCo
e110: 6c 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75  l = pIdx->aiColu
e120: 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20 20 20 20 20  mn[kk];.        
e130: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69 43        assert( iC
e140: 6f 6c 21 3d 58 4e 5f 52 4f 57 49 44 20 26 26 20  ol!=XN_ROWID && 
e150: 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iCol<pTab->nCol 
e160: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
e170: 20 69 66 28 20 69 43 6f 6c 3e 3d 30 20 26 26 20   if( iCol>=0 && 
e180: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d  pTab->aCol[iCol]
e190: 2e 6e 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e 74 69  .notNull ) conti
e1a0: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  nue;.           
e1b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e1c0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
e1d0: 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b  l, r1+kk, uniqOk
e1e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
e1f0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
e200: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
e210: 20 20 20 20 20 20 20 20 20 20 20 20 6a 6d 70 36              jmp6
e220: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
e230: 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 65 78 74 2c  dOp1(v, OP_Next,
e240: 20 69 49 64 78 43 75 72 2b 6a 29 3b 20 56 64 62   iIdxCur+j); Vdb
e250: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
e260: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e270: 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 75 6e 69  3VdbeGoto(v, uni
e280: 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  qOk);.          
e290: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
e2a0: 70 48 65 72 65 28 76 2c 20 6a 6d 70 36 29 3b 0a  pHere(v, jmp6);.
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e2c0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
e2d0: 28 76 2c 20 4f 50 5f 49 64 78 47 54 2c 20 69 49  (v, OP_IdxGT, iI
e2e0: 64 78 43 75 72 2b 6a 2c 20 75 6e 69 71 4f 6b 2c  dxCur+j, uniqOk,
e2f0: 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   r1,.           
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e310: 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 4b 65 79        pIdx->nKey
e320: 43 6f 6c 29 3b 20 56 64 62 65 43 6f 76 65 72 61  Col); VdbeCovera
e330: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
e340: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e350: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
e360: 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65  m, 1, -1); /* De
e370: 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69  crement error li
e380: 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  mit */.         
e390: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
e3a0: 61 64 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 22  adString(v, 3, "
e3b0: 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79  non-unique entry
e3c0: 20 69 6e 20 69 6e 64 65 78 20 22 29 3b 0a 20 20   in index ");.  
e3d0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e3e0: 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 6a 6d 70  3VdbeGoto(v, jmp
e3f0: 35 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  5);.            
e400: 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c  sqlite3VdbeResol
e410: 76 65 4c 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f  veLabel(v, uniqO
e420: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  k);.          }.
e430: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e440: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
e450: 20 6a 6d 70 34 29 3b 0a 20 20 20 20 20 20 20 20   jmp4);.        
e460: 20 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65    sqlite3Resolve
e470: 50 61 72 74 49 64 78 4c 61 62 65 6c 28 70 50 61  PartIdxLabel(pPa
e480: 72 73 65 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20  rse, jmp3);.    
e490: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
e4a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
e4b0: 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74  v, OP_Next, iDat
e4c0: 61 43 75 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20  aCur, loopTop); 
e4d0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
e4e0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
e4f0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
e500: 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e  loopTop-1);.#ifn
e510: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
e520: 42 54 52 45 45 43 4f 55 4e 54 0a 20 20 20 20 20  BTREECOUNT.     
e530: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
e540: 61 64 53 74 72 69 6e 67 28 76 2c 20 32 2c 20 22  adString(v, 2, "
e550: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
e560: 65 73 20 69 6e 20 69 6e 64 65 78 20 22 29 3b 0a  es in index ");.
e570: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
e580: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
e590: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
e5a0: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
e5b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
e5c0: 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74  pPk==pIdx ) cont
e5d0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
e5e0: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
e5f0: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
e600: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e610: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e620: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64   OP_IfPos, 1, ad
e630: 64 72 2b 32 29 3b 20 56 64 62 65 43 6f 76 65 72  dr+2); VdbeCover
e640: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
e650: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e660: 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20  Op2(v, OP_Halt, 
e670: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  0, 0);.         
e680: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e690: 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20  p2(v, OP_Count, 
e6a0: 69 49 64 78 43 75 72 2b 6a 2c 20 33 29 3b 0a 20  iIdxCur+j, 3);. 
e6b0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e6c0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
e6d0: 5f 45 71 2c 20 38 2b 6a 2c 20 61 64 64 72 2b 38  _Eq, 8+j, addr+8
e6e0: 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 3); VdbeCovera
e6f0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
e700: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
e710: 67 65 50 35 28 76 2c 20 53 51 4c 49 54 45 5f 4e  geP5(v, SQLITE_N
e720: 4f 54 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20  OTNULL);.       
e730: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e740: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
e750: 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20  m, 1, -1);.     
e760: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e770: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 33 2c  LoadString(v, 3,
e780: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a 20   pIdx->zName);. 
e790: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e7a0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
e7b0: 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37  _Concat, 3, 2, 7
e7c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
e7d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
e7e0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
e7f0: 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d  7, 1);.        }
e800: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
e810: 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
e820: 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20  T */.      } .  
e830: 20 20 7d 0a 20 20 20 20 7b 0a 20 20 20 20 20 20    }.    {.      
e840: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
e850: 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53   iLn = VDBE_OFFS
e860: 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20  ET_LINENO(2);.  
e870: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
e880: 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43   VdbeOpList endC
e890: 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ode[] = {.      
e8a0: 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20    { OP_AddImm,  
e8b0: 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20      1, 0,       
e8c0: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
e8d0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
e8e0: 20 20 20 20 20 20 20 20 20 20 31 2c 20 34 2c 20            1, 4, 
e8f0: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
e900: 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   1 */.        { 
e910: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20  OP_String8,     
e920: 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 3,        0},
e930: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
e940: 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52      { OP_ResultR
e950: 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20 20  ow,   3, 1,     
e960: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a     0},    /* 3 *
e970: 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  /.      };.     
e980: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 0a 20   VdbeOp *aOp;.. 
e990: 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74       aOp = sqlit
e9a0: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
e9b0: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64  v, ArraySize(end
e9c0: 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64 65 2c 20  Code), endCode, 
e9d0: 69 4c 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20  iLn);.      if( 
e9e0: 61 4f 70 20 29 7b 0a 20 20 20 20 20 20 20 20 61  aOp ){.        a
e9f0: 4f 70 5b 30 5d 2e 70 32 20 3d 20 2d 6d 78 45 72  Op[0].p2 = -mxEr
ea00: 72 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32  r;.        aOp[2
ea10: 5d 2e 70 34 74 79 70 65 20 3d 20 50 34 5f 53 54  ].p4type = P4_ST
ea20: 41 54 49 43 3b 0a 20 20 20 20 20 20 20 20 61 4f  ATIC;.        aO
ea30: 70 5b 32 5d 2e 70 34 2e 7a 20 3d 20 22 6f 6b 22  p[2].p4.z = "ok"
ea40: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
ea50: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
ea60: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
ea70: 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
ea80: 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  CK */..#ifndef S
ea90: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
eaa0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
eab0: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a  GMA encoding.  *
eac0: 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64  *   PRAGMA encod
ead0: 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75  ing = "utf-8"|"u
eae0: 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65  tf-16"|"utf-16le
eaf0: 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a  "|"utf-16be".  *
eb00: 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69  *.  ** In its fi
eb10: 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70  rst form, this p
eb20: 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68  ragma returns th
eb30: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68  e encoding of th
eb40: 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61  e main.  ** data
eb50: 62 61 73 65 2e 20 49 66 20 74 68 65 20 64 61 74  base. If the dat
eb60: 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69  abase is not ini
eb70: 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20  tialized, it is 
eb80: 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e  initialized now.
eb90: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
eba0: 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
ebb0: 69 73 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e  is pragma is a n
ebc0: 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e  o-op if the main
ebd0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
ebe0: 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65   ** has not alre
ebf0: 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ady been initial
ec00: 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ized. In this ca
ec10: 73 65 20 69 74 20 73 65 74 73 20 74 68 65 20 64  se it sets the d
ec20: 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f  efault.  ** enco
ec30: 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62  ding that will b
ec40: 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d  e used for the m
ec50: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
ec60: 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a  e if a new file.
ec70: 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e    ** is created.
ec80: 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   If an existing 
ec90: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
eca0: 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68  le is opened, th
ecb0: 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61  en the.  ** defa
ecc0: 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ult text encodin
ecd0: 67 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69  g for the existi
ece0: 6e 67 20 64 61 74 61 62 61 73 65 20 69 73 20 75  ng database is u
ecf0: 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  sed..  ** .  ** 
ed00: 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77  In all cases new
ed10: 20 64 61 74 61 62 61 73 65 73 20 63 72 65 61 74   databases creat
ed20: 65 64 20 75 73 69 6e 67 20 74 68 65 20 41 54 54  ed using the ATT
ed30: 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a  ACH command are.
ed40: 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20    ** created to 
ed50: 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 65 66  use the same def
ed60: 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69  ault text encodi
ed70: 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64  ng as the main d
ed80: 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a  atabase. If.  **
ed90: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
eda0: 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  se has not been 
edb0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f  initialized and/
edc0: 6f 72 20 63 72 65 61 74 65 64 20 77 68 65 6e 20  or created when 
edd0: 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65  ATTACH.  ** is e
ede0: 78 65 63 75 74 65 64 2c 20 74 68 69 73 20 69 73  xecuted, this is
edf0: 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65   done before the
ee00: 20 41 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f   ATTACH operatio
ee10: 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  n..  **.  ** In 
ee20: 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  the second form 
ee30: 74 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73  this pragma sets
ee40: 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69   the text encodi
ee50: 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e  ng to be used in
ee60: 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61  .  ** new databa
ee70: 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  se files created
ee80: 20 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61   using this data
ee90: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20  base handle. It 
eea0: 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65  is only.  ** use
eeb0: 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69  ful if invoked i
eec0: 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
eed0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
eee0: 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65  se i.  */.  case
eef0: 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e   PragTyp_ENCODIN
ef00: 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  G: {.    static 
ef10: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63  const struct Enc
ef20: 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61  Name {.      cha
ef30: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20  r *zName;.      
ef40: 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e  u8 enc;.    } en
ef50: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20  cnames[] = {.   
ef60: 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20     { "UTF8",    
ef70: 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20   SQLITE_UTF8    
ef80: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
ef90: 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54  UTF-8",    SQLIT
efa0: 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
efb0: 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
efc0: 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20  ment [1] */.    
efd0: 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20    { "UTF-16le", 
efe0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20  SQLITE_UTF16LE  
eff0: 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
f000: 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f  e element [2] */
f010: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
f020: 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  be", SQLITE_UTF1
f030: 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6BE     },  /* M
f040: 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
f050: 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  3] */.      { "U
f060: 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45  TF16le",  SQLITE
f070: 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a  _UTF16LE     },.
f080: 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62 65        { "UTF16be
f090: 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
f0a0: 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  BE     },.      
f0b0: 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20  { "UTF-16",   0 
f0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0d0: 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54   }, /* SQLITE_UT
f0e0: 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20  F16NATIVE */.   
f0f0: 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20     { "UTF16",   
f100: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
f110: 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45      }, /* SQLITE
f120: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a  _UTF16NATIVE */.
f130: 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20        { 0, 0 }. 
f140: 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20     };.    const 
f150: 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a  struct EncName *
f160: 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a  pEnc;.    if( !z
f170: 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22  Right ){    /* "
f180: 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22  PRAGMA encoding"
f190: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71   */.      if( sq
f1a0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
f1b0: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
f1c0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
f1d0: 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
f1e0: 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65  s[SQLITE_UTF8].e
f1f0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
f200: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
f210: 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
f220: 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53  _UTF16LE].enc==S
f230: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b  QLITE_UTF16LE );
f240: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
f250: 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
f260: 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c  TF16BE].enc==SQL
f270: 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20  ITE_UTF16BE );. 
f280: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
f290: 65 54 65 78 74 28 76 2c 20 22 65 6e 63 6f 64 69  eText(v, "encodi
f2a0: 6e 67 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e  ng", encnames[EN
f2b0: 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a  C(pParse->db)].z
f2c0: 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Name);.    }else
f2d0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
f2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50 52 41           /* "PRA
f2f0: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58  GMA encoding = X
f300: 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  XX" */.      /* 
f310: 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20  Only change the 
f320: 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 2e  value of sqlite.
f330: 65 6e 63 20 69 66 20 74 68 65 20 64 61 74 61 62  enc if the datab
f340: 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f  ase handle is no
f350: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69 74 69  t.      ** initi
f360: 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65 20 6d  alized. If the m
f370: 61 69 6e 20 64 61 74 61 62 61 73 65 20 65 78 69  ain database exi
f380: 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73 71 6c  sts, the new sql
f390: 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20  ite.enc value.  
f3a0: 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f      ** will be o
f3b0: 76 65 72 77 72 69 74 74 65 6e 20 77 68 65 6e 20  verwritten when 
f3c0: 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 65  the schema is ne
f3d0: 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20 69 74  xt loaded. If it
f3e0: 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20   does not.      
f3f0: 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  ** already exist
f400: 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 63 72  s, it will be cr
f410: 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65  eated to use the
f420: 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20 76 61   new encoding va
f430: 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  lue..      */.  
f440: 20 20 20 20 69 66 28 20 0a 20 20 20 20 20 20 20      if( .       
f450: 20 21 28 44 62 48 61 73 50 72 6f 70 65 72 74 79   !(DbHasProperty
f460: 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d  (db, 0, DB_Schem
f470: 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20 20  aLoaded)) || .  
f480: 20 20 20 20 20 20 44 62 48 61 73 50 72 6f 70 65        DbHasPrope
f490: 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d  rty(db, 0, DB_Em
f4a0: 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b 0a 20  pty) .      ){. 
f4b0: 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d         for(pEnc=
f4c0: 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45  &encnames[0]; pE
f4d0: 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b  nc->zName; pEnc+
f4e0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
f4f0: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
f500: 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45 6e 63  Cmp(zRight, pEnc
f510: 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20  ->zName) ){.    
f520: 20 20 20 20 20 20 20 20 53 43 48 45 4d 41 5f 45          SCHEMA_E
f530: 4e 43 28 64 62 29 20 3d 20 45 4e 43 28 64 62 29  NC(db) = ENC(db)
f540: 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   =.             
f550: 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70     pEnc->enc ? p
f560: 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54  Enc->enc : SQLIT
f570: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20  E_UTF16NATIVE;. 
f580: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
f590: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
f5a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
f5b0: 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65  if( !pEnc->zName
f5c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
f5d0: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
f5e0: 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74  arse, "unsupport
f5f0: 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22  ed encoding: %s"
f600: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  , zRight);.     
f610: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
f620: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
f630: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
f640: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
f650: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f660: 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
f670: 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a  ON_PRAGMAS.  /*.
f680: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
f690: 63 68 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76 65  chema.]schema_ve
f6a0: 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
f6b0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68  GMA [schema.]sch
f6c0: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69  ema_version = <i
f6d0: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
f6e0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
f6f0: 6d 61 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e  ma.]user_version
f700: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
f710: 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65 72  schema.]user_ver
f720: 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e  sion = <integer>
f730: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
f740: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 66 72 65  GMA [schema.]fre
f750: 65 6c 69 73 74 5f 63 6f 75 6e 74 0a 20 20 2a 2a  elist_count.  **
f760: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
f770: 73 63 68 65 6d 61 2e 5d 64 61 74 61 5f 76 65 72  schema.]data_ver
f780: 73 69 6f 6e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  sion.  **.  **  
f790: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
f7a0: 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a  ]application_id.
f7b0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
f7c0: 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69  chema.]applicati
f7d0: 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72  on_id = <integer
f7e0: 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  >.  **.  ** The 
f7f0: 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f  pragma's schema_
f800: 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72  version and user
f810: 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65  _version are use
f820: 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a  d to set or get.
f830: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
f840: 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  f the schema-ver
f850: 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65  sion and user-ve
f860: 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  rsion, respectiv
f870: 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74  ely. Both.  ** t
f880: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
f890: 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76  n and the user-v
f8a0: 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69  ersion are 32-bi
f8b0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
f8c0: 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  s.  ** stored in
f8d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
f8e0: 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ader..  **.  ** 
f8f0: 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  The schema-cooki
f900: 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c  e is usually onl
f910: 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e  y manipulated in
f920: 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69  ternally by SQLi
f930: 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69  te. It.  ** is i
f940: 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51  ncremented by SQ
f950: 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20 74 68  Lite whenever th
f960: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
f970: 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62  a is modified (b
f980: 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20  y.  ** creating 
f990: 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61  or dropping a ta
f9a0: 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54  ble or index). T
f9b0: 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
f9c0: 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a  n is used by.  *
f9d0: 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20 74 69  * SQLite each ti
f9e0: 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78  me a query is ex
f9f0: 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65  ecuted to ensure
fa00: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e   that the intern
fa10: 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66  al cache.  ** of
fa20: 20 74 68 65 20 73 63 68 65 6d 61 20 75 73 65 64   the schema used
fa30: 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20   when compiling 
fa40: 74 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61  the SQL query ma
fa50: 74 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61  tches the schema
fa60: 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74   of.  ** the dat
fa70: 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68  abase against wh
fa80: 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64  ich the compiled
fa90: 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c   query is actual
faa0: 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a  ly executed..  *
fab0: 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74 68 69  * Subverting thi
fac0: 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75  s mechanism by u
fad0: 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68  sing "PRAGMA sch
fae0: 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20  ema_version" to 
faf0: 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20  modify.  ** the 
fb00: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69  schema-version i
fb10: 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61  s potentially da
fb20: 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20  ngerous and may 
fb30: 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a  lead to program.
fb40: 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20    ** crashes or 
fb50: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
fb60: 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61  ion. Use with ca
fb70: 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a  ution!.  **.  **
fb80: 20 54 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   The user-versio
fb90: 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e  n is not used in
fba0: 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69  ternally by SQLi
fbb0: 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73  te. It may be us
fbc0: 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69  ed by.  ** appli
fbd0: 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20  cations for any 
fbe0: 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20  purpose..  */.  
fbf0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 41  case PragTyp_HEA
fc00: 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20  DER_VALUE: {.   
fc10: 20 69 6e 74 20 69 43 6f 6f 6b 69 65 20 3d 20 70   int iCookie = p
fc20: 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 2f  Pragma->iArg;  /
fc30: 2a 20 57 68 69 63 68 20 63 6f 6f 6b 69 65 20 74  * Which cookie t
fc40: 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  o read or write 
fc50: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
fc60: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
fc70: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  Db);.    if( zRi
fc80: 67 68 74 20 26 26 20 28 70 50 72 61 67 6d 61 2d  ght && (pPragma-
fc90: 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61  >mPragFlag & Pra
fca0: 67 46 6c 61 67 5f 52 65 61 64 4f 6e 6c 79 29 3d  gFlag_ReadOnly)=
fcb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57  =0 ){.      /* W
fcc0: 72 69 74 65 20 74 68 65 20 73 70 65 63 69 66 69  rite the specifi
fcd0: 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20  ed cookie value 
fce0: 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
fcf0: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
fd00: 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b   setCookie[] = {
fd10: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72  .        { OP_Tr
fd20: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c  ansaction,    0,
fd30: 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
fd40: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  0 */.        { O
fd50: 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20  P_SetCookie,    
fd60: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20    0,  0,  0},   
fd70: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7d   /* 1 */.      }
fd80: 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a  ;.      VdbeOp *
fd90: 61 4f 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  aOp;.      sqlit
fda0: 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61  e3VdbeVerifyNoMa
fdb0: 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20  llocRequired(v, 
fdc0: 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f  ArraySize(setCoo
fdd0: 6b 69 65 29 29 3b 0a 20 20 20 20 20 20 61 4f 70  kie));.      aOp
fde0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
fdf0: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
fe00: 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 2c  Size(setCookie),
fe10: 20 73 65 74 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a   setCookie, 0);.
fe20: 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49        if( ONLY_I
fe30: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
fe40: 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b  (aOp==0) ) break
fe50: 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70  ;.      aOp[0].p
fe60: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61  1 = iDb;.      a
fe70: 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a  Op[1].p1 = iDb;.
fe80: 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 32 20        aOp[1].p2 
fe90: 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20 20 20 20 20  = iCookie;.     
fea0: 20 61 4f 70 5b 31 5d 2e 70 33 20 3d 20 73 71 6c   aOp[1].p3 = sql
feb0: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
fec0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
fed0: 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73     /* Read the s
fee0: 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20  pecified cookie 
fef0: 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73  value */.      s
ff00: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
ff10: 4f 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69  OpList readCooki
ff20: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  e[] = {.        
ff30: 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
ff40: 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d  ,     0,  0,  0}
ff50: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
ff60: 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
ff70: 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31  okie,      0,  1
ff80: 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a  ,  0},    /* 1 *
ff90: 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52  /.        { OP_R
ffa0: 65 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20  esultRow,       
ffb0: 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20  1,  1,  0}.     
ffc0: 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70   };.      VdbeOp
ffd0: 20 2a 61 4f 70 3b 0a 20 20 20 20 20 20 73 71 6c   *aOp;.      sql
ffe0: 69 74 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f  ite3VdbeVerifyNo
fff0: 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76  MallocRequired(v
10000 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64  , ArraySize(read
10010 43 6f 6f 6b 69 65 29 29 3b 0a 20 20 20 20 20 20  Cookie));.      
10020 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  aOp = sqlite3Vdb
10030 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
10040 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b  raySize(readCook
10050 69 65 29 2c 72 65 61 64 43 6f 6f 6b 69 65 2c 30  ie),readCookie,0
10060 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4f 4e 4c  );.      if( ONL
10070 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
10080 45 53 53 28 61 4f 70 3d 3d 30 29 20 29 20 62 72  ESS(aOp==0) ) br
10090 65 61 6b 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30  eak;.      aOp[0
100a0 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
100b0 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44    aOp[1].p1 = iD
100c0 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e  b;.      aOp[1].
100d0 70 33 20 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20 20  p3 = iCookie;.  
100e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
100f0 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
10100 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10110 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
10120 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
10130 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
10140 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
10150 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 75 73   sqlite3VdbeReus
10160 61 62 6c 65 28 76 29 3b 0a 20 20 20 20 7d 0a 20  able(v);.    }. 
10170 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
10180 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
10190 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
101a0 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
101b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
101c0 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
101d0 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  IAGS.  /*.  **  
101e0 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f   PRAGMA compile_
101f0 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a  options.  **.  *
10200 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
10210 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c  es of all compil
10220 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75  e-time options u
10230 73 65 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c  sed in this buil
10240 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69  d,.  ** one opti
10250 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f  on per row..  */
10260 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10270 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a  COMPILE_OPTIONS:
10280 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30   {.    int i = 0
10290 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
102a0 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 70 50 61 72   *zOpt;.    pPar
102b0 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20  se->nMem = 1;.  
102c0 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61    setOneColumnNa
102d0 6d 65 28 76 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f  me(v, "compile_o
102e0 70 74 69 6f 6e 22 29 3b 0a 20 20 20 20 77 68 69  ption");.    whi
102f0 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69  le( (zOpt = sqli
10300 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
10310 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29  n_get(i++))!=0 )
10320 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
10330 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
10340 20 31 2c 20 7a 4f 70 74 29 3b 0a 20 20 20 20 20   1, zOpt);.     
10350 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10360 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
10370 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d  ow, 1, 1);.    }
10380 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10390 52 65 75 73 61 62 6c 65 28 76 29 3b 0a 20 20 7d  Reusable(v);.  }
103a0 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
103b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
103c0 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
103d0 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  AGS */..#ifndef 
103e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
103f0 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
10400 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 77 61 6c 5f  MA [schema.]wal_
10410 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73  checkpoint = pas
10420 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72  sive|full|restar
10430 74 7c 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a 0a  t|truncate.  **.
10440 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20    ** Checkpoint 
10450 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
10460 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
10470 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54  p_WAL_CHECKPOINT
10480 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
10490 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
104a0 5b 5d 20 3d 20 7b 20 22 62 75 73 79 22 2c 20 22  [] = { "busy", "
104b0 6c 6f 67 22 2c 20 22 63 68 65 63 6b 70 6f 69 6e  log", "checkpoin
104c0 74 65 64 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20  ted" };.    int 
104d0 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69  iBt = (pId2->z?i
104e0 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  Db:SQLITE_MAX_AT
104f0 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69 6e 74  TACHED);.    int
10500 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
10510 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
10520 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  VE;.    if( zRig
10530 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
10540 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
10550 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d  Right, "full")==
10560 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
10570 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
10580 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20  KPOINT_FULL;.   
10590 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
105a0 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
105b0 68 74 2c 20 22 72 65 73 74 61 72 74 22 29 3d 3d  ht, "restart")==
105c0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
105d0 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
105e0 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a  KPOINT_RESTART;.
105f0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
10600 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
10610 52 69 67 68 74 2c 20 22 74 72 75 6e 63 61 74 65  Right, "truncate
10620 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
10630 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
10640 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
10650 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ATE;.      }.   
10660 20 7d 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c   }.    setAllCol
10670 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 33 2c 20 61  umnNames(v, 3, a
10680 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20  zCol);  assert( 
10690 33 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  3==ArraySize(azC
106a0 6f 6c 29 20 29 3b 0a 20 20 20 20 70 50 61 72 73  ol) );.    pPars
106b0 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
106c0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
106d0 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f  p3(v, OP_Checkpo
106e0 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c  int, iBt, eMode,
106f0 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
10700 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10710 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
10720 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10730 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
10740 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63  GMA wal_autochec
10750 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52  kpoint.  **   PR
10760 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65  AGMA wal_autoche
10770 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a  ckpoint = N.  **
10780 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20  .  ** Configure 
10790 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  a database conne
107a0 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74  ction to automat
107b0 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e  ically checkpoin
107c0 74 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  t a database.  *
107d0 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61  * after accumula
107e0 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e  ting N frames in
107f0 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65   the log. Or que
10800 72 79 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  ry for the curre
10810 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66  nt value.  ** of
10820 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   N..  */.  case 
10830 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f  PragTyp_WAL_AUTO
10840 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20  CHECKPOINT: {.  
10850 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
10860 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61        sqlite3_wa
10870 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
10880 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  (db, sqlite3Atoi
10890 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d  (zRight));.    }
108a0 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
108b0 65 49 6e 74 28 76 2c 20 22 77 61 6c 5f 61 75 74  eInt(v, "wal_aut
108c0 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20  ocheckpoint", . 
108d0 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61        db->xWalCa
108e0 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57  llback==sqlite3W
108f0 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20  alDefaultHook ? 
10900 0a 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  .           SQLI
10910 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62  TE_PTR_TO_INT(db
10920 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b  ->pWalArg) : 0);
10930 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
10940 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ndif..  /*.  ** 
10950 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d   PRAGMA shrink_m
10960 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20  emory.  **.  ** 
10970 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
10980 46 3a 20 52 2d 32 33 34 34 35 2d 34 36 31 30 39  F: R-23445-46109
10990 20 54 68 69 73 20 70 72 61 67 6d 61 20 63 61 75   This pragma cau
109a0 73 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ses the database
109b0 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  .  ** connection
109c0 20 6f 6e 20 77 68 69 63 68 20 69 74 20 69 73 20   on which it is 
109d0 69 6e 76 6f 6b 65 64 20 74 6f 20 66 72 65 65 20  invoked to free 
109e0 75 70 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72  up as much memor
109f0 79 20 61 73 20 69 74 0a 20 20 2a 2a 20 63 61 6e  y as it.  ** can
10a00 2c 20 62 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c  , by calling sql
10a10 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f  ite3_db_release_
10a20 6d 65 6d 6f 72 79 28 29 2e 0a 20 20 2a 2f 0a 20  memory()..  */. 
10a30 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 48   case PragTyp_SH
10a40 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20  RINK_MEMORY: {. 
10a50 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65     sqlite3_db_re
10a60 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29  lease_memory(db)
10a70 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
10a80 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
10a90 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
10aa0 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
10ab0 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e  busy_timeout = N
10ac0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
10ad0 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
10ae0 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65  eout(db, N).  Re
10af0 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
10b00 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20   timeout value. 
10b10 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65   ** if one is se
10b20 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68  t.  If no busy h
10b30 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66  andler or a diff
10b40 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c  erent busy handl
10b50 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74  er is set.  ** t
10b60 68 65 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65  hen 0 is returne
10b70 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68 65 20  d.  Setting the 
10b80 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20  busy_timeout to 
10b90 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20  0 or negative.  
10ba0 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  ** disables the 
10bb0 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20  timeout..  */.  
10bc0 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70 5f 42  /*case PragTyp_B
10bd0 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65  USY_TIMEOUT*/ de
10be0 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73  fault: {.    ass
10bf0 65 72 74 28 20 70 50 72 61 67 6d 61 2d 3e 65 50  ert( pPragma->eP
10c00 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79 70 5f  ragTyp==PragTyp_
10c10 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b 0a  BUSY_TIMEOUT );.
10c20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
10c30 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
10c40 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
10c50 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
10c60 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
10c70 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
10c80 28 76 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20 20  (v, "timeout",  
10c90 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 29  db->busyTimeout)
10ca0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
10cb0 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
10cc0 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c  AGMA soft_heap_l
10cd0 69 6d 69 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  imit.  **   PRAG
10ce0 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  MA soft_heap_lim
10cf0 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  it = N.  **.  **
10d00 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
10d10 4f 46 3a 20 52 2d 32 36 33 34 33 2d 34 35 39 33  OF: R-26343-4593
10d20 30 20 54 68 69 73 20 70 72 61 67 6d 61 20 69 6e  0 This pragma in
10d30 76 6f 6b 65 73 20 74 68 65 0a 20 20 2a 2a 20 73  vokes the.  ** s
10d40 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
10d50 5f 6c 69 6d 69 74 36 34 28 29 20 69 6e 74 65 72  _limit64() inter
10d60 66 61 63 65 20 77 69 74 68 20 74 68 65 20 61 72  face with the ar
10d70 67 75 6d 65 6e 74 20 4e 2c 20 69 66 20 4e 20 69  gument N, if N i
10d80 73 0a 20 20 2a 2a 20 73 70 65 63 69 66 69 65 64  s.  ** specified
10d90 20 61 6e 64 20 69 73 20 61 20 6e 6f 6e 2d 6e 65   and is a non-ne
10da0 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 2e 0a  gative integer..
10db0 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
10dc0 49 4f 4e 2d 4f 46 3a 20 52 2d 36 34 34 35 31 2d  ION-OF: R-64451-
10dd0 30 37 31 36 33 20 54 68 65 20 73 6f 66 74 5f 68  07163 The soft_h
10de0 65 61 70 5f 6c 69 6d 69 74 20 70 72 61 67 6d 61  eap_limit pragma
10df0 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 72 65 74   always.  ** ret
10e00 75 72 6e 73 20 74 68 65 20 73 61 6d 65 20 69 6e  urns the same in
10e10 74 65 67 65 72 20 74 68 61 74 20 77 6f 75 6c 64  teger that would
10e20 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20   be returned by 
10e30 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
10e40 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
10e50 36 34 28 2d 31 29 20 43 2d 6c 61 6e 67 75 61 67  64(-1) C-languag
10e60 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2f  e function..  */
10e70 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10e80 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54 3a  SOFT_HEAP_LIMIT:
10e90 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69   {.    sqlite3_i
10ea0 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20  nt64 N;.    if( 
10eb0 7a 52 69 67 68 74 20 26 26 20 73 71 6c 69 74 65  zRight && sqlite
10ec0 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
10ed0 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49  Right, &N)==SQLI
10ee0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73  TE_OK ){.      s
10ef0 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
10f00 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20 20 20  _limit64(N);.   
10f10 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
10f20 67 6c 65 49 6e 74 28 76 2c 20 22 73 6f 66 74 5f  gleInt(v, "soft_
10f30 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71  heap_limit",  sq
10f40 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
10f50 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20  limit64(-1));.  
10f60 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
10f70 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
10f80 20 74 68 72 65 61 64 73 0a 20 20 2a 2a 20 20 20   threads.  **   
10f90 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 20 3d  PRAGMA threads =
10fa0 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
10fb0 66 69 67 75 72 65 20 74 68 65 20 6d 61 78 69 6d  figure the maxim
10fc0 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72  um number of wor
10fd0 6b 65 72 20 74 68 72 65 61 64 73 2e 20 20 52 65  ker threads.  Re
10fe0 74 75 72 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a  turn the new.  *
10ff0 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68 69 63 68  * maximum, which
11000 20 6d 69 67 68 74 20 62 65 20 6c 65 73 73 20 74   might be less t
11010 68 61 6e 20 72 65 71 75 65 73 74 65 64 2e 0a 20  han requested.. 
11020 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
11030 79 70 5f 54 48 52 45 41 44 53 3a 20 7b 0a 20 20  yp_THREADS: {.  
11040 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
11050 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  N;.    if( zRigh
11060 74 0a 20 20 20 20 20 26 26 20 73 71 6c 69 74 65  t.     && sqlite
11070 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
11080 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49  Right, &N)==SQLI
11090 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e  TE_OK.     && N>
110a0 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
110b0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62  sqlite3_limit(db
110c0 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57  , SQLITE_LIMIT_W
110d0 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 28  ORKER_THREADS, (
110e0 69 6e 74 29 28 4e 26 30 78 37 66 66 66 66 66 66  int)(N&0x7ffffff
110f0 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  f));.    }.    r
11100 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
11110 2c 20 22 74 68 72 65 61 64 73 22 2c 0a 20 20 20  , "threads",.   
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64   sqlite3_limit(d
11140 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  b, SQLITE_LIMIT_
11150 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
11160 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
11170 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  .  }..#if define
11180 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
11190 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
111a0 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a  E_TEST).  /*.  *
111b0 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72  * Report the cur
111c0 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69  rent state of fi
111d0 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20  le logs for all 
111e0 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20  databases.  */. 
111f0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
11200 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20  CK_STATUS: {.   
11210 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
11220 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b  ar *const azLock
11230 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Name[] = {.     
11240 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68   "unlocked", "sh
11250 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65 64  ared", "reserved
11260 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65  ", "pending", "e
11270 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b  xclusive".    };
11280 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
11290 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20  t char *azCol[] 
112a0 3d 20 7b 20 22 64 61 74 61 62 61 73 65 22 2c 20  = { "database", 
112b0 22 73 74 61 74 75 73 22 20 7d 3b 0a 20 20 20 20  "status" };.    
112c0 69 6e 74 20 69 3b 0a 20 20 20 20 73 65 74 41 6c  int i;.    setAl
112d0 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
112e0 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  2, azCol); asser
112f0 74 28 20 32 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 2==ArraySize(
11300 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 70 50  azCol) );.    pP
11310 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
11320 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
11330 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
11340 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a      Btree *pBt;.
11350 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
11360 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e   *zState = "unkn
11370 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74 20  own";.      int 
11380 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  j;.      if( db-
11390 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65  >aDb[i].zDbSName
113a0 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
113b0 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e        pBt = db->
113c0 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20  aDb[i].pBt;.    
113d0 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20    if( pBt==0 || 
113e0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
113f0 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20  r(pBt)==0 ){.   
11400 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63       zState = "c
11410 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65  losed";.      }e
11420 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f  lse if( sqlite3_
11430 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
11440 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   i ? db->aDb[i].
11450 7a 44 62 53 4e 61 6d 65 20 3a 20 30 2c 20 0a 20  zDbSName : 0, . 
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11480 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c      SQLITE_FCNTL
11490 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d  _LOCKSTATE, &j)=
114a0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
114b0 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
114c0 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20  azLockName[j];. 
114d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
114e0 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
114f0 64 28 76 2c 20 31 2c 20 22 73 73 22 2c 20 64 62  d(v, 1, "ss", db
11500 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d  ->aDb[i].zDbSNam
11510 65 2c 20 7a 53 74 61 74 65 29 3b 0a 20 20 20 20  e, zState);.    
11520 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11530 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
11540 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20  Row, 1, 2);.    
11550 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
11560 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
11570 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
11580 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
11590 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
115a0 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f  Right ) sqlite3_
115b0 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
115c0 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53  zRight, sqlite3S
115d0 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29  trlen30(zRight))
115e0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
115f0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
11600 52 45 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28  REKEY: {.    if(
11610 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74 65   zRight ) sqlite
11620 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a  3_rekey_v2(db, z
11630 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69  Db, zRight, sqli
11640 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
11650 68 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ht));.    break;
11660 0a 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67  .  }.  case Prag
11670 54 79 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20  Typ_HEXKEY: {.  
11680 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
11690 20 20 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a        u8 iByte;.
116a0 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
116b0 20 20 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d     char zKey[40]
116c0 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c  ;.      for(i=0,
116d0 20 69 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65   iByte=0; i<size
116e0 6f 66 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71  of(zKey)*2 && sq
116f0 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 7a 52  lite3Isxdigit(zR
11700 69 67 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a  ight[i]); i++){.
11710 20 20 20 20 20 20 20 20 69 42 79 74 65 20 3d 20          iByte = 
11720 28 69 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c  (iByte<<4) + sql
11730 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69  ite3HexToInt(zRi
11740 67 68 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  ght[i]);.       
11750 20 69 66 28 20 28 69 26 31 29 21 3d 30 20 29 20   if( (i&1)!=0 ) 
11760 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74  zKey[i/2] = iByt
11770 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
11780 20 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26   if( (zLeft[3] &
11790 20 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20   0xf)==0xb ){.  
117a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65        sqlite3_ke
117b0 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b  y_v2(db, zDb, zK
117c0 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20  ey, i/2);.      
117d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
117e0 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28  qlite3_rekey_v2(
117f0 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69  db, zDb, zKey, i
11800 2f 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  /2);.      }.   
11810 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
11820 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  }.#endif.#if def
11830 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f  ined(SQLITE_HAS_
11840 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65  CODEC) || define
11850 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
11860 43 45 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72  CEROD).  case Pr
11870 61 67 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45  agTyp_ACTIVATE_E
11880 58 54 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a  XTENSIONS: if( z
11890 52 69 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20  Right ){.#ifdef 
118a0 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
118b0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
118c0 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c  StrNICmp(zRight,
118d0 20 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29   "see-", 4)==0 )
118e0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
118f0 61 63 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52  activate_see(&zR
11900 69 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a  ight[4]);.    }.
11910 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
11920 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f  LITE_ENABLE_CERO
11930 44 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  D.    if( sqlite
11940 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
11950 2c 20 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d  , "cerod-", 6)==
11960 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
11970 65 33 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f  e3_activate_cero
11980 64 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20  d(&zRight[6]);. 
11990 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
119a0 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a    break;.#endif.
119b0 0a 20 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74  .  } /* End of t
119c0 68 65 20 50 52 41 47 4d 41 20 73 77 69 74 63 68  he PRAGMA switch
119d0 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a   */..pragma_out:
119e0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
119f0 28 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73  (db, zLeft);.  s
11a00 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
11a10 74 65 28 64 62 2c 20 70 56 61 6c 75 65 73 29 3b  te(db, pValues);
11a20 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .}..#endif /* SQ
11a30 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
11a40 20 2a 2f 0a                                       */.