/ Hex Artifact Content
Login

Artifact a973357ef2faded933725a6de2883133deb24029:


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 20  or ON or NORMAL 
04c0: 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20  and 2 for FULL. 
04d0: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e   Return 1 for an
04e0: 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e   empty or .** un
04f0: 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e  recognized strin
0500: 67 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65  g argument.  The
0510: 20 46 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20   FULL option is 
0520: 64 69 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66  disallowed.** if
0530: 20 74 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61   the omitFull pa
0540: 72 61 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a  rameter it 1..**
0550: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
0560: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
0570: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
0580: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
0590: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
05a0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
05b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
05c0: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
05d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
05e0: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
05f0: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
0600: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
0610: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
0620: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
0630: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
0640: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
0650: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
0660: 2f 0a 73 74 61 74 69 63 20 75 38 20 67 65 74 53  /.static u8 getS
0670: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
0680: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d   char *z, int om
0690: 69 74 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29  itFull, u8 dflt)
06a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
06c0: 2a 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34  * 123456789 1234
06d0: 35 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69  56789 */.  stati
06e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65  c const char zTe
06f0: 78 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73  xt[] = "onoffals
0700: 65 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20  eyestruefull";. 
0710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0720: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0730: 20 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c   1, 2, 4, 9, 12,
0740: 20 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63   16};.  static c
0750: 6f 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b  onst u8 iLength[
0760: 5d 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c  ] = {2, 2, 3, 5,
0770: 20 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61   3, 4, 4};.  sta
0780: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61  tic const u8 iVa
0790: 6c 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20  lue[] =  {1, 0, 
07a0: 30 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a  0, 0, 1, 1, 2};.
07b0: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66    int i, n;.  if
07c0: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
07d0: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
07e0: 72 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74  rn (u8)sqlite3At
07f0: 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  oi(z);.  }.  n =
0800: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
0810: 28 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  (z);.  for(i=0; 
0820: 69 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e  i<ArraySize(iLen
0830: 67 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69  gth)-omitFull; i
0840: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65  ++){.    if( iLe
0850: 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71  ngth[i]==n && sq
0860: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a  lite3StrNICmp(&z
0870: 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d  Text[iOffset[i]]
0880: 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ,z,n)==0 ){.    
0890: 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b    return iValue[
08a0: 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  i];.    }.  }.  
08b0: 72 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a  return dflt;.}..
08c0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
08d0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
08e0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
08f0: 6c 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74  lue..*/.u8 sqlit
0900: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
0910: 73 74 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64  st char *z, u8 d
0920: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
0930: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
0940: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
0950: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
0960: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
0970: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
0980: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
0990: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
09a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
09b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
09c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
09d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
09e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
09f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
0a00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
0a10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
0a20: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0a30: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
0a40: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0a50: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0a60: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
0a70: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
0a80: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
0a90: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
0aa0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
0ab0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0ac0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
0ad0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
0ae0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
0af0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
0b00: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0b10: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
0b20: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
0b30: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0b40: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
0b50: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
0b60: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
0b70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
0b80: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0b90: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
0ba0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
0bb0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
0bc0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
0bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
0be0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
0bf0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
0c00: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
0c10: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
0c20: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
0c30: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
0c40: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
0c50: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
0c60: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
0c70: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
0c80: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
0c90: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0ca0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
0cb0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
0cc0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
0cd0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
0ce0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0cf0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
0d00: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
0d10: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
0d20: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
0d30: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
0d40: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d50: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
0d60: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
0d70: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
0d80: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
0d90: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
0da0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
0db0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
0dc0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
0dd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
0de0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
0df0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
0e00: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
0e10: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
0e20: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
0e30: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
0e40: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
0e50: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
0e60: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
0e70: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
0e80: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
0e90: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
0ea0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
0eb0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
0ec0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
0ed0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
0ee0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
0ef0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
0f00: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
0f10: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
0f20: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
0f30: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
0f40: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
0f50: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
0f60: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
0f70: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
0f80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
0f90: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
0fa0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
0fb0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
0fc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
0fd0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
0fe0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
0ff0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
1000: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
1010: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
1020: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
1030: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
1040: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
1050: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1060: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
1070: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
1080: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
1090: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
10a0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
10b0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
10c0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
10d0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
10e0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
10f0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
1100: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
1110: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
1120: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
1130: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
1140: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
1150: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
1160: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
1170: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
1180: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
1190: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11a0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
11b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
11c0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
11d0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
11e0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
11f0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1200: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1210: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
1220: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1230: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
1240: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
1250: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
1260: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1270: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
1280: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
1290: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
12a0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
12b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12c0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
12d0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
12e0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
12f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
1300: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
1310: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
1320: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
1330: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
1340: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
1350: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
1360: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
1370: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
1380: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
1390: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
13a0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
13b0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
13c0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
13d0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
13e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
13f0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
1400: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
1410: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
1420: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
1430: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1440: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
1450: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
1460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1470: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
1480: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
1490: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74   */../*.** Set t
14a0: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
14b0: 66 69 72 73 74 20 4e 20 63 6f 6c 75 6d 6e 73 20  first N columns 
14c0: 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  to the values in
14d0: 20 61 7a 43 6f 6c 5b 5d 0a 2a 2f 0a 73 74 61 74   azCol[].*/.stat
14e0: 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 43 6f  ic void setAllCo
14f0: 6c 75 6d 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62  lumnNames(.  Vdb
1500: 65 20 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20  e *v,           
1510: 20 20 20 20 2f 2a 20 54 68 65 20 71 75 65 72 79      /* The query
1520: 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1530: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20  ion */.  int N, 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1550: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
1560: 75 6d 6e 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  umns */.  const 
1570: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 20 20 20 20  char **azCol    
1580: 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 63 6f 6c   /* Names of col
1590: 75 6d 6e 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  umns */.){.  int
15a0: 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   i;.  sqlite3Vdb
15b0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 4e  eSetNumCols(v, N
15c0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
15d0: 4e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  N; i++){.    sql
15e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
15f0: 6d 65 28 76 2c 20 69 2c 20 43 4f 4c 4e 41 4d 45  me(v, i, COLNAME
1600: 5f 4e 41 4d 45 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  _NAME, azCol[i],
1610: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
1620: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
1630: 69 64 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e  id setOneColumnN
1640: 61 6d 65 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e  ame(Vdbe *v, con
1650: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73  st char *z){.  s
1660: 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
1670: 28 76 2c 20 31 2c 20 26 7a 29 3b 0a 7d 0a 0a 2f  (v, 1, &z);.}../
1680: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f  *.** Generate co
1690: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73  de to return a s
16a0: 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 76 61  ingle integer va
16b0: 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  lue..*/.static v
16c0: 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67 6c 65  oid returnSingle
16d0: 49 6e 74 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e  Int(Vdbe *v, con
16e0: 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c  st char *zLabel,
16f0: 20 69 36 34 20 76 61 6c 75 65 29 7b 0a 20 20 73   i64 value){.  s
1700: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
1710: 44 75 70 38 28 76 2c 20 4f 50 5f 49 6e 74 36 34  Dup8(v, OP_Int64
1720: 2c 20 30 2c 20 31 2c 20 30 2c 20 28 63 6f 6e 73  , 0, 1, 0, (cons
1730: 74 20 75 38 2a 29 26 76 61 6c 75 65 2c 20 50 34  t u8*)&value, P4
1740: 5f 49 4e 54 36 34 29 3b 0a 20 20 73 65 74 4f 6e  _INT64);.  setOn
1750: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a  eColumnName(v, z
1760: 4c 61 62 65 6c 29 3b 0a 20 20 73 71 6c 69 74 65  Label);.  sqlite
1770: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
1780: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
1790: 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e  1);.}../*.** Gen
17a0: 65 72 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65  erate code to re
17b0: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 74 65  turn a single te
17c0: 78 74 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  xt value..*/.sta
17d0: 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53  tic void returnS
17e0: 69 6e 67 6c 65 54 65 78 74 28 0a 20 20 56 64 62  ingleText(.  Vdb
17f0: 65 20 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20  e *v,           
1800: 20 20 20 20 20 2f 2a 20 50 72 65 70 61 72 65 64       /* Prepared
1810: 20 73 74 61 74 65 6d 65 6e 74 20 75 6e 64 65 72   statement under
1820: 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f   construction */
1830: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1840: 4c 61 62 65 6c 2c 20 20 20 20 20 2f 2a 20 4e 61  Label,     /* Na
1850: 6d 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  me of the result
1860: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 6f 6e   column */.  con
1870: 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 75 65 20  st char *zValue 
1880: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
1890: 20 62 65 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a   be returned */.
18a0: 29 7b 0a 20 20 69 66 28 20 7a 56 61 6c 75 65 20  ){.  if( zValue 
18b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
18c0: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
18d0: 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  1, (const char*)
18e0: 7a 56 61 6c 75 65 29 3b 0a 20 20 20 20 73 65 74  zValue);.    set
18f0: 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c  OneColumnName(v,
1900: 20 7a 4c 61 62 65 6c 29 3b 0a 20 20 20 20 73 71   zLabel);.    sq
1910: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
1920: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
1930: 20 31 2c 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a   1, 1);.  }.}...
1940: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 73 61  /*.** Set the sa
1950: 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70  fety_level and p
1960: 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72 20 70  ager flags for p
1970: 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20 69 66  ager iDb.  Or if
1980: 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68   iDb<0.** set th
1990: 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72 20 61  ese values for a
19a0: 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69  ll pagers..*/.#i
19b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
19c0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
19d0: 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 41  static void setA
19e0: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73 71 6c  llPagerFlags(sql
19f0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28  ite3 *db){.  if(
1a00: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
1a10: 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62 20 3d  ){.    Db *pDb =
1a20: 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e   db->aDb;.    in
1a30: 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20  t n = db->nDb;. 
1a40: 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54     assert( SQLIT
1a50: 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47  E_FullFSync==PAG
1a60: 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a  ER_FULLFSYNC );.
1a70: 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49      assert( SQLI
1a80: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
1a90: 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  ==PAGER_CKPT_FUL
1aa0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
1ab0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 61 63  sert( SQLITE_Cac
1ac0: 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43  heSpill==PAGER_C
1ad0: 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20  ACHESPILL );.   
1ae0: 20 61 73 73 65 72 74 28 20 28 50 41 47 45 52 5f   assert( (PAGER_
1af0: 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45  FULLFSYNC | PAGE
1b00: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
1b10: 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45 53 50   | PAGER_CACHESP
1b20: 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20 20  ILL).           
1b30: 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c 41 47    ==  PAGER_FLAG
1b40: 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20 61 73  S_MASK );.    as
1b50: 73 65 72 74 28 20 28 70 44 62 2d 3e 73 61 66 65  sert( (pDb->safe
1b60: 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45 52  ty_level & PAGER
1b70: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53  _SYNCHRONOUS_MAS
1b80: 4b 29 3d 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f  K)==pDb->safety_
1b90: 6c 65 76 65 6c 20 29 3b 0a 20 20 20 20 77 68 69  level );.    whi
1ba0: 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b  le( (n--) > 0 ){
1bb0: 0a 20 20 20 20 20 20 69 66 28 20 70 44 62 2d 3e  .      if( pDb->
1bc0: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73  pBt ){.        s
1bd0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50 61  qlite3BtreeSetPa
1be0: 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e 70 42  gerFlags(pDb->pB
1bf0: 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
1c00: 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f      pDb->safety_
1c10: 6c 65 76 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61  level | (db->fla
1c20: 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47 53  gs & PAGER_FLAGS
1c30: 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20 20  _MASK) );.      
1c40: 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20  }.      pDb++;. 
1c50: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65     }.  }.}.#else
1c60: 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c 6c  .# define setAll
1c70: 50 61 67 65 72 46 6c 61 67 73 28 58 29 20 20 2f  PagerFlags(X)  /
1c80: 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
1c90: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  f.../*.** Return
1ca0: 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
1cb0: 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e  e name for a con
1cc0: 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74 69  straint resoluti
1cd0: 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  on action..*/.#i
1ce0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1cf0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74  T_FOREIGN_KEY.st
1d00: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
1d10: 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61  *actionName(u8 a
1d20: 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20  ction){.  const 
1d30: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73  char *zName;.  s
1d40: 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29 7b  witch( action ){
1d50: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74  .    case OE_Set
1d60: 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  Null:  zName = "
1d70: 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20  SET NULL";      
1d80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1d90: 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a  e OE_SetDflt:  z
1da0: 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46 41  Name = "SET DEFA
1db0: 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  ULT";     break;
1dc0: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61 73  .    case OE_Cas
1dd0: 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  cade:  zName = "
1de0: 43 41 53 43 41 44 45 22 3b 20 20 20 20 20 20 20  CASCADE";       
1df0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1e00: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20 7a  e OE_Restrict: z
1e10: 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43 54  Name = "RESTRICT
1e20: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
1e30: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
1e40: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1e50: 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20  NO ACTION";  .  
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e70: 20 20 20 20 61 73 73 65 72 74 28 20 61 63 74 69      assert( acti
1e80: 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62  on==OE_None ); b
1e90: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75  reak;.  }.  retu
1ea0: 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64  rn zName;.}.#end
1eb0: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d  if.../*.** Param
1ec0: 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74 20  eter eMode must 
1ed0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50 41  be one of the PA
1ee0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
1ef0: 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  XXX constants.**
1f00: 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67 65   defined in page
1f10: 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74 69  r.h. This functi
1f20: 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1f30: 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72 63  ssociated lowerc
1f40: 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d  ase.** journal-m
1f50: 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e  ode name..*/.con
1f60: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
1f70: 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
1f80: 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74  int eMode){.  st
1f90: 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e 73  atic char * cons
1fa0: 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d  t azModeName[] =
1fb0: 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22 2c   {.    "delete",
1fc0: 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66 66   "persist", "off
1fd0: 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20 22  ", "truncate", "
1fe0: 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66 20  memory".#ifndef 
1ff0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2000: 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e       , "wal".#en
2010: 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72  dif.  };.  asser
2020: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2030: 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29  MODE_DELETE==0 )
2040: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
2050: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
2060: 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73  RSIST==1 );.  as
2070: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
2080: 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29  NALMODE_OFF==2 )
2090: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
20a0: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
20b0: 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61  UNCATE==3 );.  a
20c0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
20d0: 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d  RNALMODE_MEMORY=
20e0: 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =4 );.  assert( 
20f0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2100: 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73  E_WAL==5 );.  as
2110: 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26  sert( eMode>=0 &
2120: 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69  & eMode<=ArraySi
2130: 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29  ze(azModeName) )
2140: 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d  ;..  if( eMode==
2150: 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65  ArraySize(azMode
2160: 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20 30  Name) ) return 0
2170: 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64  ;.  return azMod
2180: 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a  eName[eMode];.}.
2190: 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61  ./*.** Process a
21a0: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
21b0: 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d  t.  .**.** Pragm
21c0: 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66  as are of this f
21d0: 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  orm:.**.**      
21e0: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
21f0: 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a  id [= value].**.
2200: 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66 69 65  ** The identifie
2210: 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20  r might also be 
2220: 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 76  a string.  The v
2230: 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67  alue is a string
2240: 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66  , and.** identif
2250: 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72  ier, or a number
2260: 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61 67 20  .  If minusFlag 
2270: 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
2280: 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20  e value is.** a 
2290: 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61 73 20  number that was 
22a0: 70 72 65 63 65 64 65 64 20 62 79 20 61 20 6d 69  preceded by a mi
22b0: 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20  nus sign..**.** 
22c0: 49 66 20 74 68 65 20 6c 65 66 74 20 73 69 64 65  If the left side
22d0: 20 69 73 20 22 64 61 74 61 62 61 73 65 2e 69 64   is "database.id
22e0: 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74  " then pId1 is t
22f0: 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
2300: 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69 73 20  .** and pId2 is 
2310: 74 68 65 20 69 64 2e 20 20 49 66 20 74 68 65 20  the id.  If the 
2320: 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a 75 73  left side is jus
2330: 74 20 22 69 64 22 20 74 68 65 6e 20 70 49 64 31  t "id" then pId1
2340: 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e   is the.** id an
2350: 64 20 70 49 64 32 20 69 73 20 61 6e 79 20 65 6d  d pId2 is any em
2360: 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76  pty string..*/.v
2370: 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
2380: 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  a(.  Parse *pPar
2390: 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  se, .  Token *pI
23a0: 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20 46 69  d1,        /* Fi
23b0: 72 73 74 20 70 61 72 74 20 6f 66 20 5b 73 63 68  rst part of [sch
23c0: 65 6d 61 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f  ema.]id field */
23d0: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20  .  Token *pId2, 
23e0: 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64         /* Second
23f0: 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61   part of [schema
2400: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
2410: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
2420: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
2430: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
2440: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
2450: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
2460: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
2470: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
2480: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
2490: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
24a0: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
24b0: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
24c0: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
24d0: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
24e0: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
24f0: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
2500: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
2510: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
2520: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
2530: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
2540: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
2550: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
2560: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
2570: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
2580: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
2590: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
25a0: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
25b0: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
25c0: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
25d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
25e0: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
25f0: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
2600: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
2610: 69 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a  id = 0;       /*
2620: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
2630: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
2640: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
2650: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
2660: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
2670: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
2680: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
2690: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
26a0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
26b0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
26c0: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
26f0: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
2700: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
2710: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
2720: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
2730: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
2740: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
2750: 20 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e   struct sPragmaN
2760: 61 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a  ames *pPragma;..
2770: 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74    if( v==0 ) ret
2780: 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  urn;.  sqlite3Vd
2790: 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29  beRunOnlyOnce(v)
27a0: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  ;.  pParse->nMem
27b0: 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65   = 2;..  /* Inte
27c0: 72 70 72 65 74 20 74 68 65 20 5b 73 63 68 65 6d  rpret the [schem
27d0: 61 2e 5d 20 70 61 72 74 20 6f 66 20 74 68 65 20  a.] part of the 
27e0: 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74  pragma statement
27f0: 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20 20 2a  . iDb is the.  *
2800: 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  * index of the d
2810: 61 74 61 62 61 73 65 20 74 68 69 73 20 70 72 61  atabase this pra
2820: 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61 70 70  gma is being app
2830: 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e 61 44  lied to in db.aD
2840: 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20  b[]. */.  iDb = 
2850: 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
2860: 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64 31 2c  me(pParse, pId1,
2870: 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a 20 20   pId2, &pId);.  
2880: 69 66 28 20 69 44 62 3c 30 20 29 20 72 65 74 75  if( iDb<0 ) retu
2890: 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d  rn;.  pDb = &db-
28a0: 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a  >aDb[iDb];..  /*
28b0: 20 49 66 20 74 68 65 20 74 65 6d 70 20 64 61 74   If the temp dat
28c0: 61 62 61 73 65 20 68 61 73 20 62 65 65 6e 20 65  abase has been e
28d0: 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65 64 20  xplicitly named 
28e0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 0a  as part of the .
28f0: 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d 61 6b    ** pragma, mak
2900: 65 20 73 75 72 65 20 69 74 20 69 73 20 6f 70 65  e sure it is ope
2910: 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69  n. .  */.  if( i
2920: 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74 65 33  Db==1 && sqlite3
2930: 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2940: 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20  (pParse) ){.    
2950: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a  return;.  }..  z
2960: 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33 4e 61  Left = sqlite3Na
2970: 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20  meFromToken(db, 
2980: 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65  pId);.  if( !zLe
2990: 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69  ft ) return;.  i
29a0: 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a  f( minusFlag ){.
29b0: 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c      zRight = sql
29c0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
29d0: 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29 3b 0a  "-%T", pValue);.
29e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69    }else{.    zRi
29f0: 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d  ght = sqlite3Nam
2a00: 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70  eFromToken(db, p
2a10: 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 61  Value);.  }..  a
2a20: 73 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a 20  ssert( pId2 );. 
2a30: 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30   zDb = pId2->n>0
2a40: 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20   ? pDb->zName : 
2a50: 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
2a60: 41 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65  AuthCheck(pParse
2a70: 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c  , SQLITE_PRAGMA,
2a80: 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20   zLeft, zRight, 
2a90: 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  zDb) ){.    goto
2aa0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
2ab0: 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53  ..  /* Send an S
2ac0: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2ad0: 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20  MA file-control 
2ae0: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
2af0: 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65  g VFS.  ** conne
2b00: 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72 65  ction.  If it re
2b10: 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c  turns SQLITE_OK,
2b20: 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61   then assume tha
2b30: 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20 68  t the VFS.  ** h
2b40: 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67 6d  andled the pragm
2b50: 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20 61  a and generate a
2b60: 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64 20   no-op prepared 
2b70: 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a  statement..  **.
2b80: 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
2b90: 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d  ION-OF: R-12238-
2ba0: 35 35 31 32 30 20 57 68 65 6e 65 76 65 72 20 61  55120 Whenever a
2bb0: 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e   PRAGMA statemen
2bc0: 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20 2a  t is parsed,.  *
2bd0: 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54  * an SQLITE_FCNT
2be0: 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63 6f  L_PRAGMA file co
2bf0: 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f  ntrol is sent to
2c00: 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74 65   the open sqlite
2c10: 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65  3_file.  ** obje
2c20: 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ct corresponding
2c30: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2c40: 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20 74   file to which t
2c50: 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73  he pragma.  ** s
2c60: 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73 2e  tatement refers.
2c70: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45  .  **.  ** IMPLE
2c80: 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
2c90: 32 39 38 37 35 2d 33 31 36 37 38 20 54 68 65 20  29875-31678 The 
2ca0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
2cb0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2cc0: 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f  GMA.  ** file co
2cd0: 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72 61  ntrol is an arra
2ce0: 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  y of pointers to
2cf0: 20 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a 2a   strings (char**
2d00: 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a 20  ) in which the. 
2d10: 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65   ** second eleme
2d20: 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61 79 20  nt of the array 
2d30: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
2d40: 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74 68  he pragma and th
2d50: 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65  e third.  ** ele
2d60: 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72 67 75  ment is the argu
2d70: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61 67  ment to the prag
2d80: 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68  ma or NULL if th
2d90: 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a  e pragma has no.
2da0: 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20    ** argument.. 
2db0: 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20   */.  aFcntl[0] 
2dc0: 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d  = 0;.  aFcntl[1]
2dd0: 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e   = zLeft;.  aFcn
2de0: 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a  tl[2] = zRight;.
2df0: 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b    aFcntl[3] = 0;
2e00: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
2e10: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
2e20: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c  rc = sqlite3_fil
2e30: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44  e_control(db, zD
2e40: 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  b, SQLITE_FCNTL_
2e50: 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61  PRAGMA, (void*)a
2e60: 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63  Fcntl);.  if( rc
2e70: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2e80: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54     returnSingleT
2e90: 65 78 74 28 76 2c 20 22 72 65 73 75 6c 74 22 2c  ext(v, "result",
2ea0: 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20   aFcntl[0]);.   
2eb0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46   sqlite3_free(aF
2ec0: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 67 6f  cntl[0]);.    go
2ed0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2ee0: 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
2ef0: 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a  ITE_NOTFOUND ){.
2f00: 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30      if( aFcntl[0
2f10: 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ] ){.      sqlit
2f20: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
2f30: 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b  e, "%s", aFcntl[
2f40: 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0]);.      sqlit
2f50: 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30  e3_free(aFcntl[0
2f60: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50  ]);.    }.    pP
2f70: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
2f80: 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72    pParse->rc = r
2f90: 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67  c;.    goto prag
2fa0: 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  ma_out;.  }..  /
2fb0: 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61  * Locate the pra
2fc0: 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75  gma in the looku
2fd0: 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72  p table */.  lwr
2fe0: 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72   = 0;.  upr = Ar
2ff0: 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e  raySize(aPragmaN
3000: 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65  ames)-1;.  while
3010: 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20  ( lwr<=upr ){.  
3020: 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72    mid = (lwr+upr
3030: 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  )/2;.    rc = sq
3040: 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c  lite3_stricmp(zL
3050: 65 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65  eft, aPragmaName
3060: 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  s[mid].zName);. 
3070: 20 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62     if( rc==0 ) b
3080: 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63  reak;.    if( rc
3090: 3c 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20  <0 ){.      upr 
30a0: 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d  = mid - 1;.    }
30b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20  else{.      lwr 
30c0: 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d  = mid + 1;.    }
30d0: 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75  .  }.  if( lwr>u
30e0: 70 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  pr ) goto pragma
30f0: 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61 20  _out;.  pPragma 
3100: 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  = &aPragmaNames[
3110: 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  mid];..  /* Make
3120: 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
3130: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61  se schema is loa
3140: 64 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d  ded if the pragm
3150: 61 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  a requires that 
3160: 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d  */.  if( (pPragm
3170: 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  a->mPragFlag & P
3180: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
3190: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
31a0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
31b0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
31c0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
31d0: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
31e0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
31f0: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
3200: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72  */.  switch( pPr
3210: 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29  agma->ePragTyp )
3220: 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  {.  .#if !define
3230: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
3240: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
3250: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3260: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
3270: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
3280: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61  MA [schema.]defa
3290: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20  ult_cache_size. 
32a0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
32b0: 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63  ema.]default_cac
32c0: 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  he_size=N.  **. 
32d0: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
32e0: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
32f0: 75 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e  urrent persisten
3300: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
3310: 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68  e.  ** page cach
3320: 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c  e size.  The val
3330: 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74  ue returned is t
3340: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
3350: 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20  r of.  ** pages 
3360: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
3370: 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  e.  The second f
3380: 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68  orm sets both th
3390: 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70  e current.  ** p
33a0: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76  age cache size v
33b0: 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72  alue and the per
33c0: 73 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63  sistent page cac
33d0: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20  he size value.  
33e0: 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ** stored in the
33f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
3400: 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20    **.  ** Older 
3410: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
3420: 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68 65  te would set the
3430: 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73   default cache s
3440: 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65  ize to a.  ** ne
3450: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74 6f  gative number to
3460: 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68 72   indicate synchr
3470: 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65 73  onous=OFF.  Thes
3480: 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e  e days, synchron
3490: 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61  ous.  ** is alwa
34a0: 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  ys on by default
34b0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   regardless of t
34c0: 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 64  he sign of the d
34d0: 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a  efault cache.  *
34e0: 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e  * size.  But con
34f0: 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74 68  tinue to take th
3500: 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
3510: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
3520: 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20  cache.  ** size 
3530: 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f  of historical co
3540: 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a  mpatibility..  *
3550: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
3560: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
3570: 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  IZE: {.    stati
3580: 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20  c const int iLn 
3590: 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49  = VDBE_OFFSET_LI
35a0: 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61  NENO(2);.    sta
35b0: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
35c0: 4c 69 73 74 20 67 65 74 43 61 63 68 65 53 69 7a  List getCacheSiz
35d0: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  e[] = {.      { 
35e0: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
35f0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
3600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3610: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f           /* 0 */
3620: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64  .      { OP_Read
3630: 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20  Cookie,  0, 1,  
3640: 20 20 20 20 20 20 42 54 52 45 45 5f 44 45 46 41        BTREE_DEFA
3650: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c  ULT_CACHE_SIZE},
3660: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
3670: 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20  { OP_IfPos,     
3680: 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30    1, 8,        0
3690: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e  },.      { OP_In
36a0: 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32 2c  teger,     0, 2,
36b0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
36c0: 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74 2c    { OP_Subtract,
36d0: 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20 20      1, 2,       
36e0: 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   1},.      { OP_
36f0: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
3700: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
3710: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
3720: 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20  ,     0, 1,     
3730: 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20     0},          
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3750: 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 6 */.      { O
3760: 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20 30  P_Noop,        0
3770: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
3780: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
3790: 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20 20  tRow,   1, 1,   
37a0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a       0},.    };.
37b0: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
37c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
37d0: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
37e0: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
37f0: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f  ht ){.      setO
3800: 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20  neColumnName(v, 
3810: 22 63 61 63 68 65 5f 73 69 7a 65 22 29 3b 0a 20  "cache_size");. 
3820: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
3830: 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 73 71  m += 2;.      sq
3840: 6c 69 74 65 33 56 64 62 65 56 65 72 69 66 79 4e  lite3VdbeVerifyN
3850: 6f 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65 64 28  oMallocRequired(
3860: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74  v, ArraySize(get
3870: 43 61 63 68 65 53 69 7a 65 29 29 3b 0a 20 20 20  CacheSize));.   
3880: 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33     aOp = sqlite3
3890: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
38a0: 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61   ArraySize(getCa
38b0: 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63  cheSize), getCac
38c0: 68 65 53 69 7a 65 2c 20 69 4c 6e 29 3b 0a 20 20  heSize, iLn);.  
38d0: 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f      if( ONLY_IF_
38e0: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61  REALLOC_STRESS(a
38f0: 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a  Op==0) ) break;.
3900: 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20        aOp[0].p1 
3910: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70  = iDb;.      aOp
3920: 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20  [1].p1 = iDb;.  
3930: 20 20 20 20 61 4f 70 5b 36 5d 2e 70 31 20 3d 20      aOp[6].p1 = 
3940: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43  SQLITE_DEFAULT_C
3950: 41 43 48 45 5f 53 49 5a 45 3b 0a 20 20 20 20 7d  ACHE_SIZE;.    }
3960: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
3970: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62  size = sqlite3Ab
3980: 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74  sInt32(sqlite3At
3990: 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
39a0: 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57     sqlite3BeginW
39b0: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
39c0: 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20  arse, 0, iDb);. 
39d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
39e0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74  AddOp3(v, OP_Set
39f0: 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52  Cookie, iDb, BTR
3a00: 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  EE_DEFAULT_CACHE
3a10: 5f 53 49 5a 45 2c 20 73 69 7a 65 29 3b 0a 20 20  _SIZE, size);.  
3a20: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
3a30: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
3a40: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
3a50: 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63  ;.      pDb->pSc
3a60: 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65  hema->cache_size
3a70: 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73   = size;.      s
3a80: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
3a90: 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74  cheSize(pDb->pBt
3aa0: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
3ab0: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20  cache_size);.   
3ac0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
3ad0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c  }.#endif /* !SQL
3ae0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
3af0: 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c 49 54  RAGMAS && !SQLIT
3b00: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
3b10: 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  D */..#if !defin
3b20: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
3b30: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20  AGER_PRAGMAS).  
3b40: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
3b50: 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69  [schema.]page_si
3b60: 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ze.  **  PRAGMA 
3b70: 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69  [schema.]page_si
3b80: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
3b90: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
3ba0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
3bb0: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
3bc0: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
3bd0: 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74  page size in byt
3be0: 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20  es.  The second 
3bf0: 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20  form sets the.  
3c00: 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65  ** database page
3c10: 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68   size value.  Th
3c20: 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79  e value can only
3c30: 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20   be set if.  ** 
3c40: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 73  the database has
3c50: 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72   not yet been cr
3c60: 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  eated..  */.  ca
3c70: 73 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  se PragTyp_PAGE_
3c80: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  SIZE: {.    Btre
3c90: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
3ca0: 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  t;.    assert( p
3cb0: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
3cc0: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
3cd0: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57    int size = ALW
3ce0: 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74  AYS(pBt) ? sqlit
3cf0: 65 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69  e3BtreeGetPageSi
3d00: 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20  ze(pBt) : 0;.   
3d10: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
3d20: 6e 74 28 76 2c 20 22 70 61 67 65 5f 73 69 7a 65  nt(v, "page_size
3d30: 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  ", size);.    }e
3d40: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  lse{.      /* Ma
3d50: 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20 77 68  lloc may fail wh
3d60: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 70  en setting the p
3d70: 61 67 65 2d 73 69 7a 65 2c 20 61 73 20 74 68 65  age-size, as the
3d80: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61  re is an interna
3d90: 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65  l.      ** buffe
3da0: 72 20 74 68 61 74 20 74 68 65 20 70 61 67 65 72  r that the pager
3db0: 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65 73 20   module resizes 
3dc0: 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 72 65  using sqlite3_re
3dd0: 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a  alloc()..      *
3de0: 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74  /.      db->next
3df0: 50 61 67 65 73 69 7a 65 20 3d 20 73 71 6c 69 74  Pagesize = sqlit
3e00: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
3e10: 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
3e20: 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42  _NOMEM==sqlite3B
3e30: 74 72 65 65 53 65 74 50 61 67 65 53 69 7a 65 28  treeSetPageSize(
3e40: 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67  pBt, db->nextPag
3e50: 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20  esize,-1,0) ){. 
3e60: 20 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f         db->mallo
3e70: 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
3e80: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
3e90: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
3ea0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3eb0: 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c  hema.]secure_del
3ec0: 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ete.  **  PRAGMA
3ed0: 20 5b 73 63 68 65 6d 61 2e 5d 73 65 63 75 72 65   [schema.]secure
3ee0: 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20  _delete=ON/OFF. 
3ef0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
3f00: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
3f10: 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74  the current sett
3f20: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
3f30: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66   secure_delete f
3f40: 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  lag.  The second
3f50: 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68   form changes th
3f60: 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  e secure_delete.
3f70: 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e    ** flag settin
3f80: 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68  g and reports th
3f90: 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f  enew value..  */
3fa0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
3fb0: 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b  SECURE_DELETE: {
3fc0: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
3fd0: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
3fe0: 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20  int b = -1;.    
3ff0: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
4000: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
4010: 20 29 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71   ){.      b = sq
4020: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
4030: 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20  zRight, 0);.    
4040: 7d 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  }.    if( pId2->
4050: 6e 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a  n==0 && b>=0 ){.
4060: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
4070: 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
4080: 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
4090: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
40a0: 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65 74  BtreeSecureDelet
40b0: 65 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  e(db->aDb[ii].pB
40c0: 74 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t, b);.      }. 
40d0: 20 20 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c     }.    b = sql
40e0: 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65 44  ite3BtreeSecureD
40f0: 65 6c 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20  elete(pBt, b);. 
4100: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
4110: 6e 74 28 76 2c 20 22 73 65 63 75 72 65 5f 64 65  nt(v, "secure_de
4120: 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20 20 20 62  lete", b);.    b
4130: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
4140: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
4150: 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f 63  hema.]max_page_c
4160: 6f 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d  ount.  **  PRAGM
4170: 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70  A [schema.]max_p
4180: 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a  age_count=N.  **
4190: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
41a0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
41b0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
41c0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   for the.  ** ma
41d0: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
41e0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
41f0: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
4200: 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f   .  ** second fo
4210: 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63  rm attempts to c
4220: 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69  hange this setti
4230: 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66  ng.  Both.  ** f
4240: 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20  orms return the 
4250: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e  current setting.
4260: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61  .  **.  ** The a
4270: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
4280: 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69   N is used.  Thi
4290: 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
42a0: 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a  d and might.  **
42b0: 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e   change.  The on
42c0: 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f  ly purpose is to
42d0: 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79   provide an easy
42e0: 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a   way to test.  *
42f0: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73  * the sqlite3Abs
4300: 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e  Int32() function
4310: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  **.  **  PRA
4320: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67  GMA [schema.]pag
4330: 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a  e_count.  **.  *
4340: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
4350: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
4360: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61  the specified da
4370: 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63  tabase..  */.  c
4380: 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47 45  ase PragTyp_PAGE
4390: 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e  _COUNT: {.    in
43a0: 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71 6c 69  t iReg;.    sqli
43b0: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
43c0: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
43d0: 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b 70  ;.    iReg = ++p
43e0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  Parse->nMem;.   
43f0: 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f   if( sqlite3Tolo
4400: 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27  wer(zLeft[0])=='
4410: 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  p' ){.      sqli
4420: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
4430: 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69   OP_Pagecount, i
4440: 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20 7d  Db, iReg);.    }
4450: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
4460: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
4470: 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44   OP_MaxPgcnt, iD
4480: 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20 20  b, iReg, .      
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44a0: 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33    sqlite3AbsInt3
44b0: 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52  2(sqlite3Atoi(zR
44c0: 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20  ight)));.    }. 
44d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
44e0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
44f0: 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a  tRow, iReg, 1);.
4500: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
4510: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
4520: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4530: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
4540: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a   COLNAME_NAME, z
4550: 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41  Left, SQLITE_TRA
4560: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62 72 65  NSIENT);.    bre
4570: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
4580: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
4590: 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  ma.]locking_mode
45a0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
45b0: 63 68 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d  chema.]locking_m
45c0: 6f 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78  ode = (normal|ex
45d0: 63 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20  clusive).  */.  
45e0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43  case PragTyp_LOC
45f0: 4b 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20  KING_MODE: {.   
4600: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65   const char *zRe
4610: 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20  t = "normal";.  
4620: 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65    int eMode = ge
4630: 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69  tLockingMode(zRi
4640: 67 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70  ght);..    if( p
4650: 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f  Id2->n==0 && eMo
4660: 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  de==PAGER_LOCKIN
4670: 47 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20  GMODE_QUERY ){. 
4680: 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22       /* Simple "
4690: 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d  PRAGMA locking_m
46a0: 6f 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e  ode;" statement.
46b0: 20 54 68 69 73 20 69 73 20 61 20 71 75 65 72 79   This is a query
46c0: 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68   for.      ** th
46d0: 65 20 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c  e current defaul
46e0: 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28  t locking mode (
46f0: 77 68 69 63 68 20 6d 61 79 20 62 65 20 64 69 66  which may be dif
4700: 66 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20  ferent to.      
4710: 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d  ** the locking-m
4720: 6f 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20  ode of the main 
4730: 64 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20  database)..     
4740: 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20   */.      eMode 
4750: 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f  = db->dfltLockMo
4760: 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  de;.    }else{. 
4770: 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67       Pager *pPag
4780: 65 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49  er;.      if( pI
4790: 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  d2->n==0 ){.    
47a0: 20 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69      /* This indi
47b0: 63 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61  cates that no da
47c0: 74 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20  tabase name was 
47d0: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
47e0: 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20  t.        ** of 
47f0: 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61  the PRAGMA comma
4800: 6e 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  nd. In this case
4810: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64   the locking-mod
4820: 65 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20  e must be.      
4830: 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20    ** set on all 
4840: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
4850: 65 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74  es, as well as t
4860: 68 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e  he main db file.
4870: 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  .        **.    
4880: 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65      ** Also, the
4890: 20 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63   sqlite3.dfltLoc
48a0: 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69  kMode variable i
48b0: 73 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20  s set so that.  
48c0: 20 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62        ** any sub
48d0: 73 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68  sequently attach
48e0: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6c 73  ed databases als
48f0: 6f 20 75 73 65 20 74 68 65 20 73 70 65 63 69 66  o use the specif
4900: 69 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c  ied.        ** l
4910: 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20  ocking mode..   
4920: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
4930: 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20  int ii;.        
4940: 61 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d  assert(pDb==&db-
4950: 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20  >aDb[0]);.      
4960: 20 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64    for(ii=2; ii<d
4970: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
4980: 20 20 20 20 20 20 20 20 20 70 50 61 67 65 72 20           pPager 
4990: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
49a0: 67 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ger(db->aDb[ii].
49b0: 70 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  pBt);.          
49c0: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
49d0: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
49e0: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20  eMode);.        
49f0: 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66  }.        db->df
4a00: 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38  ltLockMode = (u8
4a10: 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a  )eMode;.      }.
4a20: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
4a30: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
4a40: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
4a50: 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65    eMode = sqlite
4a60: 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64  3PagerLockingMod
4a70: 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29  e(pPager, eMode)
4a80: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73  ;.    }..    ass
4a90: 65 72 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45  ert( eMode==PAGE
4aa0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
4ab0: 52 4d 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  RMAL.           
4ac0: 20 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52   || eMode==PAGER
4ad0: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43  _LOCKINGMODE_EXC
4ae0: 4c 55 53 49 56 45 20 29 3b 0a 20 20 20 20 69 66  LUSIVE );.    if
4af0: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
4b00: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55  OCKINGMODE_EXCLU
4b10: 53 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52  SIVE ){.      zR
4b20: 65 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22  et = "exclusive"
4b30: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
4b40: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
4b50: 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20  "locking_mode", 
4b60: 7a 52 65 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  zRet);.    break
4b70: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
4b80: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4b90: 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20  .]journal_mode. 
4ba0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
4bb0: 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ema.]journal_mod
4bc0: 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  e =.  **        
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
4be0: 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66  elete|persist|of
4bf0: 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72  f|truncate|memor
4c00: 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a  y|wal|off).  */.
4c10: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
4c20: 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20  OURNAL_MODE: {. 
4c30: 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20     int eMode;   
4c40: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
4c50: 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  he PAGER_JOURNAL
4c60: 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73  MODE_XXX symbols
4c70: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20   */.    int ii; 
4c80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
4c90: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20  p counter */..  
4ca0: 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61    setOneColumnNa
4cb0: 6d 65 28 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d  me(v, "journal_m
4cc0: 6f 64 65 22 29 3b 0a 20 20 20 20 69 66 28 20 7a  ode");.    if( z
4cd0: 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Right==0 ){.    
4ce0: 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
4cf0: 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74   no "=MODE" part
4d00: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20   of the pragma, 
4d10: 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72 20 74  do a query for t
4d20: 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  he.      ** curr
4d30: 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20  ent mode */.    
4d40: 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f    eMode = PAGER_
4d50: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
4d60: 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
4d70: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
4d80: 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74  zMode;.      int
4d90: 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c   n = sqlite3Strl
4da0: 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20  en30(zRight);.  
4db0: 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b      for(eMode=0;
4dc0: 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65   (zMode = sqlite
4dd0: 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
4de0: 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f  (eMode))!=0; eMo
4df0: 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  de++){.        i
4e00: 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
4e10: 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65  mp(zRight, zMode
4e20: 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  , n)==0 ) break;
4e30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
4e40: 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20  f( !zMode ){.   
4e50: 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22       /* If the "
4e60: 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73  =MODE" part does
4e70: 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b   not match any k
4e80: 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  nown journal mod
4e90: 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  e,.        ** th
4ea0: 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f  en do a query */
4eb0: 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
4ec0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
4ed0: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20  DE_QUERY;.      
4ee0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4ef0: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55  eMode==PAGER_JOU
4f00: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26  RNALMODE_QUERY &
4f10: 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a  & pId2->n==0 ){.
4f20: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
4f30: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
4f40: 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41  _mode" into "PRA
4f50: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
4f60: 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20  _mode" */.      
4f70: 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  iDb = 0;.      p
4f80: 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20  Id2->n = 1;.    
4f90: 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d  }.    for(ii=db-
4fa0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
4fb0: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i--){.      if( 
4fc0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20  db->aDb[ii].pBt 
4fd0: 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70  && (ii==iDb || p
4fe0: 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20  Id2->n==0) ){.  
4ff0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5000: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 69  eUsesBtree(v, ii
5010: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5020: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
5030: 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20  OP_JournalMode, 
5040: 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20  ii, 1, eMode);. 
5050: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
5060: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5070: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
5080: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62  ow, 1, 1);.    b
5090: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
50a0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
50b0: 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69  hema.]journal_si
50c0: 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50  ze_limit.  **  P
50d0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a  RAGMA [schema.]j
50e0: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
50f0: 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65  t=N.  **.  ** Ge
5100: 74 20 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a  t or set the siz
5110: 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62  e limit on rollb
5120: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
5130: 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  s..  */.  case P
5140: 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53  ragTyp_JOURNAL_S
5150: 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20  IZE_LIMIT: {.   
5160: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
5170: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
5180: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
5190: 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d    i64 iLimit = -
51a0: 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  2;.    if( zRigh
51b0: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
51c0: 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
51d0: 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29  zRight, &iLimit)
51e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d  ;.      if( iLim
51f0: 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d  it<-1 ) iLimit =
5200: 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   -1;.    }.    i
5210: 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50  Limit = sqlite3P
5220: 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c  agerJournalSizeL
5230: 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69  imit(pPager, iLi
5240: 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  mit);.    return
5250: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6a 6f  SingleInt(v, "jo
5260: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
5270: 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20  ", iLimit);.    
5280: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64  break;.  }..#end
5290: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
52a0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
52b0: 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  */..  /*.  **  P
52c0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
52d0: 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20  uto_vacuum.  ** 
52e0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
52f0: 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20  ]auto_vacuum=N. 
5300: 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20   **.  ** Get or 
5310: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  set the value of
5320: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 27 61   the database 'a
5330: 75 74 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61  uto-vacuum' para
5340: 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20  meter..  ** The 
5350: 76 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a  value is one of:
5360: 20 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20    0 NONE 1 FULL 
5370: 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20  2 INCREMENTAL.  
5380: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5390: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
53a0: 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  M.  case PragTyp
53b0: 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a  _AUTO_VACUUM: {.
53c0: 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d      Btree *pBt =
53d0: 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61   pDb->pBt;.    a
53e0: 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b  ssert( pBt!=0 );
53f0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
5400: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
5410: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 61 75  SingleInt(v, "au
5420: 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69  to_vacuum", sqli
5430: 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56  te3BtreeGetAutoV
5440: 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20  acuum(pBt));.   
5450: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
5460: 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74  t eAuto = getAut
5470: 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b  oVacuum(zRight);
5480: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
5490: 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f  Auto>=0 && eAuto
54a0: 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  <=2 );.      db-
54b0: 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28  >nextAutovac = (
54c0: 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20  u8)eAuto;.      
54d0: 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56  /* Call SetAutoV
54e0: 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69  acuum() to set i
54f0: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e  nitialize the in
5500: 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a  ternal auto and.
5510: 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61        ** incr-va
5520: 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73  cuum flags. This
5530: 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
5540: 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63  case this connec
5550: 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72  tion.      ** cr
5560: 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61  eates the databa
5570: 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69  se file. It is i
5580: 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74  mportant that it
5590: 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20   is created.    
55a0: 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d    ** as an auto-
55b0: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
55c0: 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  b..      */.    
55d0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
55e0: 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d  reeSetAutoVacuum
55f0: 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20  (pBt, eAuto);.  
5600: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
5610: 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d  TE_OK && (eAuto=
5620: 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20  =1 || eAuto==2) 
5630: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ){.        /* Wh
5640: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61  en setting the a
5650: 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto_vacuum mode 
5660: 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22  to either "full"
5670: 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   or .        ** 
5680: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77  "incremental", w
5690: 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f  rite the value o
56a0: 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65  f meta[6] in the
56b0: 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
56c0: 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72    ** file. Befor
56d0: 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74  e writing to met
56e0: 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74  a[6], check that
56f0: 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74   meta[3] indicat
5700: 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  es.        ** th
5710: 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69  at this really i
5720: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
5730: 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73   capable databas
5740: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
5750: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
5760: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
5770: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
5780: 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74  2);.        stat
5790: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
57a0: 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d  ist setMeta6[] =
57b0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f   {.          { O
57c0: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
57d0: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57f0: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
5800: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
5810: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c  adCookie,     0,
5820: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5830: 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53      BTREE_LARGES
5840: 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20  T_ROOT_PAGE},.  
5850: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
5860: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
5870: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
5880: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5890: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
58a0: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
58b0: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
58c0: 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20  OK, OE_Abort,   
58d0: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
58e0: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
58f0: 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20  { OP_SetCookie, 
5900: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
5910: 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55  BTREE_INCR_VACUU
5920: 4d 2c 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a  M, 0},    /* 4 *
5930: 2f 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20  /.        };.   
5940: 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70       VdbeOp *aOp
5950: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 41  ;.        int iA
5960: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
5970: 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b  eCurrentAddr(v);
5980: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5990: 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c  VdbeVerifyNoMall
59a0: 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41 72  ocRequired(v, Ar
59b0: 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36  raySize(setMeta6
59c0: 29 29 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 20  ));.        aOp 
59d0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
59e0: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
59f0: 69 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73  ize(setMeta6), s
5a00: 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20  etMeta6, iLn);. 
5a10: 20 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f         if( ONLY_
5a20: 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  IF_REALLOC_STRES
5a30: 53 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61  S(aOp==0) ) brea
5a40: 6b 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30  k;.        aOp[0
5a50: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
5a60: 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20      aOp[1].p1 = 
5a70: 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61 4f 70  iDb;.        aOp
5a80: 5b 32 5d 2e 70 32 20 3d 20 69 41 64 64 72 2b 34  [2].p2 = iAddr+4
5a90: 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 34 5d  ;.        aOp[4]
5aa0: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
5ab0: 20 20 20 61 4f 70 5b 34 5d 2e 70 33 20 3d 20 65     aOp[4].p3 = e
5ac0: 41 75 74 6f 20 2d 20 31 3b 0a 20 20 20 20 20 20  Auto - 1;.      
5ad0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
5ae0: 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
5af0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
5b00: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
5b10: 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  dif..  /*.  **  
5b20: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
5b30: 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75  incremental_vacu
5b40: 75 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  um(N).  **.  ** 
5b50: 44 6f 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e  Do N steps of in
5b60: 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d  cremental vacuum
5b70: 69 6e 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73  ing on a databas
5b80: 65 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  e..  */.#ifndef 
5b90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
5ba0: 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72  VACUUM.  case Pr
5bb0: 61 67 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41  agTyp_INCREMENTA
5bc0: 4c 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20  L_VACUUM: {.    
5bd0: 69 6e 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72  int iLimit, addr
5be0: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
5bf0: 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47  ==0 || !sqlite3G
5c00: 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20  etInt32(zRight, 
5c10: 26 69 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d  &iLimit) || iLim
5c20: 69 74 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  it<=0 ){.      i
5c30: 4c 69 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66  Limit = 0x7fffff
5c40: 66 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ff;.    }.    sq
5c50: 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
5c60: 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c  peration(pParse,
5c70: 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71   0, iDb);.    sq
5c80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
5c90: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
5ca0: 4c 69 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61  Limit, 1);.    a
5cb0: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
5cc0: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e  eAddOp1(v, OP_In
5cd0: 63 72 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20  crVacuum, iDb); 
5ce0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
5cf0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5d00: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73  AddOp1(v, OP_Res
5d10: 75 6c 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20  ultRow, 1);.    
5d20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5d30: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
5d40: 31 2c 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69  1, -1);.    sqli
5d50: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
5d60: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64   OP_IfPos, 1, ad
5d70: 64 72 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  dr); VdbeCoverag
5d80: 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  e(v);.    sqlite
5d90: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
5da0: 20 61 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61   addr);.    brea
5db0: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
5dc0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5dd0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
5de0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
5df0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68  MA [schema.]cach
5e00: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
5e10: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63  GMA [schema.]cac
5e20: 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  he_size=N.  **. 
5e30: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
5e40: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
5e50: 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74  urrent local set
5e60: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
5e70: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
5e80: 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  e. The second fo
5e90: 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61  rm sets the loca
5ea0: 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68  l.  ** page cach
5eb0: 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49  e size value.  I
5ec0: 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20  f N is positive 
5ed0: 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65  then that is the
5ee0: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
5ef0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63  pages in the cac
5f00: 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  he.  If N is neg
5f10: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a  ative, then the.
5f20: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
5f30: 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64  ages is adjusted
5f40: 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63   so that the cac
5f50: 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62  he uses -N kibib
5f60: 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d  ytes.  ** of mem
5f70: 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ory..  */.  case
5f80: 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53   PragTyp_CACHE_S
5f90: 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72  IZE: {.    asser
5fa0: 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
5fb0: 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
5fc0: 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
5fd0: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
5fe0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
5ff0: 74 28 76 2c 20 22 63 61 63 68 65 5f 73 69 7a 65  t(v, "cache_size
6000: 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  ", pDb->pSchema-
6010: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
6020: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
6030: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
6040: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
6050: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
6060: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
6070: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
6080: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
6090: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
60a0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
60b0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
60c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
60d0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
60e0: 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65  A [schema.]cache
60f0: 5f 73 70 69 6c 6c 0a 20 20 2a 2a 20 20 50 52 41  _spill.  **  PRA
6100: 47 4d 41 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d  GMA cache_spill=
6110: 42 4f 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20 50 52  BOOLEAN.  **  PR
6120: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61  AGMA [schema.]ca
6130: 63 68 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a  che_spill=N.  **
6140: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
6150: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
6160: 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73   current local s
6170: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
6180: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
6190: 70 69 6c 6c 20 73 69 7a 65 2e 20 54 68 65 20 73  pill size. The s
61a0: 65 63 6f 6e 64 20 66 6f 72 6d 20 74 75 72 6e 73  econd form turns
61b0: 20 63 61 63 68 65 20 73 70 69 6c 6c 20 6f 6e 0a   cache spill on.
61c0: 20 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 57 68    ** or off.  Wh
61d0: 65 6e 20 74 75 72 6e 6e 69 6e 67 20 63 61 63 68  en turnning cach
61e0: 65 20 73 70 69 6c 6c 20 6f 6e 2c 20 74 68 65 20  e spill on, the 
61f0: 73 69 7a 65 20 69 73 20 73 65 74 20 74 6f 20 74  size is set to t
6200: 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20  he.  ** current 
6210: 63 61 63 68 65 5f 73 69 7a 65 2e 20 20 54 68 65  cache_size.  The
6220: 20 74 68 69 72 64 20 66 6f 72 6d 20 73 65 74 73   third form sets
6230: 20 61 20 73 70 69 6c 6c 20 73 69 7a 65 20 74 68   a spill size th
6240: 61 74 0a 20 20 2a 2a 20 6d 61 79 20 62 65 20 64  at.  ** may be d
6250: 69 66 66 65 72 65 6e 74 20 66 6f 72 6d 20 74 68  ifferent form th
6260: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 0a 20 20  e cache size..  
6270: 2a 2a 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74  ** If N is posit
6280: 69 76 65 20 74 68 65 6e 20 74 68 61 74 20 69 73  ive then that is
6290: 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72   the.  ** number
62a0: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
62b0: 20 63 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73   cache.  If N is
62c0: 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20   negative, then 
62d0: 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20  the.  ** number 
62e0: 6f 66 20 70 61 67 65 73 20 69 73 20 61 64 6a 75  of pages is adju
62f0: 73 74 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  sted so that the
6300: 20 63 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b   cache uses -N k
6310: 69 62 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66  ibibytes.  ** of
6320: 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20   memory..  **.  
6330: 2a 2a 20 49 66 20 74 68 65 20 6e 75 6d 62 65 72  ** If the number
6340: 20 6f 66 20 63 61 63 68 65 5f 73 70 69 6c 6c 20   of cache_spill 
6350: 70 61 67 65 73 20 69 73 20 6c 65 73 73 20 74 68  pages is less th
6360: 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
6370: 0a 20 20 2a 2a 20 63 61 63 68 65 5f 73 69 7a 65  .  ** cache_size
6380: 20 70 61 67 65 73 2c 20 6e 6f 20 73 70 69 6c 6c   pages, no spill
6390: 69 6e 67 20 6f 63 63 75 72 73 20 75 6e 74 69 6c  ing occurs until
63a0: 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20   the page count 
63b0: 65 78 63 65 65 64 73 0a 20 20 2a 2a 20 74 68 65  exceeds.  ** the
63c0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63 68 65   number of cache
63d0: 5f 73 69 7a 65 20 70 61 67 65 73 2e 0a 20 20 2a  _size pages..  *
63e0: 2a 0a 20 20 2a 2a 20 54 68 65 20 63 61 63 68 65  *.  ** The cache
63f0: 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73  _spill=BOOLEAN s
6400: 65 74 74 69 6e 67 20 61 70 70 6c 69 65 73 20 74  etting applies t
6410: 6f 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 73  o all attached s
6420: 63 68 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74  chemas,.  ** not
6430: 20 6a 75 73 74 20 74 68 65 20 73 63 68 65 6d 61   just the schema
6440: 20 73 70 65 63 69 66 69 65 64 2e 0a 20 20 2a 2f   specified..  */
6450: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
6460: 43 41 43 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20  CACHE_SPILL: {. 
6470: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
6480: 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
6490: 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
64a0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
64b0: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
64c0: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 63 61  SingleInt(v, "ca
64d0: 63 68 65 5f 73 70 69 6c 6c 22 2c 20 0a 20 20 20  che_spill", .   
64e0: 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67 73        (db->flags
64f0: 20 26 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53   & SQLITE_CacheS
6500: 70 69 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a 20 0a  pill)==0 ? 0 : .
6510: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
6520: 74 65 33 42 74 72 65 65 53 65 74 53 70 69 6c 6c  te3BtreeSetSpill
6530: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 30 29  Size(pDb->pBt,0)
6540: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
6550: 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 31      int size = 1
6560: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
6570: 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67  te3GetInt32(zRig
6580: 68 74 2c 20 26 73 69 7a 65 29 20 29 7b 0a 20 20  ht, &size) ){.  
6590: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
65a0: 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28 70  eeSetSpillSize(p
65b0: 44 62 2d 3e 70 42 74 2c 20 73 69 7a 65 29 3b 0a  Db->pBt, size);.
65c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
65d0: 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  ( sqlite3GetBool
65e0: 65 61 6e 28 7a 52 69 67 68 74 2c 20 73 69 7a 65  ean(zRight, size
65f0: 21 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  !=0) ){.        
6600: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
6610: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b 0a  ITE_CacheSpill;.
6620: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
6630: 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26       db->flags &
6640: 3d 20 7e 53 51 4c 49 54 45 5f 43 61 63 68 65 53  = ~SQLITE_CacheS
6650: 70 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  pill;.      }.  
6660: 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46      setAllPagerF
6670: 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a  lags(db);.    }.
6680: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6690: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
66a0: 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f  A [schema.]mmap_
66b0: 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a  size(N).  **.  *
66c0: 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61  * Used to set ma
66d0: 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74  pping size limit
66e0: 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69  . The mapping si
66f0: 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a  ze limit is.  **
6700: 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74   used to limit t
6710: 68 65 20 61 67 67 72 65 67 61 74 65 20 73 69 7a  he aggregate siz
6720: 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20  e of all memory 
6730: 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f  mapped regions o
6740: 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  f the.  ** datab
6750: 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69  ase file. If thi
6760: 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73  s parameter is s
6770: 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e  et to zero, then
6780: 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a   memory mapping.
6790: 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64    ** is not used
67a0: 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69   at all.  If N i
67b0: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e  s negative, then
67c0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d   the default mem
67d0: 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d  ory map.  ** lim
67e0: 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  it determined by
67f0: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
6800: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d  SQLITE_CONFIG_MM
6810: 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e  AP_SIZE) is set.
6820: 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65  .  ** The parame
6830: 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65  ter N is measure
6840: 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a  d in bytes..  **
6850: 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65  .  ** This value
6860: 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54   is advisory.  T
6870: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
6880: 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d  S is free to mem
6890: 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20  ory map.  ** as 
68a0: 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63  little or as muc
68b0: 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20  h as it wants.  
68c0: 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20  Except, if N is 
68d0: 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68  set to 0 then th
68e0: 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79  e.  ** upper lay
68f0: 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69  ers will never i
6900: 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68  nvoke the xFetch
6910: 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74   interfaces to t
6920: 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63  he VFS..  */.  c
6930: 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50  ase PragTyp_MMAP
6940: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c  _SIZE: {.    sql
6950: 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23  ite3_int64 sz;.#
6960: 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  if SQLITE_MAX_MM
6970: 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73  AP_SIZE>0.    as
6980: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
6990: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
69a0: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
69b0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
69c0: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
69d0: 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65    sqlite3DecOrHe
69e0: 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26  xToI64(zRight, &
69f0: 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  sz);.      if( s
6a00: 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69 74  z<0 ) sz = sqlit
6a10: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73  e3GlobalConfig.s
6a20: 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66 28  zMmap;.      if(
6a30: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62   pId2->n==0 ) db
6a40: 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20  ->szMmap = sz;. 
6a50: 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e       for(ii=db->
6a60: 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69  nDb-1; ii>=0; ii
6a70: 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  --){.        if(
6a80: 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74   db->aDb[ii].pBt
6a90: 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20   && (ii==iDb || 
6aa0: 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20  pId2->n==0) ){. 
6ab0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
6ac0: 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69  BtreeSetMmapLimi
6ad0: 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
6ae0: 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20 20  t, sz);.        
6af0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
6b00: 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20      sz = -1;.   
6b10: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
6b20: 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a  le_control(db, z
6b30: 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  Db, SQLITE_FCNTL
6b40: 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29  _MMAP_SIZE, &sz)
6b50: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d  ;.#else.    sz =
6b60: 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   0;.    rc = SQL
6b70: 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20  ITE_OK;.#endif. 
6b80: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
6b90: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
6ba0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
6bb0: 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a   "mmap_size", sz
6bc0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
6bd0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46   rc!=SQLITE_NOTF
6be0: 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20 20 70 50  OUND ){.      pP
6bf0: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
6c00: 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d      pParse->rc =
6c10: 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62   rc;.    }.    b
6c20: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
6c30: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
6c40: 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20  mp_store.  **   
6c50: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6c60: 65 20 3d 20 22 64 65 66 61 75 6c 74 22 7c 22 6d  e = "default"|"m
6c70: 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a 20 20  emory"|"file".  
6c80: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
6c90: 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20  r set the local 
6ca0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d  value of the tem
6cb0: 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e 20 20 43  p_store flag.  C
6cc0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
6cd0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65   local value doe
6ce0: 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67  s not make chang
6cf0: 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66  es to the disk f
6d00: 69 6c 65 20 61 6e 64 20 74 68 65 20 64 65 66 61  ile and the defa
6d10: 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77  ult.  ** value w
6d20: 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20  ill be restored 
6d30: 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68  the next time th
6d40: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 70  e database is op
6d50: 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ened..  **.  ** 
6d60: 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69 73 20  Note that it is 
6d70: 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65  possible for the
6d80: 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c 65   library compile
6d90: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f  -time options to
6da0: 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64 65 20 74  .  ** override t
6db0: 68 69 73 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f  his setting.  */
6dc0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
6dd0: 54 45 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20  TEMP_STORE: {.  
6de0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
6df0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
6e00: 67 6c 65 49 6e 74 28 76 2c 20 22 74 65 6d 70 5f  gleInt(v, "temp_
6e10: 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70  store", db->temp
6e20: 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c  _store);.    }el
6e30: 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65  se{.      change
6e40: 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72  TempStorage(pPar
6e50: 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20  se, zRight);.   
6e60: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
6e70: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  }..  /*.  **   P
6e80: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6e90: 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20  _directory.  ** 
6ea0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6eb0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory = 
6ec0: 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61  ""|"directory_na
6ed0: 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  me".  **.  ** Re
6ee0: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
6ef0: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  local value of t
6f00: 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  he temp_store_di
6f10: 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43  rectory flag.  C
6f20: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
6f30: 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70   value sets a sp
6f40: 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79  ecific directory
6f50: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
6f60: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e  temporary files.
6f70: 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f  .  ** Setting to
6f80: 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72   a null string r
6f90: 65 76 65 72 74 73 20 74 6f 20 74 68 65 20 64 65  everts to the de
6fa0: 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20  fault temporary 
6fb0: 64 69 72 65 63 74 6f 72 79 20 73 65 61 72 63 68  directory search
6fc0: 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72  ..  ** If tempor
6fd0: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 69 73  ary directory is
6fe0: 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69   changed, then i
6ff0: 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f  nvalidateTempSto
7000: 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a  rage..  **.  */.
7010: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54    case PragTyp_T
7020: 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54  EMP_STORE_DIRECT
7030: 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORY: {.    if( !
7040: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
7050: 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74  returnSingleText
7060: 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f  (v, "temp_store_
7070: 64 69 72 65 63 74 6f 72 79 22 2c 20 73 71 6c 69  directory", sqli
7080: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
7090: 72 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ry);.    }else{.
70a0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
70b0: 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66  MIT_WSD.      if
70c0: 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20  ( zRight[0] ){. 
70d0: 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a         int res;.
70e0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
70f0: 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d  ite3OsAccess(db-
7100: 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53  >pVfs, zRight, S
7110: 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41  QLITE_ACCESS_REA
7120: 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20  DWRITE, &res);. 
7130: 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
7140: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d  QLITE_OK || res=
7150: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
7160: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
7170: 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77  pParse, "not a w
7180: 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72  ritable director
7190: 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67  y");.          g
71a0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
71b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
71c0: 7d 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49  }.      if( SQLI
71d0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30  TE_TEMP_STORE==0
71e0: 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49  .       || (SQLI
71f0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31  TE_TEMP_STORE==1
7200: 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f   && db->temp_sto
7210: 72 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c  re<=1).       ||
7220: 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54   (SQLITE_TEMP_ST
7230: 4f 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65  ORE==2 && db->te
7240: 6d 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20  mp_store==1).   
7250: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e     ){.        in
7260: 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72  validateTempStor
7270: 61 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  age(pParse);.   
7280: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
7290: 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f  e3_free(sqlite3_
72a0: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b  temp_directory);
72b0: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
72c0: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
72d0: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
72e0: 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33  ectory = sqlite3
72f0: 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a  _mprintf("%s", z
7300: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65  Right);.      }e
7310: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
7320: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
7330: 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ory = 0;.      }
7340: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7350: 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20  E_OMIT_WSD */.  
7360: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
7370: 20 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f   }..#if SQLITE_O
7380: 53 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20  S_WIN.  /*.  ** 
7390: 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74    PRAGMA data_st
73a0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20  ore_directory.  
73b0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61  **   PRAGMA data
73c0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
73d0: 20 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79   = ""|"directory
73e0: 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  _name".  **.  **
73f0: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
7400: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
7410: 66 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65  f the data_store
7420: 5f 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e  _directory flag.
7430: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
7440: 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61  the value sets a
7450: 20 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74   specific direct
7460: 6f 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66  ory to be used f
7470: 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  or database file
7480: 73 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65  s that.  ** were
7490: 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20   specified with 
74a0: 61 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e  a relative pathn
74b0: 61 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f  ame.  Setting to
74c0: 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72   a null string r
74d0: 65 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74  everts.  ** to t
74e0: 68 65 20 64 65 66 61 75 6c 74 20 64 61 74 61 62  he default datab
74f0: 61 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77  ase directory, w
7500: 68 69 63 68 20 66 6f 72 20 64 61 74 61 62 61 73  hich for databas
7510: 65 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65  e files specifie
7520: 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65  d with.  ** a re
7530: 6c 61 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c  lative path will
7540: 20 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73   probably be bas
7550: 65 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e  ed on the curren
7560: 74 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20  t directory for 
7570: 74 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73  the.  ** process
7580: 2e 20 20 44 61 74 61 62 61 73 65 20 66 69 6c 65  .  Database file
7590: 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20   specified with 
75a0: 61 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68  an absolute path
75b0: 20 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65   are not impacte
75c0: 64 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73  d.  ** by this s
75d0: 65 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65  etting, regardle
75e0: 73 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e  ss of its value.
75f0: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
7600: 65 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53  e PragTyp_DATA_S
7610: 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20  TORE_DIRECTORY: 
7620: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
7630: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
7640: 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22  nSingleText(v, "
7650: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
7660: 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f 64  tory", sqlite3_d
7670: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  ata_directory);.
7680: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
7690: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
76a0: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
76b0: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
76c0: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
76d0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
76e0: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
76f0: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
7700: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
7710: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
7720: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
7730: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
7740: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
7750: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
7760: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
7770: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
7780: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
7790: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
77a0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
77b0: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
77c0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
77d0: 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69  ectory);.      i
77e0: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
77f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
7800: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d  data_directory =
7810: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
7820: 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a  ("%s", zRight);.
7830: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
7840: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74       sqlite3_dat
7850: 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b  a_directory = 0;
7860: 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  .      }.#endif 
7870: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  /* SQLITE_OMIT_W
7880: 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  SD */.    }.    
7890: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
78a0: 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e  f..#if SQLITE_EN
78b0: 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59  ABLE_LOCKING_STY
78c0: 4c 45 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  LE.  /*.  **   P
78d0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c  RAGMA [schema.]l
78e0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20  ock_proxy_file. 
78f0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
7900: 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  hema.]lock_proxy
7910: 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22  _file = ":auto:"
7920: 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68  |"lock_file_path
7930: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
7940: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  rn or set the va
7950: 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f  lue of the lock_
7960: 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e  proxy_file flag.
7970: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
7980: 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61  the value sets a
7990: 20 73 70 65 63 69 66 69 63 20 66 69 6c 65 20 74   specific file t
79a0: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
79b0: 74 61 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f  tabase access lo
79c0: 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  cks..  **.  */. 
79d0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
79e0: 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b  CK_PROXY_FILE: {
79f0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
7a00: 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20   ){.      Pager 
7a10: 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
7a20: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
7a30: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61  >pBt);.      cha
7a40: 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61  r *proxy_file_pa
7a50: 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  th = NULL;.     
7a60: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70   sqlite3_file *p
7a70: 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61  File = sqlite3Pa
7a80: 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b  gerFile(pPager);
7a90: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73  .      sqlite3Os
7aa0: 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28  FileControlHint(
7ab0: 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45  pFile, SQLITE_GE
7ac0: 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c  T_LOCKPROXYFILE,
7ad0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70 72               &pr
7af0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a  oxy_file_path);.
7b00: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
7b10: 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f 63 6b 5f  leText(v, "lock_
7b20: 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 70 72 6f  proxy_file", pro
7b30: 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20  xy_file_path);. 
7b40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7b50: 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20  Pager *pPager = 
7b60: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
7b70: 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  r(pDb->pBt);.   
7b80: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20     sqlite3_file 
7b90: 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33  *pFile = sqlite3
7ba0: 50 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72  PagerFile(pPager
7bb0: 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73  );.      int res
7bc0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  ;.      if( zRig
7bd0: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
7be0: 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69   res=sqlite3OsFi
7bf0: 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c  leControl(pFile,
7c00: 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b   SQLITE_SET_LOCK
7c10: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20   zRight);.      
7c50: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
7c60: 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69   res=sqlite3OsFi
7c70: 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c  leControl(pFile,
7c80: 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b   SQLITE_SET_LOCK
7c90: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cc0: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a   NULL);.      }.
7cd0: 20 20 20 20 20 20 69 66 28 20 72 65 73 21 3d 53        if( res!=S
7ce0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
7cf0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
7d00: 4d 73 67 28 70 50 61 72 73 65 2c 20 22 66 61 69  Msg(pParse, "fai
7d10: 6c 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20  led to set lock 
7d20: 70 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20  proxy file");.  
7d30: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
7d40: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  a_out;.      }. 
7d50: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
7d60: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
7d70: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b  LITE_ENABLE_LOCK
7d80: 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20  ING_STYLE */    
7d90: 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a    .    .  /*.  *
7da0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
7db0: 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a  ma.]synchronous.
7dc0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
7dd0: 63 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f  chema.]synchrono
7de0: 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c  us=OFF|ON|NORMAL
7df0: 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20  |FULL.  **.  ** 
7e00: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
7e10: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
7e20: 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73   the synchronous
7e30: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
7e40: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
7e50: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
7e60: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
7e70: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
7e80: 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
7e90: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  t value will be 
7ea0: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
7eb0: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
7ec0: 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e  ase is.  ** open
7ed0: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
7ee0: 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e  PragTyp_SYNCHRON
7ef0: 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  OUS: {.    if( !
7f00: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
7f10: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
7f20: 76 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22  v, "synchronous"
7f30: 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65  , pDb->safety_le
7f40: 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73  vel-1);.    }els
7f50: 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 64 62  e{.      if( !db
7f60: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
7f70: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
7f80: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
7f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53 61  .            "Sa
7fa0: 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e  fety level may n
7fb0: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e  ot be changed in
7fc0: 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74 69  side a transacti
7fd0: 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  on");.      }els
7fe0: 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  e{.        int i
7ff0: 4c 65 76 65 6c 20 3d 20 28 67 65 74 53 61 66 65  Level = (getSafe
8000: 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c 30  tyLevel(zRight,0
8010: 2c 31 29 2b 31 29 20 26 20 50 41 47 45 52 5f 53  ,1)+1) & PAGER_S
8020: 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 3b  YNCHRONOUS_MASK;
8030: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4c 65  .        if( iLe
8040: 76 65 6c 3d 3d 30 20 29 20 69 4c 65 76 65 6c 20  vel==0 ) iLevel 
8050: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 44 62  = 1;.        pDb
8060: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
8070: 20 69 4c 65 76 65 6c 3b 0a 20 20 20 20 20 20 20   iLevel;.       
8080: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
8090: 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  s(db);.      }. 
80a0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
80b0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
80c0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
80d0: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
80e0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
80f0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20 20 63  FLAG_PRAGMAS.  c
8100: 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c 41 47  ase PragTyp_FLAG
8110: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
8120: 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ht==0 ){.      r
8130: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
8140: 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65  , pPragma->zName
8150: 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 70  , (db->flags & p
8160: 50 72 61 67 6d 61 2d 3e 69 41 72 67 29 21 3d 30  Pragma->iArg)!=0
8170: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
8180: 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20       int mask = 
8190: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20  pPragma->iArg;  
81a0: 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74    /* Mask of bit
81b0: 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65 61  s to set or clea
81c0: 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
81d0: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
81e0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
81f0: 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70  Foreign key supp
8200: 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 65  ort may not be e
8210: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
8220: 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20  ed while not.   
8230: 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d       ** in auto-
8240: 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f  commit mode.  */
8250: 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d  .        mask &=
8260: 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69 67   ~(SQLITE_Foreig
8270: 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a  nKeys);.      }.
8280: 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  #if SQLITE_USER_
8290: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
82a0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
82b0: 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55 41 55  h.authLevel==UAU
82c0: 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20 20 20  TH_User ){.     
82d0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c     /* Do not all
82e0: 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73 65  ow non-admin use
82f0: 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  rs to modify the
8300: 20 73 63 68 65 6d 61 20 61 72 62 69 74 72 61 72   schema arbitrar
8310: 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  ily */.        m
8320: 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f  ask &= ~(SQLITE_
8330: 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a 20 20  WriteSchema);.  
8340: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
8350: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
8360: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
8370: 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , 0) ){.        
8380: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73  db->flags |= mas
8390: 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  k;.      }else{.
83a0: 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
83b0: 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20  s &= ~mask;.    
83c0: 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51      if( mask==SQ
83d0: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20  LITE_DeferFKs ) 
83e0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
83f0: 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  Cons = 0;.      
8400: 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79  }..      /* Many
8410: 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61   of the flag-pra
8420: 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20  gmas modify the 
8430: 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 62  code generated b
8440: 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20  y the SQL .     
8450: 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67   ** compiler (eg
8460: 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29  . count_changes)
8470: 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f  . So add an opco
8480: 64 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c  de to expire all
8490: 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c  .      ** compil
84a0: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
84b0: 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e  s after modifyin
84c0: 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65  g a pragma value
84d0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
84e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
84f0: 70 32 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c  p2(v, OP_Expire,
8500: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 65   0, 0);.      se
8510: 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64  tAllPagerFlags(d
8520: 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  b);.    }.    br
8530: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
8540: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  /* SQLITE_OMIT_F
8550: 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  LAG_PRAGMAS */..
8560: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8570: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
8580: 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AS.  /*.  **   P
8590: 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f  RAGMA table_info
85a0: 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20  (<table>).  **. 
85b0: 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 69 6e   ** Return a sin
85c0: 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68  gle row for each
85d0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e   column of the n
85e0: 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68 65 20  amed table. The 
85f0: 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20  columns of.  ** 
8600: 74 68 65 20 72 65 74 75 72 6e 65 64 20 64 61 74  the returned dat
8610: 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a  a set are:.  **.
8620: 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20 20 20    ** cid:       
8630: 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62   Column id (numb
8640: 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  ered from left t
8650: 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74 69 6e  o right, startin
8660: 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d  g at 0).  ** nam
8670: 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  e:       Column 
8680: 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20  name.  ** type: 
8690: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63        Column dec
86a0: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20  laration type.. 
86b0: 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20   ** notnull:    
86c0: 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c  True if 'NOT NUL
86d0: 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20 63 6f  L' is part of co
86e0: 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  lumn declaration
86f0: 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65  .  ** dflt_value
8700: 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  : The default va
8710: 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  lue for the colu
8720: 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f  mn, if any..  */
8730: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
8740: 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20  TABLE_INFO: if( 
8750: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 54 61  zRight ){.    Ta
8760: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
8770: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
8780: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
8790: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
87a0: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73   pTab ){.      s
87b0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
87c0: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20   *azCol[] = {.  
87d0: 20 20 20 20 20 20 20 22 63 69 64 22 2c 20 22 6e         "cid", "n
87e0: 61 6d 65 22 2c 20 22 74 79 70 65 22 2c 20 22 6e  ame", "type", "n
87f0: 6f 74 6e 75 6c 6c 22 2c 20 22 64 66 6c 74 5f 76  otnull", "dflt_v
8800: 61 6c 75 65 22 2c 20 22 70 6b 22 0a 20 20 20 20  alue", "pk".    
8810: 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 69    };.      int i
8820: 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  , k;.      int n
8830: 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20  Hidden = 0;.    
8840: 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a    Column *pCol;.
8850: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b        Index *pPk
8860: 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72   = sqlite3Primar
8870: 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b  yKeyIndex(pTab);
8880: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
8890: 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73  Mem = 6;.      s
88a0: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
88b0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
88c0: 44 62 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c  Db);.      setAl
88d0: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
88e0: 36 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  6, azCol); asser
88f0: 74 28 20 36 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 6==ArraySize(
8900: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20  azCol) );.      
8910: 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
8920: 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65  lumnNames(pParse
8930: 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66  , pTab);.      f
8940: 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61  or(i=0, pCol=pTa
8950: 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d  b->aCol; i<pTab-
8960: 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c  >nCol; i++, pCol
8970: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
8980: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
8990: 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20  pCol) ){.       
89a0: 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20     nHidden++;.  
89b0: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
89c0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
89d0: 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63      if( (pCol->c
89e0: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
89f0: 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b  G_PRIMKEY)==0 ){
8a00: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
8a10: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
8a20: 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20  if( pPk==0 ){.  
8a30: 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20          k = 1;. 
8a40: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
8a50: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b          for(k=1;
8a60: 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20 26   k<=pTab->nCol &
8a70: 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b  & pPk->aiColumn[
8a80: 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a  k-1]!=i; k++){}.
8a90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8aa0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
8ab0: 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73  tiLoad(v, 1, "is
8ac0: 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20  sisi",.         
8ad0: 20 20 20 20 20 20 69 2d 6e 48 69 64 64 65 6e 2c        i-nHidden,
8ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8af0: 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pCol->zName,.   
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c              pCol
8b10: 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e  ->zType ? pCol->
8b20: 7a 54 79 70 65 20 3a 20 22 22 2c 0a 20 20 20 20  zType : "",.    
8b30: 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d             pCol-
8b40: 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30  >notNull ? 1 : 0
8b50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8b60: 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 0a 20 20   pCol->zDflt,.  
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 29 3b               k);
8b80: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8b90: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8ba0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36  _ResultRow, 1, 6
8bb0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8bc0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
8bd0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 54   case PragTyp_ST
8be0: 41 54 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  ATS: {.    stati
8bf0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
8c00: 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65  Col[] = { "table
8c10: 22 2c 20 22 69 6e 64 65 78 22 2c 20 22 77 69 64  ", "index", "wid
8c20: 74 68 22 2c 20 22 68 65 69 67 68 74 22 20 7d 3b  th", "height" };
8c30: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
8c40: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
8c50: 69 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  i;.    v = sqlit
8c60: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
8c70: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
8c80: 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c  Mem = 4;.    sql
8c90: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8ca0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
8cb0: 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  );.    setAllCol
8cc0: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61  umnNames(v, 4, a
8cd0: 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20  zCol);  assert( 
8ce0: 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  4==ArraySize(azC
8cf0: 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 69  ol) );.    for(i
8d00: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
8d10: 28 26 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  (&pDb->pSchema->
8d20: 74 62 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73  tblHash); i; i=s
8d30: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
8d40: 29 7b 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a  ){.      Table *
8d50: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
8d60: 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20  hData(i);.      
8d70: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
8d80: 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 73 69 69  Load(v, 1, "ssii
8d90: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 54  ",.           pT
8da0: 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ab->zName,.     
8db0: 20 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20 20        0,.       
8dc0: 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33      (int)sqlite3
8dd0: 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61 62  LogEstToInt(pTab
8de0: 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 0a 20 20 20  ->szTabRow),.   
8df0: 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c          (int)sql
8e00: 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
8e10: 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74  pTab->nRowLogEst
8e20: 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
8e30: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8e40: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
8e50: 34 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49  4);.      for(pI
8e60: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
8e70: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
8e80: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
8e90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
8ea0: 74 69 4c 6f 61 64 28 76 2c 20 32 2c 20 22 73 69  tiLoad(v, 2, "si
8eb0: 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70  i",.           p
8ec0: 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Idx->zName,.    
8ed0: 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69         (int)sqli
8ee0: 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70  te3LogEstToInt(p
8ef0: 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29 2c 0a  Idx->szIdxRow),.
8f00: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
8f10: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
8f20: 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f 77 4c 6f  nt(pIdx->aiRowLo
8f30: 67 45 73 74 5b 30 5d 29 29 3b 0a 20 20 20 20 20  gEst[0]));.     
8f40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8f50: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
8f60: 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20  tRow, 1, 4);.   
8f70: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
8f80: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
8f90: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e  PragTyp_INDEX_IN
8fa0: 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  FO: if( zRight )
8fb0: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
8fc0: 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  x;.    Table *pT
8fd0: 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d 20 73  ab;.    pIdx = s
8fe0: 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
8ff0: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
9000: 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 20 29  ;.    if( pIdx )
9010: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
9020: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
9030: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20  [] = {.         
9040: 22 73 65 71 6e 6f 22 2c 20 22 63 69 64 22 2c 20  "seqno", "cid", 
9050: 22 6e 61 6d 65 22 2c 20 22 64 65 73 63 22 2c 20  "name", "desc", 
9060: 22 63 6f 6c 6c 22 2c 20 22 6b 65 79 22 0a 20 20  "coll", "key".  
9070: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
9080: 20 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78   i;.      int mx
9090: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 72 61  ;.      if( pPra
90a0: 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20  gma->iArg ){.   
90b0: 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69       /* PRAGMA i
90c0: 6e 64 65 78 5f 78 69 6e 66 6f 20 28 6e 65 77 65  ndex_xinfo (newe
90d0: 72 20 76 65 72 73 69 6f 6e 20 77 69 74 68 20 6d  r version with m
90e0: 6f 72 65 20 72 6f 77 73 20 61 6e 64 20 63 6f 6c  ore rows and col
90f0: 75 6d 6e 73 29 20 2a 2f 0a 20 20 20 20 20 20 20  umns) */.       
9100: 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c   mx = pIdx->nCol
9110: 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20 70 50 61  umn;.        pPa
9120: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
9130: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
9140: 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e      /* PRAGMA in
9150: 64 65 78 5f 69 6e 66 6f 20 28 6c 65 67 61 63 79  dex_info (legacy
9160: 20 76 65 72 73 69 6f 6e 29 20 2a 2f 0a 20 20 20   version) */.   
9170: 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e       mx = pIdx->
9180: 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20 20 20  nKeyCol;.       
9190: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
91a0: 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  3;.      }.     
91b0: 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54   pTab = pIdx->pT
91c0: 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  able;.      sqli
91d0: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
91e0: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
91f0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
9200: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3c 3d 41 72  pParse->nMem<=Ar
9210: 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
9220: 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f  ;.      setAllCo
9230: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 70 50 61  lumnNames(v, pPa
9240: 72 73 65 2d 3e 6e 4d 65 6d 2c 20 61 7a 43 6f 6c  rse->nMem, azCol
9250: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
9260: 3b 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20  ; i<mx; i++){.  
9270: 20 20 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d        i16 cnum =
9280: 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b   pIdx->aiColumn[
9290: 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  i];.        sqli
92a0: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
92b0: 28 76 2c 20 31 2c 20 22 69 69 73 22 2c 20 69 2c  (v, 1, "iis", i,
92c0: 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20 20 20   cnum,.         
92d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92e0: 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30 20 3a      cnum<0 ? 0 :
92f0: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d   pTab->aCol[cnum
9300: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
9310: 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69    if( pPragma->i
9320: 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Arg ){.         
9330: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9340: 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69 73 69  iLoad(v, 4, "isi
9350: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ",.            p
9360: 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  Idx->aSortOrder[
9370: 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  i],.            
9380: 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d 2c  pIdx->azColl[i],
9390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 3c 70  .            i<p
93a0: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 0a 20  Idx->nKeyCol);. 
93b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
93c0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
93d0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
93e0: 6f 77 2c 20 31 2c 20 70 50 61 72 73 65 2d 3e 6e  ow, 1, pParse->n
93f0: 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mem);.      }.  
9400: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
9410: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
9420: 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66 28  _INDEX_LIST: if(
9430: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49   zRight ){.    I
9440: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
9450: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
9460: 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61 62   int i;.    pTab
9470: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
9480: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
9490: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
94a0: 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  ab ){.      stat
94b0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
94c0: 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  zCol[] = {.     
94d0: 20 20 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22     "seq", "name"
94e0: 2c 20 22 75 6e 69 71 75 65 22 2c 20 22 6f 72 69  , "unique", "ori
94f0: 67 69 6e 22 2c 20 22 70 61 72 74 69 61 6c 22 0a  gin", "partial".
9500: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 76        };.      v
9510: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
9520: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
9530: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9540: 35 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  5;.      sqlite3
9550: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
9560: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
9570: 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d       setAllColum
9580: 6e 4e 61 6d 65 73 28 76 2c 20 35 2c 20 61 7a 43  nNames(v, 5, azC
9590: 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20 35 3d  ol);  assert( 5=
95a0: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
95b0: 29 20 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70  ) );.      for(p
95c0: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
95d0: 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70 49 64  , i=0; pIdx; pId
95e0: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69  x=pIdx->pNext, i
95f0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e  ++){.        con
9600: 73 74 20 63 68 61 72 20 2a 61 7a 4f 72 69 67 69  st char *azOrigi
9610: 6e 5b 5d 20 3d 20 7b 20 22 63 22 2c 20 22 75 22  n[] = { "c", "u"
9620: 2c 20 22 70 6b 22 20 7d 3b 0a 20 20 20 20 20 20  , "pk" };.      
9630: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
9640: 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73  tiLoad(v, 1, "is
9650: 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20  isi",.          
9660: 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70   i,.           p
9670: 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Idx->zName,.    
9680: 20 20 20 20 20 20 20 49 73 55 6e 69 71 75 65 49         IsUniqueI
9690: 6e 64 65 78 28 70 49 64 78 29 2c 0a 20 20 20 20  ndex(pIdx),.    
96a0: 20 20 20 20 20 20 20 61 7a 4f 72 69 67 69 6e 5b         azOrigin[
96b0: 70 49 64 78 2d 3e 69 64 78 54 79 70 65 5d 2c 0a  pIdx->idxType],.
96c0: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
96d0: 3e 70 50 61 72 74 49 64 78 57 68 65 72 65 21 3d  >pPartIdxWhere!=
96e0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
96f0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9700: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9710: 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 5);.      }.  
9720: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
9730: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
9740: 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54 3a 20  _DATABASE_LIST: 
9750: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
9760: 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d  st char *azCol[]
9770: 20 3d 20 7b 20 22 73 65 71 22 2c 20 22 6e 61 6d   = { "seq", "nam
9780: 65 22 2c 20 22 66 69 6c 65 22 20 7d 3b 0a 20 20  e", "file" };.  
9790: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 50 61    int i;.    pPa
97a0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
97b0: 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
97c0: 61 6d 65 73 28 76 2c 20 33 2c 20 61 7a 43 6f 6c  ames(v, 3, azCol
97d0: 29 3b 20 61 73 73 65 72 74 28 20 33 3d 3d 41 72  ); assert( 3==Ar
97e0: 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
97f0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
9800: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
9810: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
9820: 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f  b[i].pBt==0 ) co
9830: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73  ntinue;.      as
9840: 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d  sert( db->aDb[i]
9850: 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20  .zName!=0 );.   
9860: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
9870: 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69  ltiLoad(v, 1, "i
9880: 73 73 22 2c 0a 20 20 20 20 20 20 20 20 20 69 2c  ss",.         i,
9890: 0a 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44  .         db->aD
98a0: 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20  b[i].zName,.    
98b0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
98c0: 65 47 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d  eGetFilename(db-
98d0: 3e 61 44 62 5b 69 5d 2e 70 42 74 29 29 3b 0a 20  >aDb[i].pBt));. 
98e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
98f0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
9900: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
9910: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
9920: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
9930: 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54  p_COLLATION_LIST
9940: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
9950: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
9960: 5b 5d 20 3d 20 7b 20 22 73 65 71 22 2c 20 22 6e  [] = { "seq", "n
9970: 61 6d 65 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20  ame" };.    int 
9980: 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73 68 45  i = 0;.    HashE
9990: 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 70 50 61 72  lem *p;.    pPar
99a0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20  se->nMem = 2;.  
99b0: 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
99c0: 6d 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f 6c 29  mes(v, 2, azCol)
99d0: 3b 20 61 73 73 65 72 74 28 20 32 3d 3d 41 72 72  ; assert( 2==Arr
99e0: 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
99f0: 0a 20 20 20 20 66 6f 72 28 70 3d 73 71 6c 69 74  .    for(p=sqlit
9a00: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
9a10: 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b 20 70 3d  aCollSeq); p; p=
9a20: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70  sqliteHashNext(p
9a30: 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c 53 65  )){.      CollSe
9a40: 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c  q *pColl = (Coll
9a50: 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68  Seq *)sqliteHash
9a60: 44 61 74 61 28 70 29 3b 0a 20 20 20 20 20 20 73  Data(p);.      s
9a70: 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c  qlite3VdbeMultiL
9a80: 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 22 2c 20  oad(v, 1, "is", 
9a90: 69 2b 2b 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d  i++, pColl->zNam
9aa0: 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
9ab0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9ac0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
9ad0: 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  2);.    }.  }.  
9ae0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
9af0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
9b00: 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  EMA_PRAGMAS */..
9b10: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
9b20: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
9b30: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
9b40: 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a  OREIGN_KEY_LIST:
9b50: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
9b60: 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20     FKey *pFK;.  
9b70: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
9b80: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
9b90: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
9ba0: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
9bb0: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
9bc0: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
9bd0: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
9be0: 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61 62 2d       pFK = pTab-
9bf0: 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20 69 66  >pFKey;.      if
9c00: 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20 20 20  ( pFK ){.       
9c10: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
9c20: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a  ar *azCol[] = {.
9c30: 20 20 20 20 20 20 20 20 20 20 20 22 69 64 22 2c             "id",
9c40: 20 22 73 65 71 22 2c 20 22 74 61 62 6c 65 22 2c   "seq", "table",
9c50: 20 22 66 72 6f 6d 22 2c 20 22 74 6f 22 2c 20 22   "from", "to", "
9c60: 6f 6e 5f 75 70 64 61 74 65 22 2c 20 22 6f 6e 5f  on_update", "on_
9c70: 64 65 6c 65 74 65 22 2c 0a 20 20 20 20 20 20 20  delete",.       
9c80: 20 20 20 20 22 6d 61 74 63 68 22 0a 20 20 20 20      "match".    
9c90: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 69      };.        i
9ca0: 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20  nt i = 0; .     
9cb0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
9cc0: 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  = 8;.        sql
9cd0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
9ce0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
9cf0: 29 3b 0a 20 20 20 20 20 20 20 20 73 65 74 41 6c  );.        setAl
9d00: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
9d10: 38 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  8, azCol); asser
9d20: 74 28 20 38 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 8==ArraySize(
9d30: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20  azCol) );.      
9d40: 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20    while(pFK){.  
9d50: 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20          int j;. 
9d60: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30           for(j=0
9d70: 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a  ; j<pFK->nCol; j
9d80: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
9d90: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9da0: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 69 73  iLoad(v, 1, "iis
9db0: 73 73 73 73 73 22 2c 0a 20 20 20 20 20 20 20 20  sssss",.        
9dc0: 20 20 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20             i,.  
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9de0: 20 6a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   j,.            
9df0: 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c         pFK->zTo,
9e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e10: 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70      pTab->aCol[p
9e20: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
9e30: 6d 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  m].zName,.      
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b               pFK
9e50: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 2c 0a  ->aCol[j].zCol,.
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e70: 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46     actionName(pF
9e80: 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 2c 20  K->aAction[1]), 
9e90: 20 2f 2a 20 4f 4e 20 55 50 44 41 54 45 20 2a 2f   /* ON UPDATE */
9ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9eb0: 20 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65 28 70      actionName(p
9ec0: 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 2c  FK->aAction[0]),
9ed0: 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 2a    /* ON DELETE *
9ee0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
9ef0: 20 20 20 20 20 22 4e 4f 4e 45 22 29 3b 0a 20 20       "NONE");.  
9f00: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9f10: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9f20: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
9f30: 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  8);.          }.
9f40: 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20            ++i;. 
9f50: 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d 20 70           pFK = p
9f60: 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a 20  FK->pNextFrom;. 
9f70: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
9f80: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
9f90: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ak;.#endif /* !d
9fa0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
9fb0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
9fc0: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
9fd0: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
9fe0: 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  KEY.#ifndef SQLI
9ff0: 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
a000: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
a010: 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b  OREIGN_KEY_CHECK
a020: 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46  : {.    FKey *pF
a030: 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
a040: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
a050: 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
a060: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
a070: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69 6c           /* Chil
a080: 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 20  d table contain 
a090: 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65 79  "REFERENCES" key
a0a0: 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62 6c  word */.    Tabl
a0b0: 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20 20  e *pParent;     
a0c0: 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61 62     /* Parent tab
a0d0: 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20 70 6f  le that child po
a0e0: 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20 49  ints to */.    I
a0f0: 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20  ndex *pIdx;     
a100: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
a110: 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62  n the parent tab
a120: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  le */.    int i;
a130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a140: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
a150: 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 6e  :  Foreign key n
a160: 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20 2a  umber for pTab *
a170: 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20 20  /.    int j;    
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a190: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
a1a0: 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72 65  ield of the fore
a1b0: 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20 48  ign key */.    H
a1c0: 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20 20  ashElem *k;     
a1d0: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
a1e0: 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61 62  unter:  Next tab
a1f0: 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a  le in schema */.
a200: 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20 20      int x;      
a210: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65             /* re
a220: 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a 2f  sult variable */
a230: 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
a240: 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 33  lt;         /* 3
a250: 20 72 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   registers to ho
a260: 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77 20  ld a result row 
a270: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b 65  */.    int regKe
a280: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  y;            /*
a290: 20 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f 6c   Register to hol
a2a0: 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b 69  d key for checki
a2b0: 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20 20  ng the FK */.   
a2c0: 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20 20   int regRow;    
a2d0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
a2e0: 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72  ters to hold a r
a2f0: 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f 0a  ow from pTab */.
a300: 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70 3b      int addrTop;
a310: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
a320: 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65 63  p of a loop chec
a330: 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79  king foreign key
a340: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  s */.    int add
a350: 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  rOk;            
a360: 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66 20  /* Jump here if 
a370: 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a 2f  the key is OK */
a380: 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 73  .    int *aiCols
a390: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63  ;           /* c
a3a0: 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20 63  hild to parent c
a3b0: 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a 2f  olumn mapping */
a3c0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
a3d0: 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20  t char *azCol[] 
a3e0: 3d 20 7b 20 22 74 61 62 6c 65 22 2c 20 22 72 6f  = { "table", "ro
a3f0: 77 69 64 22 2c 20 22 70 61 72 65 6e 74 22 2c 20  wid", "parent", 
a400: 22 66 6b 69 64 22 20 7d 3b 0a 0a 20 20 20 20 72  "fkid" };..    r
a410: 65 67 52 65 73 75 6c 74 20 3d 20 70 50 61 72 73  egResult = pPars
a420: 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20 70  e->nMem+1;.    p
a430: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34  Parse->nMem += 4
a440: 3b 0a 20 20 20 20 72 65 67 4b 65 79 20 3d 20 2b  ;.    regKey = +
a450: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
a460: 20 20 20 72 65 67 52 6f 77 20 3d 20 2b 2b 70 50     regRow = ++pP
a470: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
a480: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
a490: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
a4a0: 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65  setAllColumnName
a4b0: 73 28 76 2c 20 34 2c 20 61 7a 43 6f 6c 29 3b 20  s(v, 4, azCol); 
a4c0: 61 73 73 65 72 74 28 20 34 3d 3d 41 72 72 61 79  assert( 4==Array
a4d0: 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20  Size(azCol) );. 
a4e0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
a4f0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
a500: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b 20 3d  e, iDb);.    k =
a510: 20 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74   sqliteHashFirst
a520: 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  (&db->aDb[iDb].p
a530: 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29  Schema->tblHash)
a540: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 6b 20 29  ;.    while( k )
a550: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  {.      if( zRig
a560: 68 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54  ht ){.        pT
a570: 61 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61  ab = sqlite3Loca
a580: 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  teTable(pParse, 
a590: 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  0, zRight, zDb);
a5a0: 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a  .        k = 0;.
a5b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
a5c0: 20 20 20 20 20 70 54 61 62 20 3d 20 28 54 61 62       pTab = (Tab
a5d0: 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  le*)sqliteHashDa
a5e0: 74 61 28 6b 29 3b 0a 20 20 20 20 20 20 20 20 6b  ta(k);.        k
a5f0: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 4e 65 78   = sqliteHashNex
a600: 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  t(k);.      }.  
a610: 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d 30 20      if( pTab==0 
a620: 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79 3d 3d  || pTab->pFKey==
a630: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
a640: 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65      sqlite3Table
a650: 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62  Lock(pParse, iDb
a660: 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c  , pTab->tnum, 0,
a670: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20   pTab->zName);. 
a680: 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 6e       if( pTab->n
a690: 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61 72 73  Col+regRow>pPars
a6a0: 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72 73 65  e->nMem ) pParse
a6b0: 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d 3e 6e  ->nMem = pTab->n
a6c0: 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a 20 20  Col + regRow;.  
a6d0: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
a6e0: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20  able(pParse, 0, 
a6f0: 69 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70  iDb, pTab, OP_Op
a700: 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 73  enRead);.      s
a710: 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74  qlite3VdbeLoadSt
a720: 72 69 6e 67 28 76 2c 20 72 65 67 52 65 73 75 6c  ring(v, regResul
a730: 74 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b  t, pTab->zName);
a740: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20  .      for(i=1, 
a750: 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b  pFK=pTab->pFKey;
a760: 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70   pFK; i++, pFK=p
a770: 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a  FK->pNextFrom){.
a780: 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74 20          pParent 
a790: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
a7a0: 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c  le(db, pFK->zTo,
a7b0: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 69   zDb);.        i
a7c0: 66 28 20 70 50 61 72 65 6e 74 3d 3d 30 20 29 20  f( pParent==0 ) 
a7d0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
a7e0: 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20    pIdx = 0;.    
a7f0: 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65      sqlite3Table
a800: 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62  Lock(pParse, iDb
a810: 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c  , pParent->tnum,
a820: 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e 7a 4e 61   0, pParent->zNa
a830: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 78 20 3d  me);.        x =
a840: 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
a850: 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70 50  Index(pParse, pP
a860: 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64  arent, pFK, &pId
a870: 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69  x, 0);.        i
a880: 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20  f( x==0 ){.     
a890: 20 20 20 20 20 69 66 28 20 70 49 64 78 3d 3d 30       if( pIdx==0
a8a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
a8b0: 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
a8c0: 28 70 50 61 72 73 65 2c 20 69 2c 20 69 44 62 2c  (pParse, i, iDb,
a8d0: 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f 4f 70 65   pParent, OP_Ope
a8e0: 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20  nRead);.        
a8f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
a900: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a910: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4f 70 65  AddOp3(v, OP_Ope
a920: 6e 52 65 61 64 2c 20 69 2c 20 70 49 64 78 2d 3e  nRead, i, pIdx->
a930: 74 6e 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20  tnum, iDb);.    
a940: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a950: 64 62 65 53 65 74 50 34 4b 65 79 49 6e 66 6f 28  dbeSetP4KeyInfo(
a960: 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a 20  pParse, pIdx);. 
a970: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
a980: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
a990: 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20      k = 0;.     
a9a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a9b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
a9c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61 72      assert( pPar
a9d0: 73 65 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20 70 46  se->nErr>0 || pF
a9e0: 4b 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  K==0 );.      if
a9f0: 28 20 70 46 4b 20 29 20 62 72 65 61 6b 3b 0a 20  ( pFK ) break;. 
aa00: 20 20 20 20 20 69 66 28 20 70 50 61 72 73 65 2d       if( pParse-
aa10: 3e 6e 54 61 62 3c 69 20 29 20 70 50 61 72 73 65  >nTab<i ) pParse
aa20: 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20 20 20  ->nTab = i;.    
aa30: 20 20 61 64 64 72 54 6f 70 20 3d 20 73 71 6c 69    addrTop = sqli
aa40: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
aa50: 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29 3b 20   OP_Rewind, 0); 
aa60: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
aa70: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20  .      for(i=1, 
aa80: 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b  pFK=pTab->pFKey;
aa90: 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70   pFK; i++, pFK=p
aaa0: 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a  FK->pNextFrom){.
aab0: 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74 20          pParent 
aac0: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
aad0: 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c  le(db, pFK->zTo,
aae0: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 70   zDb);.        p
aaf0: 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  Idx = 0;.       
ab00: 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20 20   aiCols = 0;.   
ab10: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
ab20: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78 20   ){.          x 
ab30: 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  = sqlite3FkLocat
ab40: 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70  eIndex(pParse, p
ab50: 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49  Parent, pFK, &pI
ab60: 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20 20  dx, &aiCols);.  
ab70: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
ab80: 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  x==0 );.        
ab90: 7d 0a 20 20 20 20 20 20 20 20 61 64 64 72 4f 6b  }.        addrOk
aba0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61   = sqlite3VdbeMa
abb0: 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20  keLabel(v);.    
abc0: 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20      if( pParent 
abd0: 26 26 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20  && pIdx==0 ){.  
abe0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 4b 65 79          int iKey
abf0: 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e   = pFK->aCol[0].
ac00: 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 20  iFrom;.         
ac10: 20 61 73 73 65 72 74 28 20 69 4b 65 79 3e 3d 30   assert( iKey>=0
ac20: 20 26 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e 6e   && iKey<pTab->n
ac30: 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Col );.         
ac40: 20 69 66 28 20 69 4b 65 79 21 3d 70 54 61 62 2d   if( iKey!=pTab-
ac50: 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  >iPKey ){.      
ac60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ac70: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
ac80: 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20 72  lumn, 0, iKey, r
ac90: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
aca0: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d      sqlite3Colum
acb0: 6e 44 65 66 61 75 6c 74 28 76 2c 20 70 54 61 62  nDefault(v, pTab
acc0: 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b  , iKey, regRow);
acd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
ace0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
acf0: 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67  , OP_IsNull, reg
ad00: 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64  Row, addrOk); Vd
ad10: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
ad20: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ad30: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
ad40: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c 20 72 65  OP_MustBeInt, re
ad50: 67 52 6f 77 2c 20 0a 20 20 20 20 20 20 20 20 20  gRow, .         
ad60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ad70: 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 2b  eCurrentAddr(v)+
ad80: 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  3); VdbeCoverage
ad90: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  (v);.          }
ada0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
adb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
adc0: 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c  Op2(v, OP_Rowid,
add0: 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20   0, regRow);.   
ade0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
adf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ae00: 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f 74 45 78  dOp3(v, OP_NotEx
ae10: 69 73 74 73 2c 20 69 2c 20 30 2c 20 72 65 67 52  ists, i, 0, regR
ae20: 6f 77 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  ow); VdbeCoverag
ae30: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
ae40: 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28  sqlite3VdbeGoto(
ae50: 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20  v, addrOk);.    
ae60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ae70: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c  eJumpHere(v, sql
ae80: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
ae90: 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20  ddr(v)-2);.     
aea0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
aeb0: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70      for(j=0; j<p
aec0: 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a  FK->nCol; j++){.
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
aee0: 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
aef0: 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70  lumnOfTable(v, p
af00: 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  Tab, 0,.        
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af20: 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43      aiCols ? aiC
af30: 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43  ols[j] : pFK->aC
af40: 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67  ol[j].iFrom, reg
af50: 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20  Row+j);.        
af60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
af70: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
af80: 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64  ll, regRow+j, ad
af90: 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72  drOk); VdbeCover
afa0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
afb0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
afc0: 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20  ( pParent ){.   
afd0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
afe0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
aff0: 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67  _MakeRecord, reg
b000: 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20  Row, pFK->nCol, 
b010: 72 65 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20  regKey,.        
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b030: 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64        sqlite3Ind
b040: 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 64 62  exAffinityStr(db
b050: 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f  ,pIdx), pFK->nCo
b060: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  l);.            
b070: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b080: 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64  4Int(v, OP_Found
b090: 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67  , i, addrOk, reg
b0a0: 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Key, 0);.       
b0b0: 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67       VdbeCoverag
b0c0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
b0d0: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
b0e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b0f0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69  ddOp2(v, OP_Rowi
b100: 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b  d, 0, regResult+
b110: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
b120: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
b130: 28 76 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c  (v, regResult+2,
b140: 20 22 73 69 22 2c 20 70 46 4b 2d 3e 7a 54 6f 2c   "si", pFK->zTo,
b150: 20 69 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73   i-1);.        s
b160: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b170: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
b180: 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b  , regResult, 4);
b190: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b1a0: 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c  VdbeResolveLabel
b1b0: 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20  (v, addrOk);.   
b1c0: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
b1d0: 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a  ee(db, aiCols);.
b1e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
b1f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
b200: 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61  v, OP_Next, 0, a
b210: 64 64 72 54 6f 70 2b 31 29 3b 20 56 64 62 65 43  ddrTop+1); VdbeC
b220: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
b230: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
b240: 70 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70  pHere(v, addrTop
b250: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
b260: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
b270: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
b280: 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f  OMIT_TRIGGER) */
b290: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
b2a0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
b2b0: 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a  FOREIGN_KEY) */.
b2c0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
b2d0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50    case PragTyp_P
b2e0: 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20  ARSER_TRACE: {. 
b2f0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
b300: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
b310: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
b320: 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20  ght, 0) ){.     
b330: 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72     sqlite3Parser
b340: 54 72 61 63 65 28 73 74 64 6f 75 74 2c 20 22 70  Trace(stdout, "p
b350: 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20  arser: ");.     
b360: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
b370: 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
b380: 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  ce(0, 0);.      
b390: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
b3a0: 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  eak;.#endif..  /
b3b0: 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20  * Reinstall the 
b3c0: 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75  LIKE and GLOB fu
b3d0: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61  nctions.  The va
b3e0: 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20  riant of LIKE.  
b3f0: 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20  ** used will be 
b400: 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f  case sensitive o
b410: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
b420: 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f  on the RHS..  */
b430: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
b440: 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c  CASE_SENSITIVE_L
b450: 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  IKE: {.    if( z
b460: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
b470: 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
b480: 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20  keFunctions(db, 
b490: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
b4a0: 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20  n(zRight, 0));. 
b4b0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
b4c0: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
b4d0: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
b4e0: 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65  K_ERROR_MAX.# de
b4f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  fine SQLITE_INTE
b500: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
b510: 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66  R_MAX 100.#endif
b520: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b530: 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
b540: 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d  CHECK.  /* Pragm
b550: 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20  a "quick_check" 
b560: 69 73 20 72 65 64 75 63 65 64 20 76 65 72 73 69  is reduced versi
b570: 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65  on of .  ** inte
b580: 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69  grity_check desi
b590: 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d  gned to detect m
b5a0: 6f 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ost database cor
b5b0: 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74  ruption.  ** wit
b5c0: 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65  hout most of the
b5d0: 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20 66   overhead of a f
b5e0: 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68  ull integrity-ch
b5f0: 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  eck..  */.  case
b600: 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49   PragTyp_INTEGRI
b610: 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20  TY_CHECK: {.    
b620: 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20  int i, j, addr, 
b630: 6d 78 45 72 72 3b 0a 0a 20 20 20 20 69 6e 74 20  mxErr;..    int 
b640: 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74  isQuick = (sqlit
b650: 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b  e3Tolower(zLeft[
b660: 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20  0])=='q');..    
b670: 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d 41  /* If the PRAGMA
b680: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20   command was of 
b690: 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41  the form "PRAGMA
b6a0: 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f   <db>.integrity_
b6b0: 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74  check",.    ** t
b6c0: 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74  hen iDb is set t
b6d0: 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  o the index of t
b6e0: 68 65 20 64 61 74 61 62 61 73 65 20 69 64 65 6e  he database iden
b6f0: 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a  tified by <db>..
b700: 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63      ** In this c
b710: 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69  ase, the integri
b720: 74 79 20 6f 66 20 64 61 74 61 62 61 73 65 20 69  ty of database i
b730: 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66  Db only is verif
b740: 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68  ied by.    ** th
b750: 65 20 56 44 42 45 20 63 72 65 61 74 65 64 20 62  e VDBE created b
b760: 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  elow..    **.   
b770: 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69   ** Otherwise, i
b780: 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61  f the command wa
b790: 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41  s simply "PRAGMA
b7a0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
b7b0: 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52  " (or.    ** "PR
b7c0: 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b  AGMA quick_check
b7d0: 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20  "), then iDb is 
b7e0: 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69  set to 0. In thi
b7f0: 73 20 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a  s case, set iDb.
b800: 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72      ** to -1 her
b810: 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  e, to indicate t
b820: 68 61 74 20 74 68 65 20 56 44 42 45 20 73 68 6f  hat the VDBE sho
b830: 75 6c 64 20 76 65 72 69 66 79 20 74 68 65 20 69  uld verify the i
b840: 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20  ntegrity.    ** 
b850: 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
b860: 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20  databases.  */. 
b870: 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d     assert( iDb>=
b880: 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
b890: 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d   iDb==0 || pId2-
b8a0: 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49  >z );.    if( pI
b8b0: 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d  d2->z==0 ) iDb =
b8c0: 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69   -1;..    /* Ini
b8d0: 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45  tialize the VDBE
b8e0: 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20   program */.    
b8f0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36  pParse->nMem = 6
b900: 3b 0a 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75  ;.    setOneColu
b910: 6d 6e 4e 61 6d 65 28 76 2c 20 22 69 6e 74 65 67  mnName(v, "integ
b920: 72 69 74 79 5f 63 68 65 63 6b 22 29 3b 0a 0a 20  rity_check");.. 
b930: 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 6d 61     /* Set the ma
b940: 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e  ximum error coun
b950: 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d  t */.    mxErr =
b960: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
b970: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
b980: 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  X;.    if( zRigh
b990: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
b9a0: 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68  e3GetInt32(zRigh
b9b0: 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20 20 20  t, &mxErr);.    
b9c0: 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30 20 29    if( mxErr<=0 )
b9d0: 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72 72 20  {.        mxErr 
b9e0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  = SQLITE_INTEGRI
b9f0: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
ba00: 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  AX;.      }.    
ba10: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
ba20: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
ba30: 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20 31 29  teger, mxErr, 1)
ba40: 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c  ;  /* reg[1] hol
ba50: 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74 20 2a  ds errors left *
ba60: 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20  /..    /* Do an 
ba70: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
ba80: 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61 73 65  on each database
ba90: 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72   file */.    for
baa0: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
bab0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73   i++){.      Has
bac0: 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20  hElem *x;.      
bad0: 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20  Hash *pTbls;.   
bae0: 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a     int cnt = 0;.
baf0: 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49 54 5f  .      if( OMIT_
bb00: 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31 20 29  TEMPDB && i==1 )
bb10: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
bb20: 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26 20 69   if( iDb>=0 && i
bb30: 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e 75 65  !=iDb ) continue
bb40: 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ;..      sqlite3
bb50: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
bb60: 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20 20 20  (pParse, i);.   
bb70: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
bb80: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
bb90: 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20  P_IfPos, 1); /* 
bba0: 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66 20 65  Halt if out of e
bbb0: 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 56  rrors */.      V
bbc0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
bbd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bbe0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61  eAddOp2(v, OP_Ha
bbf0: 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  lt, 0, 0);.     
bc00: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
bc10: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a  Here(v, addr);..
bc20: 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69        /* Do an i
bc30: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f  ntegrity check o
bc40: 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20 20 20  f the B-Tree.   
bc50: 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42     **.      ** B
bc60: 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20  egin by filling 
bc70: 72 65 67 69 73 74 65 72 73 20 32 2c 20 33 2c 20  registers 2, 3, 
bc80: 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72 6f 6f  ... with the roo
bc90: 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a  t pages numbers.
bca0: 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c        ** for all
bcb0: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
bcc0: 63 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ces in the datab
bcd0: 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ase..      */.  
bce0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
bcf0: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
bd00: 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a  ld(db, i, 0) );.
bd10: 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64        pTbls = &d
bd20: 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d  b->aDb[i].pSchem
bd30: 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20  a->tblHash;.    
bd40: 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61    for(x=sqliteHa
bd50: 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20  shFirst(pTbls); 
bd60: 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e  x; x=sqliteHashN
bd70: 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20  ext(x)){.       
bd80: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
bd90: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29  qliteHashData(x)
bda0: 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
bdb0: 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69  *pIdx;.        i
bdc0: 66 28 20 48 61 73 52 6f 77 69 64 28 70 54 61 62  f( HasRowid(pTab
bdd0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  ) ){.          s
bde0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
bdf0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
be00: 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e  pTab->tnum, 2+cn
be10: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64  t);.          Vd
be20: 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25  beComment((v, "%
be30: 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29  s", pTab->zName)
be40: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74  );.          cnt
be50: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ++;.        }.  
be60: 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70        for(pIdx=p
be70: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
be80: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
be90: 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ext){.          
bea0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
beb0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
bec0: 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63   pIdx->tnum, 2+c
bed0: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56  nt);.          V
bee0: 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22  dbeComment((v, "
bef0: 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65  %s", pIdx->zName
bf00: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e  ));.          cn
bf10: 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
bf20: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
bf30: 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66 66 69   Make sure suffi
bf40: 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  cient number of 
bf50: 72 65 67 69 73 74 65 72 73 20 68 61 76 65 20 62  registers have b
bf60: 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  een allocated */
bf70: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
bf80: 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61 72 73  Mem = MAX( pPars
bf90: 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20 29  e->nMem, cnt+8 )
bfa0: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 74  ;..      /* Do t
bfb0: 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65 67 72  he b-tree integr
bfc0: 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20  ity checks */.  
bfd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bfe0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp3(v, OP_Inte
bff0: 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c  grityCk, 2, cnt,
c000: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
c010: 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76  e3VdbeChangeP5(v
c020: 2c 20 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20  , (u8)i);.      
c030: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
c040: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
c050: 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43  sNull, 2); VdbeC
c060: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
c070: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c080: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
c090: 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20  8, 0, 3, 0,.    
c0a0: 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69       sqlite3MPri
c0b0: 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20  ntf(db, "*** in 
c0c0: 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c  database %s ***\
c0d0: 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  n", db->aDb[i].z
c0e0: 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20 20  Name),.         
c0f0: 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20  P4_DYNAMIC);.   
c100: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c110: 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c  dOp3(v, OP_Move,
c120: 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20 20 20   2, 4, 1);.     
c130: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c140: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
c150: 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20 20   4, 3, 2);.     
c160: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c170: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
c180: 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 2, 1);.     
c190: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
c1a0: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a  Here(v, addr);..
c1b0: 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
c1c0: 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63  re all the indic
c1d0: 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74  es are construct
c1e0: 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20  ed correctly..  
c1f0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72      */.      for
c200: 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (x=sqliteHashFir
c210: 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26 26 20  st(pTbls); x && 
c220: 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69  !isQuick; x=sqli
c230: 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a  teHashNext(x)){.
c240: 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70          Table *p
c250: 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68  Tab = sqliteHash
c260: 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20  Data(x);.       
c270: 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a 70   Index *pIdx, *p
c280: 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  Pk;.        Inde
c290: 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b 0a 20  x *pPrior = 0;. 
c2a0: 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54         int loopT
c2b0: 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  op;.        int 
c2c0: 69 44 61 74 61 43 75 72 2c 20 69 49 64 78 43 75  iDataCur, iIdxCu
c2d0: 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  r;.        int r
c2e0: 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20 20  1 = -1;..       
c2f0: 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65   if( pTab->pInde
c300: 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  x==0 ) continue;
c310: 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d 20 48  .        pPk = H
c320: 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 3f 20  asRowid(pTab) ? 
c330: 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69 6d 61  0 : sqlite3Prima
c340: 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29  ryKeyIndex(pTab)
c350: 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72 20 3d  ;.        addr =
c360: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c370: 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
c380: 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20  1);  /* Stop if 
c390: 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f  out of errors */
c3a0: 0a 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76  .        VdbeCov
c3b0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
c3c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c3d0: 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20  Op2(v, OP_Halt, 
c3e0: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  0, 0);.        s
c3f0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
c400: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20  re(v, addr);.   
c410: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72       sqlite3Expr
c420: 43 61 63 68 65 43 6c 65 61 72 28 70 50 61 72 73  CacheClear(pPars
c430: 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  e);.        sqli
c440: 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
c450: 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c 20 70  ndices(pParse, p
c460: 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  Tab, OP_OpenRead
c470: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
c480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c490: 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69          1, 0, &i
c4a0: 44 61 74 61 43 75 72 2c 20 26 69 49 64 78 43 75  DataCur, &iIdxCu
c4b0: 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  r);.        sqli
c4c0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c4d0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20   OP_Integer, 0, 
c4e0: 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  7);.        for(
c4f0: 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
c500: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
c510: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
c520: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
c530: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c540: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c550: 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64   0, 8+j); /* ind
c560: 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74  ex entries count
c570: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  er */.        }.
c580: 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
c590: 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73  nMem = MAX(pPars
c5a0: 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20  e->nMem, 8+j);. 
c5b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c5c0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
c5d0: 65 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c  ewind, iDataCur,
c5e0: 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   0); VdbeCoverag
c5f0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f  e(v);.        lo
c600: 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56  opTop = sqlite3V
c610: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c620: 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20  AddImm, 7, 1);. 
c630: 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79         /* Verify
c640: 20 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55   that all NOT NU
c650: 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c  LL columns reall
c660: 79 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a  y are NOT NULL *
c670: 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  /.        for(j=
c680: 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b  0; j<pTab->nCol;
c690: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
c6a0: 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20   char *zErr;.   
c6b0: 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c         int jmp2,
c6c0: 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20   jmp3;.         
c6d0: 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50   if( j==pTab->iP
c6e0: 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Key ) continue;.
c6f0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 54            if( pT
c700: 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e  ab->aCol[j].notN
c710: 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ull==0 ) continu
c720: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e;.          sql
c730: 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
c740: 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20  olumnOfTable(v, 
c750: 70 54 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20  pTab, iDataCur, 
c760: 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 3);.         
c770: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
c780: 67 65 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54  geP5(v, OPFLAG_T
c790: 59 50 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20  YPEOFARG);.     
c7a0: 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69       jmp2 = sqli
c7b0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
c7c0: 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b   OP_NotNull, 3);
c7d0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
c7e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
c7f0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c800: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
c810: 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
c820: 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
c830: 20 20 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d            zErr =
c840: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
c850: 64 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20  db, "NULL value 
c860: 69 6e 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d  in %s.%s", pTab-
c870: 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c        pTab->aCol
c8a0: 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  [j].zName);.    
c8b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c8c0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
c8d0: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20  ring8, 0, 3, 0, 
c8e0: 7a 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43  zErr, P4_DYNAMIC
c8f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
c900: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c910: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
c920: 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 1);.         
c930: 20 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56   jmp3 = sqlite3V
c940: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
c950: 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43  IfPos, 1); VdbeC
c960: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
c970: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c980: 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61  eAddOp0(v, OP_Ha
c990: 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  lt);.          s
c9a0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
c9b0: 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20  re(v, jmp2);.   
c9c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c9d0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
c9e0: 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p3);.        }. 
c9f0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61         /* Valida
ca00: 74 65 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te index entries
ca10: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
ca20: 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20   row */.        
ca30: 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
ca40: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
ca50: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
ca60: 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
ca70: 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d      int jmp2, jm
ca80: 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a  p3, jmp4, jmp5;.
ca90: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b            int ck
caa0: 55 6e 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64  Uniq = sqlite3Vd
cab0: 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
cac0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
cad0: 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e  k==pIdx ) contin
cae0: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31  ue;.          r1
caf0: 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61   = sqlite3Genera
cb00: 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73  teIndexKey(pPars
cb10: 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43 75  e, pIdx, iDataCu
cb20: 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a  r, 0, 0, &jmp3,.
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb50: 20 20 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72         pPrior, r
cb60: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50  1);.          pP
cb70: 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20  rior = pIdx;.   
cb80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cb90: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
cba0: 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20  ddImm, 8+j, 1); 
cbb0: 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e   /* increment en
cbc0: 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  try count */.   
cbd0: 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79         /* Verify
cbe0: 20 74 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65   that an index e
cbf0: 6e 74 72 79 20 65 78 69 73 74 73 20 66 6f 72 20  ntry exists for 
cc00: 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
cc10: 65 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20  e row */.       
cc20: 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65     jmp2 = sqlite
cc30: 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
cc40: 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78  , OP_Found, iIdx
cc50: 43 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72  Cur+j, ckUniq, r
cc60: 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1,.             
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc80: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e           pIdx->n
cc90: 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76  Column); VdbeCov
cca0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
ccb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ccc0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
ccd0: 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44  mm, 1, -1); /* D
cce0: 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c  ecrement error l
ccf0: 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  imit */.        
cd00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61    sqlite3VdbeLoa
cd10: 64 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 22 72  dString(v, 3, "r
cd20: 6f 77 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ow ");.         
cd30: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cd40: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
cd50: 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   7, 3, 3);.     
cd60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cd70: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 34 2c  LoadString(v, 4,
cd80: 20 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   " missing from 
cd90: 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20  index ");.      
cda0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cdb0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
cdc0: 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20  at, 4, 3, 3);.  
cdd0: 20 20 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73          jmp5 = s
cde0: 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74  qlite3VdbeLoadSt
cdf0: 72 69 6e 67 28 76 2c 20 34 2c 20 70 49 64 78 2d  ring(v, 4, pIdx-
ce00: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  >zName);.       
ce10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ce20: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
ce30: 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 4, 3, 3);.   
ce40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ce50: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
ce60: 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b  esultRow, 3, 1);
ce70: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20  .          jmp4 
ce80: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
ce90: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
cea0: 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   1); VdbeCoverag
ceb0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
cec0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ced0: 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20  0(v, OP_Halt);. 
cee0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
cef0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
cf00: 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp2);.         
cf10: 20 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69   /* For UNIQUE i
cf20: 6e 64 65 78 65 73 2c 20 76 65 72 69 66 79 20 74  ndexes, verify t
cf30: 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74  hat only one ent
cf40: 72 79 20 65 78 69 73 74 73 20 77 69 74 68 20 74  ry exists with t
cf50: 68 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  he.          ** 
cf60: 63 75 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68  current key.  Th
cf70: 65 20 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75  e entry is uniqu
cf80: 65 20 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c  e if (1) any col
cf90: 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20  umn is NULL.    
cfa0: 20 20 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20        ** or (2) 
cfb0: 74 68 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68  the next entry h
cfc0: 61 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b  as a different k
cfd0: 65 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ey */.          
cfe0: 69 66 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65  if( IsUniqueInde
cff0: 78 28 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20  x(pIdx) ){.     
d000: 20 20 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f         int uniqO
d010: 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  k = sqlite3VdbeM
d020: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
d030: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
d040: 36 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  6;.            i
d050: 6e 74 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20  nt kk;.         
d060: 20 20 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c     for(kk=0; kk<
d070: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b  pIdx->nKeyCol; k
d080: 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  k++){.          
d090: 20 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70      int iCol = p
d0a0: 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b  Idx->aiColumn[kk
d0b0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ];.             
d0c0: 20 61 73 73 65 72 74 28 20 69 43 6f 6c 21 3d 58   assert( iCol!=X
d0d0: 4e 5f 52 4f 57 49 44 20 26 26 20 69 43 6f 6c 3c  N_ROWID && iCol<
d0e0: 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20  pTab->nCol );.  
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
d100: 69 43 6f 6c 3e 3d 30 20 26 26 20 70 54 61 62 2d  iCol>=0 && pTab-
d110: 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e  >aCol[iCol].notN
d120: 75 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ull ) continue;.
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
d140: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d150: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31  v, OP_IsNull, r1
d160: 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  +kk, uniqOk);.  
d170: 20 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65              Vdbe
d180: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
d190: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
d1a0: 20 20 20 20 20 20 20 6a 6d 70 36 20 3d 20 73 71         jmp6 = sq
d1b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
d1c0: 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78  v, OP_Next, iIdx
d1d0: 43 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65  Cur+j); VdbeCove
d1e0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
d1f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d200: 47 6f 74 6f 28 76 2c 20 75 6e 69 71 4f 6b 29 3b  Goto(v, uniqOk);
d210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d220: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
d230: 28 76 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20  (v, jmp6);.     
d240: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d250: 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f  beAddOp4Int(v, O
d260: 50 5f 49 64 78 47 54 2c 20 69 49 64 78 43 75 72  P_IdxGT, iIdxCur
d270: 2b 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a  +j, uniqOk, r1,.
d280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2a0: 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b   pIdx->nKeyCol);
d2b0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d2c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d2d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d2e0: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
d2f0: 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65   -1); /* Decreme
d300: 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a  nt error limit *
d310: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  /.            sq
d320: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
d330: 69 6e 67 28 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75  ing(v, 3, "non-u
d340: 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69  nique entry in i
d350: 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20  ndex ");.       
d360: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d370: 47 6f 74 6f 28 76 2c 20 6a 6d 70 35 29 3b 0a 20  Goto(v, jmp5);. 
d380: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d390: 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
d3a0: 65 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20  el(v, uniqOk);. 
d3b0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
d3c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d3d0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34  JumpHere(v, jmp4
d3e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d3f0: 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49  ite3ResolvePartI
d400: 64 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20  dxLabel(pParse, 
d410: 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d  jmp3);.        }
d420: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d430: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d440: 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c  _Next, iDataCur,
d450: 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43   loopTop); VdbeC
d460: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
d470: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
d480: 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54  umpHere(v, loopT
d490: 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53  op-1);.#ifndef S
d4a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
d4b0: 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71  COUNT.        sq
d4c0: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
d4d0: 69 6e 67 28 76 2c 20 32 2c 20 22 77 72 6f 6e 67  ing(v, 2, "wrong
d4e0: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
d4f0: 20 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20   index ");.     
d500: 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78     for(j=0, pIdx
d510: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
d520: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
d530: 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20  pNext, j++){.   
d540: 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d         if( pPk==
d550: 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b  pIdx ) continue;
d560: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20  .          addr 
d570: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
d580: 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20  rentAddr(v);.   
d590: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d5a0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
d5b0: 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29  fPos, 1, addr+2)
d5c0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
d5d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d5e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d5f0: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
d600: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d610: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d620: 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43   OP_Count, iIdxC
d630: 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20  ur+j, 3);.      
d640: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d650: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20  ddOp3(v, OP_Eq, 
d660: 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b  8+j, addr+8, 3);
d670: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d680: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d690: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
d6a0: 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  v, SQLITE_NOTNUL
d6b0: 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  L);.          sq
d6c0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d6d0: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
d6e0: 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20   -1);.          
d6f0: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
d700: 74 72 69 6e 67 28 76 2c 20 33 2c 20 70 49 64 78  tring(v, 3, pIdx
d710: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
d720: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d730: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
d740: 61 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20  at, 3, 2, 7);.  
d750: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d760: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d770: 52 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29  ResultRow, 7, 1)
d780: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64  ;.        }.#end
d790: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
d7a0: 54 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a  T_BTREECOUNT */.
d7b0: 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20        } .    }. 
d7c0: 20 20 20 7b 0a 20 20 20 20 20 20 73 74 61 74 69     {.      stati
d7d0: 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20  c const int iLn 
d7e0: 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49  = VDBE_OFFSET_LI
d7f0: 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 20 20 73  NENO(2);.      s
d800: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
d810: 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d  OpList endCode[]
d820: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
d830: 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31  P_AddImm,      1
d840: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
d850: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
d860: 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20     { OP_If,     
d870: 20 20 20 20 20 31 2c 20 34 2c 20 20 20 20 20 20       1, 4,      
d880: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
d890: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74  .        { OP_St
d8a0: 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c  ring8,     0, 3,
d8b0: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
d8c0: 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 2 */.        {
d8d0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20   OP_ResultRow,  
d8e0: 20 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   3, 1,        0}
d8f0: 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20  ,    /* 3 */.   
d900: 20 20 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65     };.      Vdbe
d910: 4f 70 20 2a 61 4f 70 3b 0a 0a 20 20 20 20 20 20  Op *aOp;..      
d920: 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  aOp = sqlite3Vdb
d930: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
d940: 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29  raySize(endCode)
d950: 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b  , endCode, iLn);
d960: 0a 20 20 20 20 20 20 69 66 28 20 61 4f 70 20 29  .      if( aOp )
d970: 7b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d  {.        aOp[0]
d980: 2e 70 32 20 3d 20 2d 6d 78 45 72 72 3b 0a 20 20  .p2 = -mxErr;.  
d990: 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34 74        aOp[2].p4t
d9a0: 79 70 65 20 3d 20 50 34 5f 53 54 41 54 49 43 3b  ype = P4_STATIC;
d9b0: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e  .        aOp[2].
d9c0: 70 34 2e 7a 20 3d 20 22 6f 6b 22 3b 0a 20 20 20  p4.z = "ok";.   
d9d0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
d9e0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
d9f0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  * SQLITE_OMIT_IN
da00: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f  TEGRITY_CHECK */
da10: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
da20: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a  _OMIT_UTF16.  /*
da30: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65  .  **   PRAGMA e
da40: 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50  ncoding.  **   P
da50: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d  RAGMA encoding =
da60: 20 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36   "utf-8"|"utf-16
da70: 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74  "|"utf-16le"|"ut
da80: 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a  f-16be".  **.  *
da90: 2a 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66  * In its first f
daa0: 6f 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61  orm, this pragma
dab0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63   returns the enc
dac0: 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69  oding of the mai
dad0: 6e 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e  n.  ** database.
dae0: 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
daf0: 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69   is not initiali
db00: 7a 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69  zed, it is initi
db10: 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a  alized now..  **
db20: 0a 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  .  ** The second
db30: 20 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72   form of this pr
db40: 61 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20  agma is a no-op 
db50: 69 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  if the main data
db60: 62 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68  base file.  ** h
db70: 61 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62  as not already b
db80: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
db90: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74   In this case it
dba0: 20 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c   sets the defaul
dbb0: 74 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20  t.  ** encoding 
dbc0: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
dbd0: 64 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  d for the main d
dbe0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
dbf0: 61 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20  a new file.  ** 
dc00: 69 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61  is created. If a
dc10: 6e 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20  n existing main 
dc20: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
dc30: 20 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68   opened, then th
dc40: 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74  e.  ** default t
dc50: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72  ext encoding for
dc60: 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61   the existing da
dc70: 74 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a  tabase is used..
dc80: 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c    ** .  ** In al
dc90: 6c 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61  l cases new data
dca0: 62 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73  bases created us
dcb0: 69 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63  ing the ATTACH c
dcc0: 6f 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20  ommand are.  ** 
dcd0: 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74  created to use t
dce0: 68 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20  he same default 
dcf0: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73  text encoding as
dd00: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
dd10: 73 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20  se. If.  ** the 
dd20: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61  main database ha
dd30: 73 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69  s not been initi
dd40: 61 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72  alized and/or cr
dd50: 65 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43  eated when ATTAC
dd60: 48 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74  H.  ** is execut
dd70: 65 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65  ed, this is done
dd80: 20 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41   before the ATTA
dd90: 43 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20  CH operation..  
dda0: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73  **.  ** In the s
ddb0: 65 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20  econd form this 
ddc0: 70 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20  pragma sets the 
ddd0: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f  text encoding to
dde0: 20 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a   be used in.  **
ddf0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69   new database fi
de00: 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
de10: 67 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  g this database 
de20: 68 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e  handle. It is on
de30: 6c 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69  ly.  ** useful i
de40: 66 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69  f invoked immedi
de50: 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
de60: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a  main database i.
de70: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
de80: 54 79 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a  Typ_ENCODING: {.
de90: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
dea0: 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20   struct EncName 
deb0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e  {.      char *zN
dec0: 61 6d 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e  ame;.      u8 en
ded0: 63 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65  c;.    } encname
dee0: 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  s[] = {.      { 
def0: 22 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49  "UTF8",     SQLI
df00: 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d  TE_UTF8        }
df10: 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38  ,.      { "UTF-8
df20: 22 2c 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ",    SQLITE_UTF
df30: 38 20 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20  8        },  /* 
df40: 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20  Must be element 
df50: 5b 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  [1] */.      { "
df60: 55 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54  UTF-16le", SQLIT
df70: 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c  E_UTF16LE     },
df80: 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
df90: 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20  ment [2] */.    
dfa0: 20 20 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20    { "UTF-16be", 
dfb0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20  SQLITE_UTF16BE  
dfc0: 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
dfd0: 65 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f  e element [3] */
dfe0: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c  .      { "UTF16l
dff0: 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
e000: 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6LE     },.     
e010: 20 7b 20 22 55 54 46 31 36 62 65 22 2c 20 20 53   { "UTF16be",  S
e020: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20  QLITE_UTF16BE   
e030: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
e040: 46 2d 31 36 22 2c 20 20 20 30 20 20 20 20 20 20  F-16",   0      
e050: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f              }, /
e060: 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  * SQLITE_UTF16NA
e070: 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20  TIVE */.      { 
e080: 22 55 54 46 31 36 22 2c 20 20 20 20 30 20 20 20  "UTF16",    0   
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e0a0: 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31  , /* SQLITE_UTF1
e0b0: 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20  6NATIVE */.     
e0c0: 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b   { 0, 0 }.    };
e0d0: 0a 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63  .    const struc
e0e0: 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b  t EncName *pEnc;
e0f0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
e100: 20 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d   ){    /* "PRAGM
e110: 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20  A encoding" */. 
e120: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
e130: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
e140: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
e150: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 61 73 73 65  _out;.      asse
e160: 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
e170: 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53  ITE_UTF8].enc==S
e180: 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20  QLITE_UTF8 );.  
e190: 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
e1a0: 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31  ames[SQLITE_UTF1
e1b0: 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  6LE].enc==SQLITE
e1c0: 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20 20  _UTF16LE );.    
e1d0: 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
e1e0: 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 42  es[SQLITE_UTF16B
e1f0: 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  E].enc==SQLITE_U
e200: 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20 20  TF16BE );.      
e210: 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74  returnSingleText
e220: 28 76 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20  (v, "encoding", 
e230: 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61  encnames[ENC(pPa
e240: 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 29  rse->db)].zName)
e250: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20 20 20  ;.    }else{    
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65      /* "PRAGMA e
e280: 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22 20 2a  ncoding = XXX" *
e290: 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  /.      /* Only 
e2a0: 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65  change the value
e2b0: 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63 20 69   of sqlite.enc i
e2c0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
e2d0: 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20  andle is not.   
e2e0: 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65     ** initialize
e2f0: 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e 20 64  d. If the main d
e300: 61 74 61 62 61 73 65 20 65 78 69 73 74 73 2c 20  atabase exists, 
e310: 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 2e 65  the new sqlite.e
e320: 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20 20 2a  nc value.      *
e330: 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72 77 72  * will be overwr
e340: 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65 20 73  itten when the s
e350: 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f  chema is next lo
e360: 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f 65 73  aded. If it does
e370: 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c   not.      ** al
e380: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 69 74  ready exists, it
e390: 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64   will be created
e3a0: 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20   to use the new 
e3b0: 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a  encoding value..
e3c0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
e3d0: 66 28 20 0a 20 20 20 20 20 20 20 20 21 28 44 62  f( .        !(Db
e3e0: 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
e3f0: 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  0, DB_SchemaLoad
e400: 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 20  ed)) || .       
e410: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
e420: 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79 29 20  b, 0, DB_Empty) 
e430: 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
e440: 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e    for(pEnc=&encn
e450: 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a  ames[0]; pEnc->z
e460: 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20  Name; pEnc++){. 
e470: 20 20 20 20 20 20 20 20 20 69 66 28 20 30 3d 3d           if( 0==
e480: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
e490: 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61  Right, pEnc->zNa
e4a0: 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  me) ){.         
e4b0: 20 20 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62     SCHEMA_ENC(db
e4c0: 29 20 3d 20 45 4e 43 28 64 62 29 20 3d 0a 20 20  ) = ENC(db) =.  
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
e4e0: 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e  nc->enc ? pEnc->
e4f0: 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55 54 46  enc : SQLITE_UTF
e500: 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 20 20  16NATIVE;.      
e510: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e520: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e530: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 21   }.        if( !
e540: 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20  pEnc->zName ){. 
e550: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e560: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
e570: 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e   "unsupported en
e580: 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69  coding: %s", zRi
e590: 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ght);.        }.
e5a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
e5b0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
e5c0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
e5d0: 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64  _UTF16 */..#ifnd
e5e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
e5f0: 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52  CHEMA_VERSION_PR
e600: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
e610: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e620: 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
e630: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e640: 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76  schema.]schema_v
e650: 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65  ersion = <intege
e660: 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
e670: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75  RAGMA [schema.]u
e680: 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ser_version.  **
e690: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
e6a0: 61 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  a.]user_version 
e6b0: 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
e6c0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e6d0: 73 63 68 65 6d 61 2e 5d 66 72 65 65 6c 69 73 74  schema.]freelist
e6e0: 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74 65 67 65  _count = <intege
e6f0: 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
e700: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
e710: 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20  pplication_id.  
e720: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e730: 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ema.]application
e740: 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  _id = <integer>.
e750: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72    **.  ** The pr
e760: 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76 65  agma's schema_ve
e770: 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76  rsion and user_v
e780: 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64 20  ersion are used 
e790: 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20 20  to set or get.  
e7a0: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
e7b0: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
e7c0: 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72 73  on and user-vers
e7d0: 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
e7e0: 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65  y. Both.  ** the
e7f0: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
e800: 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65 72  and the user-ver
e810: 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74 20  sion are 32-bit 
e820: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 0a  signed integers.
e830: 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
e840: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
e850: 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er..  **.  ** Th
e860: 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
e870: 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20  is usually only 
e880: 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74 65  manipulated inte
e890: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
e8a0: 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63  . It.  ** is inc
e8b0: 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c 69  remented by SQLi
e8c0: 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  te whenever the 
e8d0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
e8e0: 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79 0a  is modified (by.
e8f0: 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f 72    ** creating or
e900: 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62 6c   dropping a tabl
e910: 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68 65  e or index). The
e920: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
e930: 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  is used by.  ** 
e940: 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d 65  SQLite each time
e950: 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63   a query is exec
e960: 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  uted to ensure t
e970: 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  hat the internal
e980: 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74   cache.  ** of t
e990: 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20 77  he schema used w
e9a0: 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68  hen compiling th
e9b0: 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63  e SQL query matc
e9c0: 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f  hes the schema o
e9d0: 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
e9e0: 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63  ase against whic
e9f0: 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  h the compiled q
ea00: 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79  uery is actually
ea10: 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20   executed..  ** 
ea20: 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73 20  Subverting this 
ea30: 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73 69  mechanism by usi
ea40: 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d  ng "PRAGMA schem
ea50: 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f  a_version" to mo
ea60: 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73 63  dify.  ** the sc
ea70: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73 20  hema-version is 
ea80: 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67  potentially dang
ea90: 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c 65  erous and may le
eaa0: 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20  ad to program.  
eab0: 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64 61  ** crashes or da
eac0: 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
ead0: 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75 74  n. Use with caut
eae0: 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ion!.  **.  ** T
eaf0: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
eb00: 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
eb10: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
eb20: 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65 64  . It may be used
eb30: 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61   by.  ** applica
eb40: 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70 75  tions for any pu
eb50: 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  rpose..  */.  ca
eb60: 73 65 20 50 72 61 67 54 79 70 5f 48 45 41 44 45  se PragTyp_HEADE
eb70: 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69  R_VALUE: {.    i
eb80: 6e 74 20 69 43 6f 6f 6b 69 65 20 3d 20 70 50 72  nt iCookie = pPr
eb90: 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 2f 2a 20  agma->iArg;  /* 
eba0: 57 68 69 63 68 20 63 6f 6f 6b 69 65 20 74 6f 20  Which cookie to 
ebb0: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
ebc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ebd0: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
ebe0: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
ebf0: 74 20 26 26 20 28 70 50 72 61 67 6d 61 2d 3e 6d  t && (pPragma->m
ec00: 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67 46  PragFlag & PragF
ec10: 6c 61 67 5f 52 65 61 64 4f 6e 6c 79 29 3d 3d 30  lag_ReadOnly)==0
ec20: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69   ){.      /* Wri
ec30: 74 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  te the specified
ec40: 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f   cookie value */
ec50: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
ec60: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73  nst VdbeOpList s
ec70: 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20  etCookie[] = {. 
ec80: 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
ec90: 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20  saction,    0,  
eca0: 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20  1,  0},    /* 0 
ecb0: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
ecc0: 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20  SetCookie,      
ecd0: 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  0,  0},    /
ece0: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a  * 1 */.      };.
ecf0: 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f        VdbeOp *aO
ed00: 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  p;.      sqlite3
ed10: 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c  VdbeVerifyNoMall
ed20: 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41 72  ocRequired(v, Ar
ed30: 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69  raySize(setCooki
ed40: 65 29 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d  e));.      aOp =
ed50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ed60: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
ed70: 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73  ze(setCookie), s
ed80: 65 74 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20  etCookie, 0);.  
ed90: 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f      if( ONLY_IF_
eda0: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61  REALLOC_STRESS(a
edb0: 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a  Op==0) ) break;.
edc0: 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20        aOp[0].p1 
edd0: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70  = iDb;.      aOp
ede0: 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20  [1].p1 = iDb;.  
edf0: 20 20 20 20 61 4f 70 5b 31 5d 2e 70 32 20 3d 20      aOp[1].p2 = 
ee00: 69 43 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20 61  iCookie;.      a
ee10: 4f 70 5b 31 5d 2e 70 33 20 3d 20 73 71 6c 69 74  Op[1].p3 = sqlit
ee20: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
ee30: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
ee40: 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70 65   /* Read the spe
ee50: 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61  cified cookie va
ee60: 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  lue */.      sta
ee70: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
ee80: 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b  List readCookie[
ee90: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20  ] = {.        { 
eea0: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
eeb0: 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20      0,  0,  0}, 
eec0: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
eed0: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
eee0: 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20  ie,      0,  1, 
eef0: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
ef00: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73          { OP_Res
ef10: 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c  ultRow,       1,
ef20: 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d    1,  0}.      }
ef30: 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a  ;.      VdbeOp *
ef40: 61 4f 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  aOp;.      sqlit
ef50: 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61  e3VdbeVerifyNoMa
ef60: 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20  llocRequired(v, 
ef70: 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f  ArraySize(readCo
ef80: 6f 6b 69 65 29 29 3b 0a 20 20 20 20 20 20 61 4f  okie));.      aO
ef90: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
efa0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
efb0: 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65  ySize(readCookie
efc0: 29 2c 72 65 61 64 43 6f 6f 6b 69 65 2c 30 29 3b  ),readCookie,0);
efd0: 0a 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f  .      if( ONLY_
efe0: 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  IF_REALLOC_STRES
eff0: 53 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61  S(aOp==0) ) brea
f000: 6b 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e  k;.      aOp[0].
f010: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
f020: 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b  aOp[1].p1 = iDb;
f030: 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 33  .      aOp[1].p3
f040: 20 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20 20 20 20   = iCookie;.    
f050: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
f060: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
f070: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f080: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
f090: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a   COLNAME_NAME, z
f0a0: 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41  Left, SQLITE_TRA
f0b0: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20  NSIENT);.    }. 
f0c0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
f0d0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
f0e0: 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
f0f0: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
f100: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
f110: 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
f120: 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  IAGS.  /*.  **  
f130: 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f   PRAGMA compile_
f140: 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a  options.  **.  *
f150: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
f160: 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c  es of all compil
f170: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75  e-time options u
f180: 73 65 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c  sed in this buil
f190: 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69  d,.  ** one opti
f1a0: 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f  on per row..  */
f1b0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
f1c0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a  COMPILE_OPTIONS:
f1d0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30   {.    int i = 0
f1e0: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
f1f0: 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 70 50 61 72   *zOpt;.    pPar
f200: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20  se->nMem = 1;.  
f210: 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61    setOneColumnNa
f220: 6d 65 28 76 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f  me(v, "compile_o
f230: 70 74 69 6f 6e 22 29 3b 0a 20 20 20 20 77 68 69  ption");.    whi
f240: 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69  le( (zOpt = sqli
f250: 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
f260: 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29  n_get(i++))!=0 )
f270: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
f280: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
f290: 20 31 2c 20 7a 4f 70 74 29 3b 0a 20 20 20 20 20   1, zOpt);.     
f2a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f2b0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
f2c0: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d  ow, 1, 1);.    }
f2d0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
f2e0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
f2f0: 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
f300: 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e  N_DIAGS */..#ifn
f310: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
f320: 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WAL.  /*.  **   
f330: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
f340: 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d  wal_checkpoint =
f350: 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65   passive|full|re
f360: 73 74 61 72 74 7c 74 72 75 6e 63 61 74 65 0a 20  start|truncate. 
f370: 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f   **.  ** Checkpo
f380: 69 6e 74 20 74 68 65 20 64 61 74 61 62 61 73 65  int the database
f390: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
f3a0: 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50  agTyp_WAL_CHECKP
f3b0: 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 73 74 61 74  OINT: {.    stat
f3c0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
f3d0: 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 62 75 73 79  zCol[] = { "busy
f3e0: 22 2c 20 22 6c 6f 67 22 2c 20 22 63 68 65 63 6b  ", "log", "check
f3f0: 70 6f 69 6e 74 65 64 22 20 7d 3b 0a 20 20 20 20  pointed" };.    
f400: 69 6e 74 20 69 42 74 20 3d 20 28 70 49 64 32 2d  int iBt = (pId2-
f410: 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41  >z?iDb:SQLITE_MA
f420: 58 5f 41 54 54 41 43 48 45 44 29 3b 0a 20 20 20  X_ATTACHED);.   
f430: 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c   int eMode = SQL
f440: 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
f450: 41 53 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20  ASSIVE;.    if( 
f460: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
f470: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
f480: 6d 70 28 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c  mp(zRight, "full
f490: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
f4a0: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
f4b0: 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b  CHECKPOINT_FULL;
f4c0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
f4d0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
f4e0: 7a 52 69 67 68 74 2c 20 22 72 65 73 74 61 72 74  zRight, "restart
f4f0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
f500: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
f510: 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
f520: 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  RT;.      }else 
f530: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
f540: 6d 70 28 7a 52 69 67 68 74 2c 20 22 74 72 75 6e  mp(zRight, "trun
f550: 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  cate")==0 ){.   
f560: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c       eMode = SQL
f570: 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54  ITE_CHECKPOINT_T
f580: 52 55 4e 43 41 54 45 3b 0a 20 20 20 20 20 20 7d  RUNCATE;.      }
f590: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 41 6c  .    }.    setAl
f5a0: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
f5b0: 33 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65  3, azCol);  asse
f5c0: 72 74 28 20 33 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 3==ArraySize
f5d0: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 70  (azCol) );.    p
f5e0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
f5f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f600: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65  AddOp3(v, OP_Che
f610: 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d  ckpoint, iBt, eM
f620: 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  ode, 1);.    sql
f630: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
f640: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
f650: 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65  1, 3);.  }.  bre
f660: 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  ak;..  /*.  **  
f670: 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f   PRAGMA wal_auto
f680: 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20  checkpoint.  ** 
f690: 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74    PRAGMA wal_aut
f6a0: 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a  ocheckpoint = N.
f6b0: 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67    **.  ** Config
f6c0: 75 72 65 20 61 20 64 61 74 61 62 61 73 65 20 63  ure a database c
f6d0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74  onnection to aut
f6e0: 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b  omatically check
f6f0: 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73 65  point a database
f700: 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75  .  ** after accu
f710: 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65  mulating N frame
f720: 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72  s in the log. Or
f730: 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 20 63   query for the c
f740: 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a  urrent value.  *
f750: 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63  * of N..  */.  c
f760: 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f  ase PragTyp_WAL_
f770: 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20  AUTOCHECKPOINT: 
f780: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
f790: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
f7a0: 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  3_wal_autocheckp
f7b0: 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69 74 65 33  oint(db, sqlite3
f7c0: 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
f7d0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
f7e0: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 77 61 6c  ingleInt(v, "wal
f7f0: 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22  _autocheckpoint"
f800: 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57  , .       db->xW
f810: 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69  alCallback==sqli
f820: 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
f830: 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20  k ? .           
f840: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
f850: 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a  T(db->pWalArg) :
f860: 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
f870: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20  ;.#endif..  /*. 
f880: 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69   **  PRAGMA shri
f890: 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20  nk_memory.  **. 
f8a0: 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
f8b0: 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35 2d 34  ON-OF: R-23445-4
f8c0: 36 31 30 39 20 54 68 69 73 20 70 72 61 67 6d 61  6109 This pragma
f8d0: 20 63 61 75 73 65 73 20 74 68 65 20 64 61 74 61   causes the data
f8e0: 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63  base.  ** connec
f8f0: 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20 69 74  tion on which it
f900: 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 66   is invoked to f
f910: 72 65 65 20 75 70 20 61 73 20 6d 75 63 68 20 6d  ree up as much m
f920: 65 6d 6f 72 79 20 61 73 20 69 74 0a 20 20 2a 2a  emory as it.  **
f930: 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69 6e 67   can, by calling
f940: 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65   sqlite3_db_rele
f950: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a 20 20  ase_memory()..  
f960: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
f970: 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a  p_SHRINK_MEMORY:
f980: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64   {.    sqlite3_d
f990: 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  b_release_memory
f9a0: 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  (db);.    break;
f9b0: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
f9c0: 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69    PRAGMA busy_ti
f9d0: 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52 41  meout.  **   PRA
f9e0: 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74  GMA busy_timeout
f9f0: 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
fa00: 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75 73 79  all sqlite3_busy
fa10: 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e  _timeout(db, N).
fa20: 20 20 52 65 74 75 72 6e 20 74 68 65 20 63 75 72    Return the cur
fa30: 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76 61 6c  rent timeout val
fa40: 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69  ue.  ** if one i
fa50: 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20 62 75  s set.  If no bu
fa60: 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20 61 20  sy handler or a 
fa70: 64 69 66 66 65 72 65 6e 74 20 62 75 73 79 20 68  different busy h
fa80: 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a 20 20  andler is set.  
fa90: 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72 65 74  ** then 0 is ret
faa0: 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e 67 20  urned.  Setting 
fab0: 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f 75 74  the busy_timeout
fac0: 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74 69 76   to 0 or negativ
fad0: 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 73 20  e.  ** disables 
fae0: 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a  the timeout..  *
faf0: 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61 67 54  /.  /*case PragT
fb00: 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 2a  yp_BUSY_TIMEOUT*
fb10: 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20  / default: {.   
fb20: 20 61 73 73 65 72 74 28 20 70 50 72 61 67 6d 61   assert( pPragma
fb30: 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67  ->ePragTyp==Prag
fb40: 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54  Typ_BUSY_TIMEOUT
fb50: 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   );.    if( zRig
fb60: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
fb70: 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
fb80: 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  (db, sqlite3Atoi
fb90: 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d  (zRight));.    }
fba0: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
fbb0: 65 49 6e 74 28 76 2c 20 22 74 69 6d 65 6f 75 74  eInt(v, "timeout
fbc0: 22 2c 20 20 64 62 2d 3e 62 75 73 79 54 69 6d 65  ",  db->busyTime
fbd0: 6f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  out);.    break;
fbe0: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
fbf0: 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65    PRAGMA soft_he
fc00: 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 20  ap_limit.  **   
fc10: 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70  PRAGMA soft_heap
fc20: 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a  _limit = N.  **.
fc30: 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
fc40: 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33 34 33 2d  ION-OF: R-26343-
fc50: 34 35 39 33 30 20 54 68 69 73 20 70 72 61 67 6d  45930 This pragm
fc60: 61 20 69 6e 76 6f 6b 65 73 20 74 68 65 0a 20 20  a invokes the.  
fc70: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f  ** sqlite3_soft_
fc80: 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 29 20 69  heap_limit64() i
fc90: 6e 74 65 72 66 61 63 65 20 77 69 74 68 20 74 68  nterface with th
fca0: 65 20 61 72 67 75 6d 65 6e 74 20 4e 2c 20 69 66  e argument N, if
fcb0: 20 4e 20 69 73 0a 20 20 2a 2a 20 73 70 65 63 69   N is.  ** speci
fcc0: 66 69 65 64 20 61 6e 64 20 69 73 20 61 20 6e 6f  fied and is a no
fcd0: 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
fce0: 65 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  er..  ** IMPLEME
fcf0: 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 36 34  NTATION-OF: R-64
fd00: 34 35 31 2d 30 37 31 36 33 20 54 68 65 20 73 6f  451-07163 The so
fd10: 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 70 72  ft_heap_limit pr
fd20: 61 67 6d 61 20 61 6c 77 61 79 73 0a 20 20 2a 2a  agma always.  **
fd30: 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 61 6d   returns the sam
fd40: 65 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 77  e integer that w
fd50: 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
fd60: 20 62 79 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c   by the.  ** sql
fd70: 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
fd80: 69 6d 69 74 36 34 28 2d 31 29 20 43 2d 6c 61 6e  imit64(-1) C-lan
fd90: 67 75 61 67 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  guage function..
fda0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
fdb0: 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49  Typ_SOFT_HEAP_LI
fdc0: 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  MIT: {.    sqlit
fdd0: 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20  e3_int64 N;.    
fde0: 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 73 71  if( zRight && sq
fdf0: 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
fe00: 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d  64(zRight, &N)==
fe10: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
fe20: 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f     sqlite3_soft_
fe30: 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b  heap_limit64(N);
fe40: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
fe50: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 73  nSingleInt(v, "s
fe60: 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c  oft_heap_limit",
fe70: 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
fe80: 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 29  eap_limit64(-1))
fe90: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
fea0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
feb0: 41 47 4d 41 20 74 68 72 65 61 64 73 0a 20 20 2a  AGMA threads.  *
fec0: 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72 65 61  *   PRAGMA threa
fed0: 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ds = N.  **.  **
fee0: 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 6d   Configure the m
fef0: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
ff00: 20 77 6f 72 6b 65 72 20 74 68 72 65 61 64 73 2e   worker threads.
ff10: 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e 65 77    Return the new
ff20: 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c 20 77  .  ** maximum, w
ff30: 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 6c 65  hich might be le
ff40: 73 73 20 74 68 61 6e 20 72 65 71 75 65 73 74 65  ss than requeste
ff50: 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  d..  */.  case P
ff60: 72 61 67 54 79 70 5f 54 48 52 45 41 44 53 3a 20  ragTyp_THREADS: 
ff70: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  {.    sqlite3_in
ff80: 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a  t64 N;.    if( z
ff90: 52 69 67 68 74 0a 20 20 20 20 20 26 26 20 73 71  Right.     && sq
ffa0: 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
ffb0: 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d  64(zRight, &N)==
ffc0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 26  SQLITE_OK.     &
ffd0: 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a 20 20  & N>=0.    ){.  
ffe0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
fff0: 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d  t(db, SQLITE_LIM
10000 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
10010 53 2c 20 28 69 6e 74 29 28 4e 26 30 78 37 66 66  S, (int)(N&0x7ff
10020 66 66 66 66 66 29 29 3b 0a 20 20 20 20 7d 0a 20  fffff));.    }. 
10030 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
10040 6e 74 28 76 2c 20 22 74 68 72 65 61 64 73 22 2c  nt(v, "threads",
10050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10060 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d       sqlite3_lim
10070 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49  it(db, SQLITE_LI
10080 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
10090 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62 72  DS, -1));.    br
100a0 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65  eak;.  }..#if de
100b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
100c0 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
100d0 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a  QLITE_TEST).  /*
100e0 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65  .  ** Report the
100f0 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f   current state o
10100 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20  f file logs for 
10110 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20  all databases.  
10120 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
10130 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b  p_LOCK_STATUS: {
10140 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
10150 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a  t char *const az
10160 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20  LockName[] = {. 
10170 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c       "unlocked",
10180 20 22 73 68 61 72 65 64 22 2c 20 22 72 65 73 65   "shared", "rese
10190 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22  rved", "pending"
101a0 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20  , "exclusive".  
101b0 20 20 7d 3b 0a 20 20 20 20 73 74 61 74 69 63 20    };.    static 
101c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f  const char *azCo
101d0 6c 5b 5d 20 3d 20 7b 20 22 64 61 74 61 62 61 73  l[] = { "databas
101e0 65 22 2c 20 22 73 74 61 74 75 73 22 20 7d 3b 0a  e", "status" };.
101f0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73      int i;.    s
10200 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
10210 28 76 2c 20 32 2c 20 61 7a 43 6f 6c 29 3b 20 61  (v, 2, azCol); a
10220 73 73 65 72 74 28 20 32 3d 3d 41 72 72 61 79 53  ssert( 2==ArrayS
10230 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
10240 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
10250 20 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   2;.    for(i=0;
10260 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
10270 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a 70  {.      Btree *p
10280 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  Bt;.      const 
10290 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20 22  char *zState = "
102a0 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20  unknown";.      
102b0 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66 28  int j;.      if(
102c0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
102d0 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  e==0 ) continue;
102e0 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d  .      pBt = db-
102f0 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20  >aDb[i].pBt;.   
10300 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c     if( pBt==0 ||
10310 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
10320 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20  er(pBt)==0 ){.  
10330 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22        zState = "
10340 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d  closed";.      }
10350 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
10360 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
10370 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d  , i ? db->aDb[i]
10380 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20  .zName : 0, .   
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103b0 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c    SQLITE_FCNTL_L
103c0 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53  OCKSTATE, &j)==S
103d0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
103e0 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a       zState = az
103f0 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20  LockName[j];.   
10400 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
10410 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
10420 76 2c 20 31 2c 20 22 73 73 22 2c 20 64 62 2d 3e  v, 1, "ss", db->
10430 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 53  aDb[i].zName, zS
10440 74 61 74 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  tate);.      sql
10450 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10460 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
10470 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20  1, 2);.    }.   
10480 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
10490 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
104a0 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61  E_HAS_CODEC.  ca
104b0 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20  se PragTyp_KEY: 
104c0 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
104d0 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76   ) sqlite3_key_v
104e0 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68  2(db, zDb, zRigh
104f0 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  t, sqlite3Strlen
10500 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  30(zRight));.   
10510 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61   break;.  }.  ca
10520 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59  se PragTyp_REKEY
10530 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
10540 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b  ht ) sqlite3_rek
10550 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
10560 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74  Right, sqlite3St
10570 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b  rlen30(zRight));
10580 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
10590 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48    case PragTyp_H
105a0 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28  EXKEY: {.    if(
105b0 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
105c0 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20   u8 iByte;.     
105d0 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68   int i;.      ch
105e0 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20  ar zKey[40];.   
105f0 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74     for(i=0, iByt
10600 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b  e=0; i<sizeof(zK
10610 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33  ey)*2 && sqlite3
10620 49 73 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b  Isxdigit(zRight[
10630 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  i]); i++){.     
10640 20 20 20 69 42 79 74 65 20 3d 20 28 69 42 79 74     iByte = (iByt
10650 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48  e<<4) + sqlite3H
10660 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69  exToInt(zRight[i
10670 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ]);.        if( 
10680 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b  (i&1)!=0 ) zKey[
10690 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20  i/2] = iByte;.  
106a0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
106b0 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29  (zLeft[3] & 0xf)
106c0 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20  ==0xb ){.       
106d0 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28   sqlite3_key_v2(
106e0 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69  db, zDb, zKey, i
106f0 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  /2);.      }else
10700 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
10710 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a  3_rekey_v2(db, z
10720 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a  Db, zKey, i/2);.
10730 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
10740 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
10750 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
10760 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
10770 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
10780 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
10790 29 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ).  case PragTyp
107a0 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53  _ACTIVATE_EXTENS
107b0 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74  IONS: if( zRight
107c0 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
107d0 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20  E_HAS_CODEC.    
107e0 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
107f0 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65  Cmp(zRight, "see
10800 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 4)==0 ){.   
10810 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
10820 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b  ate_see(&zRight[
10830 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  4]);.    }.#endi
10840 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
10850 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20  ENABLE_CEROD.   
10860 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
10870 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65  ICmp(zRight, "ce
10880 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a  rod-", 6)==0 ){.
10890 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
108a0 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52  tivate_cerod(&zR
108b0 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a  ight[6]);.    }.
108c0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
108d0 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20  ak;.#endif..  } 
108e0 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52  /* End of the PR
108f0 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a  AGMA switch */..
10900 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71  pragma_out:.  sq
10910 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
10920 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65  zLeft);.  sqlite
10930 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52 69 67  3DbFree(db, zRig
10940 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  ht);.}..#endif /
10950 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
10960 41 47 4d 41 20 2a 2f 0a                          AGMA */.