/ Hex Artifact Content
Login

Artifact 8042d2b202140c49ffccb267aaa2012b50e337e4:


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 47 65 6e 65 72   */../*.** Gener
14a0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
14b0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
14c0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
14d0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
14e0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
14f0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
1500: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
1510: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
1520: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
1530: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
1540: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
1550: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
1560: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
1570: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
1580: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
1590: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
15a0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
15b0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
15c0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
15d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
15e0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
15f0: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
1600: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
1610: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
1620: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
1630: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
1640: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
1650: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
1660: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
1670: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
1680: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
1690: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
16a0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
16b0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
16c0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
16d0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
16e0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
16f0: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
1700: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
1710: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
1720: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1730: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
1740: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
1750: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
1760: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
1770: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
1780: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
1790: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
17a0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
17b0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
17c0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
17d0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
17e0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
17f0: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
1800: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
1810: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1820: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
1830: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
1840: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
1850: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
1860: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
1870: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
1880: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
1890: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
18a0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
18b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
18c0: 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  (pDb->safety_lev
18d0: 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48  el & PAGER_SYNCH
18e0: 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44  RONOUS_MASK)==pD
18f0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
1900: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e  );.    while( (n
1910: 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20  --) > 0 ){.     
1920: 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b   if( pDb->pBt ){
1930: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1940: 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c 61  BtreeSetPagerFla
1950: 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20  gs(pDb->pBt,.   
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
1970: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
1980: 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50  | (db->flags & P
1990: 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29  AGER_FLAGS_MASK)
19a0: 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   );.      }.    
19b0: 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20    pDb++;.    }. 
19c0: 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66   }.}.#else.# def
19d0: 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46  ine setAllPagerF
19e0: 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f  lags(X)  /* no-o
19f0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  p */.#endif.../*
1a00: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d  .** Return a hum
1a10: 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65  an-readable name
1a20: 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e   for a constrain
1a30: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74  t resolution act
1a40: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ion..*/.#ifndef 
1a50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
1a60: 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63  IGN_KEY.static c
1a70: 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f  onst char *actio
1a80: 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29  nName(u8 action)
1a90: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1aa0: 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28  zName;.  switch(
1ab0: 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63   action ){.    c
1ac0: 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20  ase OE_SetNull: 
1ad0: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55   zName = "SET NU
1ae0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  LL";        brea
1af0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  k;.    case OE_S
1b00: 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d  etDflt:  zName =
1b10: 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20   "SET DEFAULT"; 
1b20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
1b30: 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20  ase OE_Cascade: 
1b40: 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44   zName = "CASCAD
1b50: 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  E";         brea
1b60: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52  k;.    case OE_R
1b70: 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d  estrict: zName =
1b80: 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20   "RESTRICT";    
1b90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
1ba0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
1bb0: 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54   zName = "NO ACT
1bc0: 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20  ION";  .        
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
1be0: 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45  sert( action==OE
1bf0: 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a  _None ); break;.
1c00: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61    }.  return zNa
1c10: 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  me;.}.#endif.../
1c20: 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65  *.** Parameter e
1c30: 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65  Mode must be one
1c40: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
1c50: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f  URNALMODE_XXX co
1c60: 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e  nstants.** defin
1c70: 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54  ed in pager.h. T
1c80: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
1c90: 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61  urns the associa
1ca0: 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a  ted lowercase.**
1cb0: 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61   journal-mode na
1cc0: 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  me..*/.const cha
1cd0: 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
1ce0: 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d  lModename(int eM
1cf0: 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63  ode){.  static c
1d00: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f  har * const azMo
1d10: 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  deName[] = {.   
1d20: 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73   "delete", "pers
1d30: 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72  ist", "off", "tr
1d40: 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79  uncate", "memory
1d50: 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
1d60: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c  _OMIT_WAL.     ,
1d70: 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20   "wal".#endif.  
1d80: 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  };.  assert( PAG
1d90: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
1da0: 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73  ELETE==0 );.  as
1db0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
1dc0: 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d  NALMODE_PERSIST=
1dd0: 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
1de0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
1df0: 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73  E_OFF==2 );.  as
1e00: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
1e10: 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
1e20: 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==3 );.  assert(
1e30: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
1e40: 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a  DE_MEMORY==4 );.
1e50: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
1e60: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d  JOURNALMODE_WAL=
1e70: 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =5 );.  assert( 
1e80: 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64  eMode>=0 && eMod
1e90: 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d  e<=ArraySize(azM
1ea0: 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69  odeName) );..  i
1eb0: 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53  f( eMode==ArrayS
1ec0: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
1ed0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
1ee0: 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b  turn azModeName[
1ef0: 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  eMode];.}../*.**
1f00: 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d   Process a pragm
1f10: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a  a statement.  .*
1f20: 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65  *.** Pragmas are
1f30: 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a   of this form:.*
1f40: 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41  *.**      PRAGMA
1f50: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b   [database.]id [
1f60: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
1f70: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
1f80: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
1f90: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
1fa0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
1fb0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
1fc0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
1fd0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
1fe0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
1ff0: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
2000: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
2010: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
2020: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
2030: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
2040: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
2050: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
2060: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
2070: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
2080: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
2090: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
20a0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
20b0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
20c0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
20d0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
20e0: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
20f0: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
2100: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
2110: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
2120: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
2130: 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20  e.]id field */. 
2140: 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20   Token *pId2,   
2150: 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70       /* Second p
2160: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
2170: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
2180: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
2190: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
21a0: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
21b0: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
21c0: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
21d0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
21e0: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
21f0: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
2200: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
2210: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
2220: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
2230: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
2240: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
2250: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
2260: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
2270: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
2280: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
2290: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
22a0: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
22b0: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
22c0: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
22d0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
22e0: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
22f0: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
2300: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
2310: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
2320: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
2330: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
2340: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
2350: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
2360: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
2370: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
2380: 69 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a  id = 0;       /*
2390: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
23a0: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
23b0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
23c0: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
23d0: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
23e0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
23f0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
2400: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
2410: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
2420: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
2430: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2450: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
2460: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
2470: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
2480: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
2490: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
24a0: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
24b0: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
24c0: 20 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e   struct sPragmaN
24d0: 61 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a  ames *pPragma;..
24e0: 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74    if( v==0 ) ret
24f0: 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  urn;.  sqlite3Vd
2500: 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29  beRunOnlyOnce(v)
2510: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  ;.  pParse->nMem
2520: 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65   = 2;..  /* Inte
2530: 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62  rpret the [datab
2540: 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68  ase.] part of th
2550: 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  e pragma stateme
2560: 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20  nt. iDb is the. 
2570: 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ** index of the
2580: 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70   database this p
2590: 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61  ragma is being a
25a0: 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e  pplied to in db.
25b0: 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20  aDb[]. */.  iDb 
25c0: 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  = sqlite3TwoPart
25d0: 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64  Name(pParse, pId
25e0: 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a  1, pId2, &pId);.
25f0: 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65    if( iDb<0 ) re
2600: 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64  turn;.  pDb = &d
2610: 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20  b->aDb[iDb];..  
2620: 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64  /* If the temp d
2630: 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e  atabase has been
2640: 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65   explicitly name
2650: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
2660: 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d   .  ** pragma, m
2670: 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f  ake sure it is o
2680: 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28  pen. .  */.  if(
2690: 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74   iDb==1 && sqlit
26a0: 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
26b0: 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  se(pParse) ){.  
26c0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
26d0: 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33   zLeft = sqlite3
26e0: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
26f0: 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a  , pId);.  if( !z
2700: 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20  Left ) return;. 
2710: 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29   if( minusFlag )
2720: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
2730: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2740: 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29  , "-%T", pValue)
2750: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  ;.  }else{.    z
2760: 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e  Right = sqlite3N
2770: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
2780: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20   pValue);.  }.. 
2790: 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b   assert( pId2 );
27a0: 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e  .  zDb = pId2->n
27b0: 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20  >0 ? pDb->zName 
27c0: 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  : 0;.  if( sqlit
27d0: 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72  e3AuthCheck(pPar
27e0: 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d  se, SQLITE_PRAGM
27f0: 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  A, zLeft, zRight
2800: 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f  , zDb) ){.    go
2810: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2820: 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e   }..  /* Send an
2830: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2840: 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f  AGMA file-contro
2850: 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  l to the underly
2860: 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e  ing VFS.  ** con
2870: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20  nection.  If it 
2880: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
2890: 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74  K, then assume t
28a0: 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a  hat the VFS.  **
28b0: 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61   handled the pra
28c0: 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65  gma and generate
28d0: 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65   a no-op prepare
28e0: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a  d statement..  *
28f0: 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d 20  /.  aFcntl[0] = 
2900: 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20 3d  0;.  aFcntl[1] =
2910: 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74 6c   zLeft;.  aFcntl
2920: 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20  [2] = zRight;.  
2930: 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a 20  aFcntl[3] = 0;. 
2940: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
2950: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 63  .nBusy = 0;.  rc
2960: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f   = sqlite3_file_
2970: 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c  control(db, zDb,
2980: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2990: 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46 63  AGMA, (void*)aFc
29a0: 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ntl);.  if( rc==
29b0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
29c0: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
29d0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65 6d 20  {.      int mem 
29e0: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
29f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
2a00: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
2a10: 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65 6d 2c  String8, 0, mem,
2a20: 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20 30   0, aFcntl[0], 0
2a30: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2a40: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
2a50: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
2a60: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
2a70: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
2a80: 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22 2c 20  NAME, "result", 
2a90: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
2aa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2ab0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
2ac0: 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31 29  sultRow, mem, 1)
2ad0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
2ae0: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
2af0: 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
2b00: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2b10: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2b20: 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20  _NOTFOUND ){.   
2b30: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
2b40: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
2b50: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
2b60: 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29  "%s", aFcntl[0])
2b70: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
2b80: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
2b90: 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72 73  .    }.    pPars
2ba0: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70  e->nErr++;.    p
2bb0: 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a  Parse->rc = rc;.
2bc0: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
2bd0: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c  out;.  }..  /* L
2be0: 6f 63 61 74 65 20 74 68 65 20 70 72 61 67 6d 61  ocate the pragma
2bf0: 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20 74   in the lookup t
2c00: 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d 20  able */.  lwr = 
2c10: 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61 79  0;.  upr = Array
2c20: 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d 65  Size(aPragmaName
2c30: 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20 6c  s)-1;.  while( l
2c40: 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20 6d  wr<=upr ){.    m
2c50: 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f 32  id = (lwr+upr)/2
2c60: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2c70: 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66 74  e3_stricmp(zLeft
2c80: 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  , aPragmaNames[m
2c90: 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  id].zName);.    
2ca0: 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65 61  if( rc==0 ) brea
2cb0: 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30 20  k;.    if( rc<0 
2cc0: 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20 6d  ){.      upr = m
2cd0: 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  id - 1;.    }els
2ce0: 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20 6d  e{.      lwr = m
2cf0: 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20  id + 1;.    }.  
2d00: 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72 20  }.  if( lwr>upr 
2d10: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
2d20: 74 3b 0a 20 20 70 50 72 61 67 6d 61 20 3d 20 26  t;.  pPragma = &
2d30: 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64  aPragmaNames[mid
2d40: 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ];..  /* Make su
2d50: 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
2d60: 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64  schema is loaded
2d70: 20 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 72   if the pragma r
2d80: 65 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f 0a  equires that */.
2d90: 20 20 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e    if( (pPragma->
2da0: 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67  mPragFlag & Prag
2db0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29  Flag_NeedSchema)
2dc0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  !=0 ){.    if( s
2dd0: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
2de0: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
2df0: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2e00: 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68  .  /* Jump to th
2e10: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72  e appropriate pr
2e20: 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a  agma handler */.
2e30: 20 20 73 77 69 74 63 68 28 20 70 50 72 61 67 6d    switch( pPragm
2e40: 61 2d 3e 65 50 72 61 67 54 79 70 20 29 7b 0a 20  a->ePragTyp ){. 
2e50: 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53   .#if !defined(S
2e60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
2e70: 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64 65  _PRAGMAS) && !de
2e80: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2e90: 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20 20  T_DEPRECATED).  
2ea0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
2eb0: 5b 64 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75  [database.]defau
2ec0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20 20  lt_cache_size.  
2ed0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
2ee0: 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61  base.]default_ca
2ef0: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
2f00: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
2f10: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
2f20: 63 75 72 72 65 6e 74 20 70 65 72 73 69 73 74 65  current persiste
2f30: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
2f40: 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  he.  ** page cac
2f50: 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61  he size.  The va
2f60: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  lue returned is 
2f70: 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
2f80: 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73  er of.  ** pages
2f90: 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63   in the page cac
2fa0: 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20  he.  The second 
2fb0: 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74  form sets both t
2fc0: 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20  he current.  ** 
2fd0: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20  page cache size 
2fe0: 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65  value and the pe
2ff0: 72 73 69 73 74 65 6e 74 20 70 61 67 65 20 63 61  rsistent page ca
3000: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20  che size value. 
3010: 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68   ** stored in th
3020: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
3030: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72  .  **.  ** Older
3040: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
3050: 69 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68  ite would set th
3060: 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 20  e default cache 
3070: 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e  size to a.  ** n
3080: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74  egative number t
3090: 6f 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68  o indicate synch
30a0: 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65  ronous=OFF.  The
30b0: 73 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f  se days, synchro
30c0: 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77  nous.  ** is alw
30d0: 61 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c  ays on by defaul
30e0: 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  t regardless of 
30f0: 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20  the sign of the 
3100: 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20  default cache.  
3110: 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f  ** size.  But co
3120: 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74  ntinue to take t
3130: 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75  he absolute valu
3140: 65 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  e of the default
3150: 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65   cache.  ** size
3160: 20 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63   of historical c
3170: 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20  ompatibility..  
3180: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
3190: 70 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  p_DEFAULT_CACHE_
31a0: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74  SIZE: {.    stat
31b0: 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e  ic const int iLn
31c0: 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c   = VDBE_OFFSET_L
31d0: 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74  INENO(2);.    st
31e0: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
31f0: 70 4c 69 73 74 20 67 65 74 43 61 63 68 65 53 69  pList getCacheSi
3200: 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  ze[] = {.      {
3210: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
3220: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
3230: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
3240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a            /* 0 *
3250: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61  /.      { OP_Rea
3260: 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20  dCookie,  0, 1, 
3270: 20 20 20 20 20 20 20 42 54 52 45 45 5f 44 45 46         BTREE_DEF
3280: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d  AULT_CACHE_SIZE}
3290: 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20  ,  /* 1 */.     
32a0: 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20   { OP_IfPos,    
32b0: 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20     1, 8,        
32c0: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  0},.      { OP_I
32d0: 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32  nteger,     0, 2
32e0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
32f0: 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74     { OP_Subtract
3300: 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20  ,    1, 2,      
3310: 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    1},.      { OP
3320: 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c  _IfPos,       1,
3330: 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   8,        0},. 
3340: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
3350: 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20  r,     0, 1,    
3360: 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20      0},         
3370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3380: 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 6 */.      { 
3390: 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20  OP_Noop,        
33a0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
33b0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75  .      { OP_Resu
33c0: 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20  ltRow,   1, 1,  
33d0: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b        0},.    };
33e0: 0a 20 20 20 20 69 6e 74 20 61 64 64 72 3b 0a 20  .    int addr;. 
33f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
3400: 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b  esBtree(v, iDb);
3410: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
3420: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
3430: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
3440: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
3450: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
3460: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
3470: 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65 5f 73 69  _NAME, "cache_si
3480: 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ze", SQLITE_STAT
3490: 49 43 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73  IC);.      pPars
34a0: 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20  e->nMem += 2;.  
34b0: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
34c0: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
34d0: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74  v, ArraySize(get
34e0: 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43  CacheSize), getC
34f0: 61 63 68 65 53 69 7a 65 2c 69 4c 6e 29 3b 0a 20  acheSize,iLn);. 
3500: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3510: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
3520: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
3530: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
3540: 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 44 62  1(v, addr+1, iDb
3550: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3560: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
3570: 61 64 64 72 2b 36 2c 20 53 51 4c 49 54 45 5f 44  addr+6, SQLITE_D
3580: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
3590: 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  E);.    }else{. 
35a0: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
35b0: 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
35c0: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
35d0: 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ht));.      sqli
35e0: 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
35f0: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30  ration(pParse, 0
3600: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
3610: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
3620: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 73  v, OP_Integer, s
3630: 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  ize, 1);.      s
3640: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
3650: 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  (v, OP_SetCookie
3660: 2c 20 69 44 62 2c 20 42 54 52 45 45 5f 44 45 46  , iDb, BTREE_DEF
3670: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 2c  AULT_CACHE_SIZE,
3680: 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72   1);.      asser
3690: 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
36a0: 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
36b0: 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70  b, 0) );.      p
36c0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
36d0: 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a  he_size = size;.
36e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
36f0: 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28 70  eeSetCacheSize(p
3700: 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53  Db->pBt, pDb->pS
3710: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
3720: 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  e);.    }.    br
3730: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
3740: 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  /* !SQLITE_OMIT_
3750: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 26 26  PAGER_PRAGMAS &&
3760: 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45   !SQLITE_OMIT_DE
3770: 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 20 20 2f  PRECATED */..  /
3780: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
3790: 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65 72 5f  database.]pager_
37a0: 6f 74 61 5f 6d 6f 64 65 3d 5b 30 31 5d 0a 20 20  ota_mode=[01].  
37b0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 61  **.  ** This pra
37c0: 67 6d 61 20 73 65 74 73 20 61 20 66 6c 61 67 20  gma sets a flag 
37d0: 6f 6e 20 74 68 65 20 70 61 67 65 72 20 61 73 73  on the pager ass
37e0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
37f0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 0a 20   main database. 
3800: 20 2a 2a 20 6f 6e 6c 79 2e 20 54 68 65 20 66 6c   ** only. The fl
3810: 61 67 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 73  ag can only be s
3820: 65 74 20 77 68 65 6e 20 74 68 65 72 65 20 69 73  et when there is
3830: 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   no open transac
3840: 74 69 6f 6e 20 61 6e 64 20 0a 20 20 2a 2a 20 74  tion and .  ** t
3850: 68 65 20 70 61 67 65 72 20 64 6f 65 73 20 6e 6f  he pager does no
3860: 74 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61  t already have a
3870: 6e 20 6f 70 65 6e 20 57 41 4c 20 66 69 6c 65 2e  n open WAL file.
3880: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6e 63 65 20  .  **.  ** Once 
3890: 74 68 65 20 66 6c 61 67 20 68 61 73 20 62 65 65  the flag has bee
38a0: 6e 20 73 65 74 2c 20 69 74 20 69 73 20 6e 6f 74  n set, it is not
38b0: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 6f 70 65   possible to ope
38c0: 6e 20 61 20 72 65 67 75 6c 61 72 20 57 41 4c 0a  n a regular WAL.
38d0: 20 20 2a 2a 20 66 69 6c 65 2e 20 49 66 2c 20 77    ** file. If, w
38e0: 68 65 6e 20 74 68 65 20 6e 65 78 74 20 72 65 61  hen the next rea
38f0: 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
3900: 20 6f 70 65 6e 65 64 2c 20 61 20 2a 2d 77 61 6c   opened, a *-wal
3910: 20 66 69 6c 65 20 69 73 20 0a 20 20 2a 2a 20 66   file is .  ** f
3920: 6f 75 6e 64 20 6f 72 20 74 68 65 20 64 61 74 61  ound or the data
3930: 62 61 73 65 20 68 65 61 64 65 72 20 66 6c 61 67  base header flag
3940: 73 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20  s indicate that 
3950: 69 74 20 69 73 20 61 20 77 61 6c 2d 6d 6f 64 65  it is a wal-mode
3960: 20 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2c   .  ** database,
3970: 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
3980: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 20 20   is returned..  
3990: 2a 2a 0a 20 20 2a 2a 20 4f 74 68 65 72 77 69 73  **.  ** Otherwis
39a0: 65 2c 20 69 66 20 6e 6f 20 57 41 4c 20 66 69 6c  e, if no WAL fil
39b0: 65 20 6f 72 20 66 6c 61 67 73 20 61 72 65 20 66  e or flags are f
39c0: 6f 75 6e 64 2c 20 74 68 65 20 70 61 67 65 72 20  ound, the pager 
39d0: 6f 70 65 6e 73 20 74 68 65 20 2a 2d 6f 61 6c 0a  opens the *-oal.
39e0: 20 20 2a 2a 20 66 69 6c 65 20 61 6e 64 20 75 73    ** file and us
39f0: 65 73 20 69 74 20 61 73 20 61 20 77 72 69 74 65  es it as a write
3a00: 2d 61 68 65 61 64 2d 6c 6f 67 20 77 69 74 68 20  -ahead-log with 
3a10: 74 68 65 20 2a 2d 73 68 6d 20 64 61 74 61 20 73  the *-shm data s
3a20: 74 6f 72 65 64 20 69 6e 0a 20 20 2a 2a 20 68 65  tored in.  ** he
3a30: 61 70 2d 6d 65 6d 6f 72 79 2e 20 49 66 20 74 68  ap-memory. If th
3a40: 65 20 2a 2d 6f 61 6c 20 66 69 6c 65 20 61 6c 72  e *-oal file alr
3a50: 65 61 64 79 20 65 78 69 73 74 73 20 62 75 74 20  eady exists but 
3a60: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3a70: 65 20 68 61 73 0a 20 20 2a 2a 20 62 65 65 6e 20  e has.  ** been 
3a80: 6d 6f 64 69 66 69 65 64 20 73 69 6e 63 65 20 69  modified since i
3a90: 74 20 77 61 73 20 63 72 65 61 74 65 64 2c 20 61  t was created, a
3aa0: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e  n SQLITE_BUSY_SN
3ab0: 41 50 53 48 4f 54 20 65 72 72 6f 72 20 69 73 0a  APSHOT error is.
3ac0: 20 20 2a 2a 20 72 65 74 75 72 6e 65 64 20 61 6e    ** returned an
3ad0: 64 20 74 68 65 20 72 65 61 64 2d 74 72 61 6e 73  d the read-trans
3ae0: 61 63 74 69 6f 6e 20 63 61 6e 6e 6f 74 20 62 65  action cannot be
3af0: 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20   opened..  **.  
3b00: 2a 2a 20 4f 74 68 65 72 20 63 6c 69 65 6e 74 73  ** Other clients
3b10: 20 73 65 65 20 61 20 72 6f 6c 6c 62 61 63 6b 2d   see a rollback-
3b20: 6d 6f 64 65 20 64 61 74 61 62 61 73 65 20 6f 6e  mode database on
3b30: 20 77 68 69 63 68 20 74 68 65 20 70 61 67 65 72   which the pager
3b40: 5f 6f 74 61 5f 6d 6f 64 65 0a 20 20 2a 2a 20 63  _ota_mode.  ** c
3b50: 6c 69 65 6e 74 20 69 73 20 68 6f 6c 64 69 6e 67  lient is holding
3b60: 20 61 20 53 48 41 52 45 44 20 6c 6f 63 6b 2e 0a   a SHARED lock..
3b70: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
3b80: 54 45 5f 45 4e 41 42 4c 45 5f 4f 54 41 0a 20 20  TE_ENABLE_OTA.  
3b90: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47  case PragTyp_PAG
3ba0: 45 52 5f 4f 54 41 5f 4d 4f 44 45 3a 20 7b 0a 20  ER_OTA_MODE: {. 
3bb0: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
3bc0: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73  pDb->pBt;.    as
3bd0: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
3be0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
3bf0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 41 72 67  {.      int iArg
3c00: 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a   = sqlite3Atoi(z
3c10: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 50 61  Right);.      Pa
3c20: 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71  ger *pPager = sq
3c30: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
3c40: 70 42 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  pBt);.      if( 
3c50: 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
3c60: 52 65 61 64 54 72 61 6e 73 28 70 42 74 29 20 29  ReadTrans(pBt) )
3c70: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
3c80: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
3c90: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
3ca0: 63 61 6e 6e 6f 74 20 73 65 74 20 70 61 67 65 72  cannot set pager
3cb0: 5f 6f 74 61 5f 6d 6f 64 65 20 77 69 74 68 20 6f  _ota_mode with o
3cc0: 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  pen transaction"
3cd0: 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20  .        );.    
3ce0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
3cf0: 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f  te3PagerWalSuppo
3d00: 72 74 65 64 28 70 50 61 67 65 72 29 3d 3d 30 20  rted(pPager)==0 
3d10: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
3d20: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
3d30: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  e,.            "
3d40: 63 61 6e 6e 6f 74 20 73 65 74 20 70 61 67 65 72  cannot set pager
3d50: 5f 6f 74 61 5f 6d 6f 64 65 20 77 69 74 68 6f 75  _ota_mode withou
3d60: 74 20 77 61 6c 20 73 75 70 70 6f 72 74 22 0a 20  t wal support". 
3d70: 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
3d80: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
3d90: 33 50 61 67 65 72 53 65 74 4f 74 61 4d 6f 64 65  3PagerSetOtaMode
3da0: 28 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67  (sqlite3BtreePag
3db0: 65 72 28 70 42 74 29 2c 20 69 41 72 67 29 20 29  er(pBt), iArg) )
3dc0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
3dd0: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
3de0: 2c 20 22 63 61 6e 6e 6f 74 20 73 65 74 20 70 61  , "cannot set pa
3df0: 67 65 72 5f 6f 74 61 5f 6d 6f 64 65 20 69 6e 20  ger_ota_mode in 
3e00: 77 61 6c 20 6d 6f 64 65 22 29 3b 0a 20 20 20 20  wal mode");.    
3e10: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
3e20: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
3e30: 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  /* SQLITE_ENABLE
3e40: 5f 4f 54 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65  _OTA */..#if !de
3e50: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3e60: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
3e70: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
3e80: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61  MA [database.]pa
3e90: 67 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  ge_size.  **  PR
3ea0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
3eb0: 70 61 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  page_size=N.  **
3ec0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
3ed0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
3ee0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
3ef0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64 61   for the.  ** da
3f00: 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
3f10: 20 69 6e 20 62 79 74 65 73 2e 20 20 54 68 65 20   in bytes.  The 
3f20: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73  second form sets
3f30: 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61   the.  ** databa
3f40: 73 65 20 70 61 67 65 20 73 69 7a 65 20 76 61 6c  se page size val
3f50: 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63  ue.  The value c
3f60: 61 6e 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69  an only be set i
3f70: 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
3f80: 61 73 65 20 68 61 73 20 6e 6f 74 20 79 65 74 20  ase has not yet 
3f90: 62 65 65 6e 20 63 72 65 61 74 65 64 2e 0a 20 20  been created..  
3fa0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
3fb0: 70 5f 50 41 47 45 5f 53 49 5a 45 3a 20 7b 0a 20  p_PAGE_SIZE: {. 
3fc0: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
3fd0: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73  pDb->pBt;.    as
3fe0: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
3ff0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
4000: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  ){.      int siz
4010: 65 20 3d 20 41 4c 57 41 59 53 28 70 42 74 29 20  e = ALWAYS(pBt) 
4020: 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  ? sqlite3BtreeGe
4030: 74 50 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a  tPageSize(pBt) :
4040: 20 30 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   0;.      return
4050: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
4060: 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73  , "page_size", s
4070: 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ize);.    }else{
4080: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63  .      /* Malloc
4090: 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73   may fail when s
40a0: 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d  etting the page-
40b0: 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69  size, as there i
40c0: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20  s an internal.  
40d0: 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68      ** buffer th
40e0: 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64  at the pager mod
40f0: 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e  ule resizes usin
4100: 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  g sqlite3_reallo
4110: 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  c()..      */.  
4120: 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65      db->nextPage
4130: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
4140: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
4150: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d    if( SQLITE_NOM
4160: 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  EM==sqlite3Btree
4170: 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c  SetPageSize(pBt,
4180: 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a   db->nextPagesiz
4190: 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20  e,-1,0) ){.     
41a0: 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69     db->mallocFai
41b0: 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  led = 1;.      }
41c0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
41d0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
41e0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
41f0: 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74  se.]secure_delet
4200: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
4210: 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65  database.]secure
4220: 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20  _delete=ON/OFF. 
4230: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
4240: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
4250: 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74  the current sett
4260: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
4270: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66   secure_delete f
4280: 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  lag.  The second
4290: 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68   form changes th
42a0: 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  e secure_delete.
42b0: 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e    ** flag settin
42c0: 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68  g and reports th
42d0: 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f  enew value..  */
42e0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
42f0: 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b  SECURE_DELETE: {
4300: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
4310: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
4320: 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20  int b = -1;.    
4330: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
4340: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
4350: 20 29 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71   ){.      b = sq
4360: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
4370: 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20  zRight, 0);.    
4380: 7d 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  }.    if( pId2->
4390: 6e 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a  n==0 && b>=0 ){.
43a0: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
43b0: 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
43c0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
43d0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
43e0: 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65 74  BtreeSecureDelet
43f0: 65 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  e(db->aDb[ii].pB
4400: 74 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t, b);.      }. 
4410: 20 20 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c     }.    b = sql
4420: 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65 44  ite3BtreeSecureD
4430: 65 6c 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20  elete(pBt, b);. 
4440: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
4450: 6e 74 28 70 50 61 72 73 65 2c 20 22 73 65 63 75  nt(pParse, "secu
4460: 72 65 5f 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a  re_delete", b);.
4470: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
4480: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
4490: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78  A [database.]max
44a0: 5f 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a  _page_count.  **
44b0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
44c0: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
44d0: 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  nt=N.  **.  ** T
44e0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
44f0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
4500: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
4510: 65 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e  e.  ** maximum n
4520: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
4530: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
4540: 69 6c 65 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20  ile.  The .  ** 
4550: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65  second form atte
4560: 6d 70 74 73 20 74 6f 20 63 68 61 6e 67 65 20 74  mpts to change t
4570: 68 69 73 20 73 65 74 74 69 6e 67 2e 20 20 42 6f  his setting.  Bo
4580: 74 68 0a 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65  th.  ** forms re
4590: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
45a0: 20 73 65 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20   setting..  **. 
45b0: 20 2a 2a 20 54 68 65 20 61 62 73 6f 6c 75 74 65   ** The absolute
45c0: 20 76 61 6c 75 65 20 6f 66 20 4e 20 69 73 20 75   value of N is u
45d0: 73 65 64 2e 20 20 54 68 69 73 20 69 73 20 75 6e  sed.  This is un
45e0: 64 6f 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d  documented and m
45f0: 69 67 68 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65  ight.  ** change
4600: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 70 75 72 70  .  The only purp
4610: 6f 73 65 20 69 73 20 74 6f 20 70 72 6f 76 69 64  ose is to provid
4620: 65 20 61 6e 20 65 61 73 79 20 77 61 79 20 74 6f  e an easy way to
4630: 20 74 65 73 74 0a 20 20 2a 2a 20 74 68 65 20 73   test.  ** the s
4640: 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 29  qlite3AbsInt32()
4650: 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a   function..  **.
4660: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
4670: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75  tabase.]page_cou
4680: 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  nt.  **.  ** Ret
4690: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
46a0: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
46b0: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
46c0: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
46d0: 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e  ragTyp_PAGE_COUN
46e0: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 52 65  T: {.    int iRe
46f0: 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  g;.    sqlite3Co
4700: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
4710: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
4720: 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65   iReg = ++pParse
4730: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20  ->nMem;.    if( 
4740: 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a  sqlite3Tolower(z
4750: 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b  Left[0])=='p' ){
4760: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4770: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50  beAddOp2(v, OP_P
4780: 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69  agecount, iDb, i
4790: 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Reg);.    }else{
47a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
47b0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d  beAddOp3(v, OP_M
47c0: 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52  axPgcnt, iDb, iR
47d0: 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  eg, .           
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
47f0: 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c  ite3AbsInt32(sql
4800: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
4810: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ));.    }.    sq
4820: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
4830: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
4840: 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73   iReg, 1);.    s
4850: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
4860: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
4870: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
4880: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
4890: 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
48a0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
48b0: 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  T);.    break;. 
48c0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
48d0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
48e0: 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20  ]locking_mode.  
48f0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
4900: 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f  base.]locking_mo
4910: 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63  de = (normal|exc
4920: 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63  lusive).  */.  c
4930: 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b  ase PragTyp_LOCK
4940: 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  ING_MODE: {.    
4950: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74  const char *zRet
4960: 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20   = "normal";.   
4970: 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74   int eMode = get
4980: 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67  LockingMode(zRig
4990: 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49  ht);..    if( pI
49a0: 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64  d2->n==0 && eMod
49b0: 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  e==PAGER_LOCKING
49c0: 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20  MODE_QUERY ){.  
49d0: 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50      /* Simple "P
49e0: 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f  RAGMA locking_mo
49f0: 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  de;" statement. 
4a00: 54 68 69 73 20 69 73 20 61 20 71 75 65 72 79 20  This is a query 
4a10: 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  for.      ** the
4a20: 20 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74   current default
4a30: 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77   locking mode (w
4a40: 68 69 63 68 20 6d 61 79 20 62 65 20 64 69 66 66  hich may be diff
4a50: 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a  erent to.      *
4a60: 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  * the locking-mo
4a70: 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64  de of the main d
4a80: 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20  atabase)..      
4a90: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
4aa0: 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64   db->dfltLockMod
4ab0: 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
4ac0: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
4ad0: 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  r;.      if( pId
4ae0: 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20  2->n==0 ){.     
4af0: 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63     /* This indic
4b00: 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74  ates that no dat
4b10: 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73  abase name was s
4b20: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
4b30: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74  .        ** of t
4b40: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
4b50: 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
4b60: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
4b70: 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20 20   must be.       
4b80: 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61   ** set on all a
4b90: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
4ba0: 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68  s, as well as th
4bb0: 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a  e main db file..
4bc0: 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20          **.     
4bd0: 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20     ** Also, the 
4be0: 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b  sqlite3.dfltLock
4bf0: 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69 73  Mode variable is
4c00: 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20   set so that.   
4c10: 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73       ** any subs
4c20: 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65  equently attache
4c30: 64 20 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f  d databases also
4c40: 20 75 73 65 20 74 68 65 20 73 70 65 63 69 66 69   use the specifi
4c50: 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f  ed.        ** lo
4c60: 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20  cking mode..    
4c70: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
4c80: 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61  nt ii;.        a
4c90: 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e  ssert(pDb==&db->
4ca0: 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  aDb[0]);.       
4cb0: 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62   for(ii=2; ii<db
4cc0: 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
4cd0: 20 20 20 20 20 20 20 20 70 50 61 67 65 72 20 3d          pPager =
4ce0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
4cf0: 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  er(db->aDb[ii].p
4d00: 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Bt);.          s
4d10: 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69  qlite3PagerLocki
4d20: 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  ngMode(pPager, e
4d30: 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d  Mode);.        }
4d40: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c  .        db->dfl
4d50: 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29  tLockMode = (u8)
4d60: 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20  eMode;.      }. 
4d70: 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71       pPager = sq
4d80: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
4d90: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
4da0: 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33   eMode = sqlite3
4db0: 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65  PagerLockingMode
4dc0: 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b  (pPager, eMode);
4dd0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65  .    }..    asse
4de0: 72 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52  rt( eMode==PAGER
4df0: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52  _LOCKINGMODE_NOR
4e00: 4d 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  MAL.            
4e10: 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  || eMode==PAGER_
4e20: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
4e30: 55 53 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28  USIVE );.    if(
4e40: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4e50: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
4e60: 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65  IVE ){.      zRe
4e70: 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b  t = "exclusive";
4e80: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
4e90: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
4ea0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 1);.    sqli
4eb0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
4ec0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
4ed0: 4e 41 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d  NAME, "locking_m
4ee0: 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ode", SQLITE_STA
4ef0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
4f00: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
4f10: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
4f20: 20 30 2c 20 7a 52 65 74 2c 20 30 29 3b 0a 20 20   0, zRet, 0);.  
4f30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4f40: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
4f50: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
4f60: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
4f70: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
4f80: 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c  atabase.]journal
4f90: 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47  _mode.  **  PRAG
4fa0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f  MA [database.]jo
4fb0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20 20 2a  urnal_mode =.  *
4fc0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
4fd0: 20 20 20 20 20 20 20 28 64 65 6c 65 74 65 7c 70         (delete|p
4fe0: 65 72 73 69 73 74 7c 6f 66 66 7c 74 72 75 6e 63  ersist|off|trunc
4ff0: 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c 7c 6f  ate|memory|wal|o
5000: 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ff).  */.  case 
5010: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
5020: 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20  MODE: {.    int 
5030: 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 2f 2a  eMode;        /*
5040: 20 4f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45   One of the PAGE
5050: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
5060: 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20  X symbols */.   
5070: 20 69 6e 74 20 69 69 3b 20 20 20 20 20 20 20 20   int ii;        
5080: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
5090: 65 72 20 2a 2f 0a 0a 20 20 20 20 73 71 6c 69 74  er */..    sqlit
50a0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
50b0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 1);.    sqli
50c0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
50d0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
50e0: 4e 41 4d 45 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d  NAME, "journal_m
50f0: 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ode", SQLITE_STA
5100: 54 49 43 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a  TIC);..    if( z
5110: 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Right==0 ){.    
5120: 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
5130: 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74   no "=MODE" part
5140: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20   of the pragma, 
5150: 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72 20 74  do a query for t
5160: 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  he.      ** curr
5170: 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20  ent mode */.    
5180: 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f    eMode = PAGER_
5190: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
51a0: 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
51b0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
51c0: 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74  zMode;.      int
51d0: 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c   n = sqlite3Strl
51e0: 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20  en30(zRight);.  
51f0: 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b      for(eMode=0;
5200: 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65   (zMode = sqlite
5210: 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
5220: 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f  (eMode))!=0; eMo
5230: 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  de++){.        i
5240: 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
5250: 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65  mp(zRight, zMode
5260: 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  , n)==0 ) break;
5270: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5280: 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20  f( !zMode ){.   
5290: 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22       /* If the "
52a0: 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73  =MODE" part does
52b0: 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b   not match any k
52c0: 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  nown journal mod
52d0: 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  e,.        ** th
52e0: 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f  en do a query */
52f0: 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
5300: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
5310: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20  DE_QUERY;.      
5320: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
5330: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55  eMode==PAGER_JOU
5340: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26  RNALMODE_QUERY &
5350: 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a  & pId2->n==0 ){.
5360: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
5370: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
5380: 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41  _mode" into "PRA
5390: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
53a0: 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20  _mode" */.      
53b0: 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  iDb = 0;.      p
53c0: 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20  Id2->n = 1;.    
53d0: 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d  }.    for(ii=db-
53e0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
53f0: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i--){.      if( 
5400: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20  db->aDb[ii].pBt 
5410: 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70  && (ii==iDb || p
5420: 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20  Id2->n==0) ){.  
5430: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5440: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 69  eUsesBtree(v, ii
5450: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5460: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
5470: 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20  OP_JournalMode, 
5480: 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20  ii, 1, eMode);. 
5490: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
54a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
54b0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
54c0: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62  ow, 1, 1);.    b
54d0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
54e0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
54f0: 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f  tabase.]journal_
5500: 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20  size_limit.  ** 
5510: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
5520: 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f  e.]journal_size_
5530: 6c 69 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  limit=N.  **.  *
5540: 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74 68 65  * Get or set the
5550: 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72   size limit on r
5560: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
5570: 66 69 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61  files..  */.  ca
5580: 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  se PragTyp_JOURN
5590: 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b  AL_SIZE_LIMIT: {
55a0: 0a 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67  .    Pager *pPag
55b0: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
55c0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
55d0: 3b 0a 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74  ;.    i64 iLimit
55e0: 20 3d 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a   = -2;.    if( z
55f0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
5600: 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
5610: 49 36 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  I64(zRight, &iLi
5620: 6d 69 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  mit);.      if( 
5630: 69 4c 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d  iLimit<-1 ) iLim
5640: 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20  it = -1;.    }. 
5650: 20 20 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69     iLimit = sqli
5660: 74 65 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53  te3PagerJournalS
5670: 69 7a 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c  izeLimit(pPager,
5680: 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65   iLimit);.    re
5690: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
56a0: 61 72 73 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73  arse, "journal_s
56b0: 69 7a 65 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d  ize_limit", iLim
56c0: 69 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  it);.    break;.
56d0: 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53    }..#endif /* S
56e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
56f0: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f  _PRAGMAS */..  /
5700: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
5710: 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76  database.]auto_v
5720: 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47  acuum.  **  PRAG
5730: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75  MA [database.]au
5740: 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a  to_vacuum=N.  **
5750: 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74  .  ** Get or set
5760: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
5770: 65 20 64 61 74 61 62 61 73 65 20 27 61 75 74 6f  e database 'auto
5780: 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74  -vacuum' paramet
5790: 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c  er..  ** The val
57a0: 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30  ue is one of:  0
57b0: 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49   NONE 1 FULL 2 I
57c0: 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a  NCREMENTAL.  */.
57d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
57e0: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
57f0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 55   case PragTyp_AU
5800: 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20  TO_VACUUM: {.   
5810: 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44   Btree *pBt = pD
5820: 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65  b->pBt;.    asse
5830: 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20  rt( pBt!=0 );.  
5840: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
5850: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
5860: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
5870: 61 75 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71  auto_vacuum", sq
5880: 6c 69 74 65 33 42 74 72 65 65 47 65 74 41 75 74  lite3BtreeGetAut
5890: 6f 56 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20  oVacuum(pBt));. 
58a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
58b0: 69 6e 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41  int eAuto = getA
58c0: 75 74 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74  utoVacuum(zRight
58d0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
58e0: 20 65 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75   eAuto>=0 && eAu
58f0: 74 6f 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64  to<=2 );.      d
5900: 62 2d 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d  b->nextAutovac =
5910: 20 28 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20   (u8)eAuto;.    
5920: 20 20 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74    /* Call SetAut
5930: 6f 56 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74  oVacuum() to set
5940: 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   initialize the 
5950: 69 6e 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e  internal auto an
5960: 64 0a 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d  d.      ** incr-
5970: 76 61 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68  vacuum flags. Th
5980: 69 73 20 69 73 20 72 65 71 75 69 72 65 64 20 69  is is required i
5990: 6e 20 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e  n case this conn
59a0: 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20  ection.      ** 
59b0: 63 72 65 61 74 65 73 20 74 68 65 20 64 61 74 61  creates the data
59c0: 62 61 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73  base file. It is
59d0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20   important that 
59e0: 69 74 20 69 73 20 63 72 65 61 74 65 64 0a 20 20  it is created.  
59f0: 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74      ** as an aut
5a00: 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65  o-vacuum capable
5a10: 20 64 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20   db..      */.  
5a20: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
5a30: 42 74 72 65 65 53 65 74 41 75 74 6f 56 61 63 75  BtreeSetAutoVacu
5a40: 75 6d 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a  um(pBt, eAuto);.
5a50: 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
5a60: 4c 49 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74  LITE_OK && (eAut
5a70: 6f 3d 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32  o==1 || eAuto==2
5a80: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  ) ){.        /* 
5a90: 57 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65  When setting the
5aa0: 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64   auto_vacuum mod
5ab0: 65 20 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c  e to either "ful
5ac0: 6c 22 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a  l" or .        *
5ad0: 2a 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c  * "incremental",
5ae0: 20 77 72 69 74 65 20 74 68 65 20 76 61 6c 75 65   write the value
5af0: 20 6f 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74   of meta[6] in t
5b00: 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
5b10: 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66      ** file. Bef
5b20: 6f 72 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d  ore writing to m
5b30: 65 74 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68  eta[6], check th
5b40: 61 74 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63  at meta[3] indic
5b50: 61 74 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20  ates.        ** 
5b60: 74 68 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79  that this really
5b70: 20 69 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75   is an auto-vacu
5b80: 75 6d 20 63 61 70 61 62 6c 65 20 64 61 74 61 62  um capable datab
5b90: 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ase..        */.
5ba0: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
5bb0: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
5bc0: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
5bd0: 4f 28 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74  O(2);.        st
5be0: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
5bf0: 70 4c 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d  pList setMeta6[]
5c00: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b   = {.          {
5c10: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
5c20: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31      0,         1
5c30: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
5c40: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
5c50: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
5c60: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20  ReadCookie,     
5c70: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
5c80: 20 20 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47        BTREE_LARG
5c90: 45 53 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a  EST_ROOT_PAGE},.
5ca0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49            { OP_I
5cb0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 31  f,             1
5cc0: 2c 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20  ,         0,    
5cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
5ce0: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
5cf0: 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c        { OP_Halt,
5d00: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
5d10: 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20  E_OK, OE_Abort, 
5d20: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
5d30: 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 3 */.        
5d40: 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20    { OP_Integer, 
5d50: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
5d60: 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20    1,            
5d70: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34       0},    /* 4
5d80: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
5d90: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
5da0: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54     0,         BT
5db0: 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c  REE_INCR_VACUUM,
5dc0: 20 31 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a   1},    /* 5 */.
5dd0: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
5de0: 20 20 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20     int iAddr;.  
5df0: 20 20 20 20 20 20 69 41 64 64 72 20 3d 20 73 71        iAddr = sq
5e00: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
5e10: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
5e20: 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65  setMeta6), setMe
5e30: 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20  ta6, iLn);.     
5e40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
5e50: 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c  angeP1(v, iAddr,
5e60: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73   iDb);.        s
5e70: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5e80: 50 31 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69  P1(v, iAddr+1, i
5e90: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
5ea0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32  ite3VdbeChangeP2
5eb0: 28 76 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64  (v, iAddr+2, iAd
5ec0: 64 72 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73  dr+4);.        s
5ed0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5ee0: 50 31 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65  P1(v, iAddr+4, e
5ef0: 41 75 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20  Auto-1);.       
5f00: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
5f10: 67 65 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c  geP1(v, iAddr+5,
5f20: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73   iDb);.        s
5f30: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
5f40: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
5f50: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
5f60: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
5f70: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
5f80: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69  GMA [database.]i
5f90: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
5fa0: 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  m(N).  **.  ** D
5fb0: 6f 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63  o N steps of inc
5fc0: 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69  remental vacuumi
5fd0: 6e 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65  ng on a database
5fe0: 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ..  */.#ifndef S
5ff0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
6000: 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61  ACUUM.  case Pra
6010: 67 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c  gTyp_INCREMENTAL
6020: 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69  _VACUUM: {.    i
6030: 6e 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b  nt iLimit, addr;
6040: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d  .    if( zRight=
6050: 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65  =0 || !sqlite3Ge
6060: 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26  tInt32(zRight, &
6070: 69 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69  iLimit) || iLimi
6080: 74 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c  t<=0 ){.      iL
6090: 69 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66 66  imit = 0x7ffffff
60a0: 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  f;.    }.    sql
60b0: 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
60c0: 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20  eration(pParse, 
60d0: 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c  0, iDb);.    sql
60e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
60f0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c  , OP_Integer, iL
6100: 69 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64  imit, 1);.    ad
6110: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
6120: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63  AddOp1(v, OP_Inc
6130: 72 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56  rVacuum, iDb); V
6140: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
6150: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6160: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp1(v, OP_Resu
6170: 6c 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73  ltRow, 1);.    s
6180: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
6190: 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
61a0: 2c 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  , -1);.    sqlit
61b0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
61c0: 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64  OP_IfPos, 1, add
61d0: 72 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  r); VdbeCoverage
61e0: 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  (v);.    sqlite3
61f0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
6200: 61 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b  addr);.    break
6210: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
6220: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6230: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
6240: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
6250: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63  A [database.]cac
6260: 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  he_size.  **  PR
6270: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
6280: 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a  cache_size=N.  *
6290: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
62a0: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
62b0: 65 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20  e current local 
62c0: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
62d0: 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20    ** page cache 
62e0: 73 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64  size. The second
62f0: 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c   form sets the l
6300: 6f 63 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63  ocal.  ** page c
6310: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e  ache size value.
6320: 20 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69    If N is positi
6330: 76 65 20 74 68 65 6e 20 74 68 61 74 20 69 73 20  ve then that is 
6340: 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20  the.  ** number 
6350: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
6360: 63 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20  cache.  If N is 
6370: 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74  negative, then t
6380: 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f  he.  ** number o
6390: 66 20 70 61 67 65 73 20 69 73 20 61 64 6a 75 73  f pages is adjus
63a0: 74 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ted so that the 
63b0: 63 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69  cache uses -N ki
63c0: 62 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20  bibytes.  ** of 
63d0: 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63  memory..  */.  c
63e0: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48  ase PragTyp_CACH
63f0: 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73  E_SIZE: {.    as
6400: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
6410: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
6420: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
6430: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
6440: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
6450: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 63 61  eInt(pParse, "ca
6460: 63 68 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d 3e  che_size", pDb->
6470: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
6480: 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ize);.    }else{
6490: 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20  .      int size 
64a0: 3d 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52  = sqlite3Atoi(zR
64b0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 70 44 62  ight);.      pDb
64c0: 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65  ->pSchema->cache
64d0: 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20  _size = size;.  
64e0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
64f0: 53 65 74 43 61 63 68 65 53 69 7a 65 28 70 44 62  SetCacheSize(pDb
6500: 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68  ->pBt, pDb->pSch
6510: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29  ema->cache_size)
6520: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
6530: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
6540: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
6550: 61 73 65 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e  ase.]mmap_size(N
6560: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64  ).  **.  ** Used
6570: 20 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20   to set mapping 
6580: 73 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20  size limit. The 
6590: 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d  mapping size lim
65a0: 69 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20  it is.  ** used 
65b0: 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67  to limit the agg
65c0: 72 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61  regate size of a
65d0: 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64  ll memory mapped
65e0: 20 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a   regions of the.
65f0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69    ** database fi
6600: 6c 65 2e 20 49 66 20 74 68 69 73 20 70 61 72 61  le. If this para
6610: 6d 65 74 65 72 20 69 73 20 73 65 74 20 74 6f 20  meter is set to 
6620: 7a 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72  zero, then memor
6630: 79 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69  y mapping.  ** i
6640: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
6650: 6c 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61  l.  If N is nega
6660: 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20 64  tive, then the d
6670: 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61  efault memory ma
6680: 70 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74  p.  ** limit det
6690: 65 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69 74  ermined by sqlit
66a0: 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45  e3_config(SQLITE
66b0: 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a  _CONFIG_MMAP_SIZ
66c0: 45 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20  E) is set..  ** 
66d0: 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e 20  The parameter N 
66e0: 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62  is measured in b
66f0: 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ytes..  **.  ** 
6700: 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 61 64  This value is ad
6710: 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e 64  visory.  The und
6720: 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20 66  erlying VFS is f
6730: 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61  ree to memory ma
6740: 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65  p.  ** as little
6750: 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20 69   or as much as i
6760: 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70 74  t wants.  Except
6770: 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20 74 6f  , if N is set to
6780: 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a   0 then the.  **
6790: 20 75 70 70 65 72 20 6c 61 79 65 72 73 20 77 69   upper layers wi
67a0: 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20  ll never invoke 
67b0: 74 68 65 20 78 46 65 74 63 68 20 69 6e 74 65 72  the xFetch inter
67c0: 66 61 63 65 73 20 74 6f 20 74 68 65 20 56 46 53  faces to the VFS
67d0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
67e0: 61 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a  agTyp_MMAP_SIZE:
67f0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69   {.    sqlite3_i
6800: 6e 74 36 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c  nt64 sz;.#if SQL
6810: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6820: 45 3e 30 0a 20 20 20 20 61 73 73 65 72 74 28 20  E>0.    assert( 
6830: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
6840: 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
6850: 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  0) );.    if( zR
6860: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e  ight ){.      in
6870: 74 20 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69  t ii;.      sqli
6880: 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
6890: 28 7a 52 69 67 68 74 2c 20 26 73 7a 29 3b 0a 20  (zRight, &sz);. 
68a0: 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20       if( sz<0 ) 
68b0: 73 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62  sz = sqlite3Glob
68c0: 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b  alConfig.szMmap;
68d0: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d  .      if( pId2-
68e0: 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d  >n==0 ) db->szMm
68f0: 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66  ap = sz;.      f
6900: 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b  or(ii=db->nDb-1;
6910: 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20   ii>=0; ii--){. 
6920: 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
6930: 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69  Db[ii].pBt && (i
6940: 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e  i==iDb || pId2->
6950: 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20  n==0) ){.       
6960: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
6970: 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e  etMmapLimit(db->
6980: 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29  aDb[ii].pBt, sz)
6990: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
69a0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a    }.    }.    sz
69b0: 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20   = -1;.    rc = 
69c0: 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
69d0: 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51  trol(db, zDb, SQ
69e0: 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f  LITE_FCNTL_MMAP_
69f0: 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73  SIZE, &sz);.#els
6a00: 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20  e.    sz = 0;.  
6a10: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
6a20: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
6a30: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
6a40: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
6a50: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
6a60: 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29  "mmap_size", sz)
6a70: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
6a80: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
6a90: 55 4e 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61  UND ){.      pPa
6aa0: 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20  rse->nErr++;.   
6ab0: 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20     pParse->rc = 
6ac0: 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  rc;.    }.    br
6ad0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
6ae0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
6af0: 70 5f 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50  p_store.  **   P
6b00: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6b10: 20 3d 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65   = "default"|"me
6b20: 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a  mory"|"file".  *
6b30: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
6b40: 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76   set the local v
6b50: 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70  alue of the temp
6b60: 5f 73 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68  _store flag.  Ch
6b70: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
6b80: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73  local value does
6b90: 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65   not make change
6ba0: 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69  s to the disk fi
6bb0: 6c 65 20 61 6e 64 20 74 68 65 20 64 65 66 61 75  le and the defau
6bc0: 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69  lt.  ** value wi
6bd0: 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 74  ll be restored t
6be0: 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65  he next time the
6bf0: 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   database is ope
6c00: 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e  ned..  **.  ** N
6c10: 6f 74 65 20 74 68 61 74 20 69 74 20 69 73 20 70  ote that it is p
6c20: 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20  ossible for the 
6c30: 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d  library compile-
6c40: 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a  time options to.
6c50: 20 20 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68    ** override th
6c60: 69 73 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a  is setting.  */.
6c70: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54    case PragTyp_T
6c80: 45 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20  EMP_STORE: {.   
6c90: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
6ca0: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
6cb0: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74  leInt(pParse, "t
6cc0: 65 6d 70 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e  emp_store", db->
6cd0: 74 65 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20  temp_store);.   
6ce0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68   }else{.      ch
6cf0: 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28  angeTempStorage(
6d00: 70 50 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b  pParse, zRight);
6d10: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
6d20: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
6d30: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6d40: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20  tore_directory. 
6d50: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
6d60: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
6d70: 79 20 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72  y = ""|"director
6d80: 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a  y_name".  **.  *
6d90: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
6da0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
6db0: 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72  of the temp_stor
6dc0: 65 5f 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67  e_directory flag
6dd0: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
6de0: 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20   the value sets 
6df0: 61 20 73 70 65 63 69 66 69 63 20 64 69 72 65 63  a specific direc
6e00: 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65 64 20  tory to be used 
6e10: 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 66 69  for temporary fi
6e20: 6c 65 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e  les..  ** Settin
6e30: 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69  g to a null stri
6e40: 6e 67 20 72 65 76 65 72 74 73 20 74 6f 20 74 68  ng reverts to th
6e50: 65 20 64 65 66 61 75 6c 74 20 74 65 6d 70 6f 72  e default tempor
6e60: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 73 65  ary directory se
6e70: 61 72 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65  arch..  ** If te
6e80: 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
6e90: 79 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  y is changed, th
6ea0: 65 6e 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d  en invalidateTem
6eb0: 70 53 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20  pStorage..  **. 
6ec0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
6ed0: 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49  yp_TEMP_STORE_DI
6ee0: 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69  RECTORY: {.    i
6ef0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
6f00: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
6f10: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 29  temp_directory )
6f20: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
6f30: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
6f40: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  v, 1);.        s
6f50: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
6f60: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
6f70: 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20  ME_NAME, .      
6f80: 20 20 20 20 20 20 22 74 65 6d 70 5f 73 74 6f 72        "temp_stor
6f90: 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51  e_directory", SQ
6fa0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
6fb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6fc0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
6fd0: 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
6fe0: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
6ff0: 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20  ectory, 0);.    
7000: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7010: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
7020: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
7030: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
7040: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7050: 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69  OMIT_WSD.      i
7060: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
7070: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b          int res;
7080: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
7090: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
70a0: 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20  ->pVfs, zRight, 
70b0: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45  SQLITE_ACCESS_RE
70c0: 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a  ADWRITE, &res);.
70d0: 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
70e0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
70f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
7100: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
7110: 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20  (pParse, "not a 
7120: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
7130: 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ry");.          
7140: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
7150: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
7160: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c   }.      if( SQL
7170: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
7180: 30 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  0.       || (SQL
7190: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
71a0: 31 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  1 && db->temp_st
71b0: 6f 72 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c  ore<=1).       |
71c0: 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  | (SQLITE_TEMP_S
71d0: 54 4f 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74  TORE==2 && db->t
71e0: 65 6d 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20  emp_store==1).  
71f0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
7200: 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f  nvalidateTempSto
7210: 72 61 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20  rage(pParse);.  
7220: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
7230: 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33  te3_free(sqlite3
7240: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29  _temp_directory)
7250: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  ;.      if( zRig
7260: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
7270: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
7280: 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65  rectory = sqlite
7290: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
72a0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
72b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
72c0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
72d0: 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  tory = 0;.      
72e0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
72f0: 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20  TE_OMIT_WSD */. 
7300: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
7310: 20 20 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f    }..#if SQLITE_
7320: 4f 53 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a  OS_WIN.  /*.  **
7330: 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73     PRAGMA data_s
7340: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20  tore_directory. 
7350: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74   **   PRAGMA dat
7360: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
7370: 79 20 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72  y = ""|"director
7380: 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a  y_name".  **.  *
7390: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
73a0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
73b0: 6f 66 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72  of the data_stor
73c0: 65 5f 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67  e_directory flag
73d0: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
73e0: 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20   the value sets 
73f0: 61 20 73 70 65 63 69 66 69 63 20 64 69 72 65 63  a specific direc
7400: 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65 64 20  tory to be used 
7410: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
7420: 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72  es that.  ** wer
7430: 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
7440: 20 61 20 72 65 6c 61 74 69 76 65 20 70 61 74 68   a relative path
7450: 6e 61 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74  name.  Setting t
7460: 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20  o a null string 
7470: 72 65 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20  reverts.  ** to 
7480: 74 68 65 20 64 65 66 61 75 6c 74 20 64 61 74 61  the default data
7490: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20  base directory, 
74a0: 77 68 69 63 68 20 66 6f 72 20 64 61 74 61 62 61  which for databa
74b0: 73 65 20 66 69 6c 65 73 20 73 70 65 63 69 66 69  se files specifi
74c0: 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72  ed with.  ** a r
74d0: 65 6c 61 74 69 76 65 20 70 61 74 68 20 77 69 6c  elative path wil
74e0: 6c 20 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61  l probably be ba
74f0: 73 65 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65  sed on the curre
7500: 6e 74 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72  nt directory for
7510: 20 74 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73   the.  ** proces
7520: 73 2e 20 20 44 61 74 61 62 61 73 65 20 66 69 6c  s.  Database fil
7530: 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
7540: 20 61 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74   an absolute pat
7550: 68 20 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74  h are not impact
7560: 65 64 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20  ed.  ** by this 
7570: 73 65 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c  setting, regardl
7580: 65 73 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65  ess of its value
7590: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
75a0: 73 65 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f  se PragTyp_DATA_
75b0: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
75c0: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
75d0: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
75e0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
75f0: 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20  ectory ){.      
7600: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7610: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
7620: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
7630: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
7640: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
7650: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 64   .            "d
7660: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
7670: 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ory", SQLITE_STA
7680: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
7690: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
76a0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
76b0: 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f  , 1, 0, sqlite3_
76c0: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 2c 20  data_directory, 
76d0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
76e0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
76f0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
7700: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
7710: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
7720: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
7730: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
7740: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
7750: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
7760: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
7770: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
7780: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
7790: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
77a0: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
77b0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
77c0: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
77d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
77e0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
77f0: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
7800: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
7810: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
7820: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
7830: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
7840: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71   sqlite3_free(sq
7850: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7860: 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28  tory);.      if(
7870: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
7880: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61        sqlite3_da
7890: 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73  ta_directory = s
78a0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
78b0: 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  %s", zRight);.  
78c0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
78d0: 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f     sqlite3_data_
78e0: 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20  directory = 0;. 
78f0: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a       }.#endif /*
7900: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
7910: 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72   */.    }.    br
7920: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
7930: 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  .#if SQLITE_ENAB
7940: 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45  LE_LOCKING_STYLE
7950: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7960: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
7970: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20  ock_proxy_file. 
7980: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
7990: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f  tabase.]lock_pro
79a0: 78 79 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f  xy_file = ":auto
79b0: 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61  :"|"lock_file_pa
79c0: 74 68 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  th".  **.  ** Re
79d0: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
79e0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63  value of the loc
79f0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61  k_proxy_file fla
7a00: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
7a10: 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73  * the value sets
7a20: 20 61 20 73 70 65 63 69 66 69 63 20 66 69 6c 65   a specific file
7a30: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
7a40: 64 61 74 61 62 61 73 65 20 61 63 63 65 73 73 20  database access 
7a50: 6c 6f 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f  locks..  **.  */
7a60: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
7a70: 4c 4f 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a  LOCK_PROXY_FILE:
7a80: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
7a90: 68 74 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65  ht ){.      Page
7aa0: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
7ab0: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
7ac0: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63  b->pBt);.      c
7ad0: 68 61 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f  har *proxy_file_
7ae0: 70 61 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20  path = NULL;.   
7af0: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20     sqlite3_file 
7b00: 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33  *pFile = sqlite3
7b10: 50 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72  PagerFile(pPager
7b20: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
7b30: 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e  OsFileControlHin
7b40: 74 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f  t(pFile, SQLITE_
7b50: 47 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c  GET_LOCKPROXYFIL
7b60: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
7b80: 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29  proxy_file_path)
7b90: 3b 0a 20 20 20 20 20 20 0a 20 20 20 20 20 20 69  ;.      .      i
7ba0: 66 28 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61  f( proxy_file_pa
7bb0: 74 68 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  th ){.        sq
7bc0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
7bd0: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
7be0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7bf0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
7c00: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20  OLNAME_NAME, .  
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63              "loc
7c30: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 53  k_proxy_file", S
7c40: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
7c50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
7c60: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
7c70: 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
7c80: 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68   proxy_file_path
7c90: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
7ca0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
7cb0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
7cc0: 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 1);.      }.
7cd0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7ce0: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
7cf0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
7d00: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
7d10: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
7d20: 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65   *pFile = sqlite
7d30: 33 50 61 67 65 72 46 69 6c 65 28 70 50 61 67 65  3PagerFile(pPage
7d40: 72 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65  r);.      int re
7d50: 73 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  s;.      if( zRi
7d60: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
7d70: 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46    res=sqlite3OsF
7d80: 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65  ileControl(pFile
7d90: 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43  , SQLITE_SET_LOC
7da0: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dd0: 20 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20    zRight);.     
7de0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
7df0: 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46    res=sqlite3OsF
7e00: 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65  ileControl(pFile
7e10: 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43  , SQLITE_SET_LOC
7e20: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d    NULL);.      }
7e60: 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 21 3d  .      if( res!=
7e70: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
7e80: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
7e90: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 66 61  rMsg(pParse, "fa
7ea0: 69 6c 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b  iled to set lock
7eb0: 20 70 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20   proxy file");. 
7ec0: 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67         goto prag
7ed0: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  ma_out;.      }.
7ee0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7ef0: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
7f00: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
7f10: 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20  KING_STYLE */   
7f20: 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20     .    .  /*.  
7f30: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
7f40: 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f  abase.]synchrono
7f50: 75 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  us.  **   PRAGMA
7f60: 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63   [database.]sync
7f70: 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e  hronous=OFF|ON|N
7f80: 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a  ORMAL|FULL.  **.
7f90: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
7fa0: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
7fb0: 75 65 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72  ue of the synchr
7fc0: 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61  onous flag.  Cha
7fd0: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c  nging.  ** the l
7fe0: 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20  ocal value does 
7ff0: 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73  not make changes
8000: 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c   to the disk fil
8010: 65 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64  e and the.  ** d
8020: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c  efault value wil
8030: 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68  l be restored th
8040: 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20  e next time the 
8050: 64 61 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a  database is.  **
8060: 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20   opened..  */.  
8070: 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e  case PragTyp_SYN
8080: 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20  CHRONOUS: {.    
8090: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
80a0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
80b0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 73 79  eInt(pParse, "sy
80c0: 6e 63 68 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d  nchronous", pDb-
80d0: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29  >safety_level-1)
80e0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
80f0: 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
8100: 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20  Commit ){.      
8110: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
8120: 67 28 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20  g(pParse, .     
8130: 20 20 20 20 20 20 20 22 53 61 66 65 74 79 20 6c         "Safety l
8140: 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20  evel may not be 
8150: 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61  changed inside a
8160: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
8170: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
8180: 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79       pDb->safety
8190: 5f 6c 65 76 65 6c 20 3d 20 67 65 74 53 61 66 65  _level = getSafe
81a0: 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c 30  tyLevel(zRight,0
81b0: 2c 31 29 2b 31 3b 0a 20 20 20 20 20 20 20 20 73  ,1)+1;.        s
81c0: 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28  etAllPagerFlags(
81d0: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
81e0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
81f0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
8200: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
8210: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
8220: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
8230: 41 47 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73  AG_PRAGMAS.  cas
8240: 65 20 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20  e PragTyp_FLAG: 
8250: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
8260: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ==0 ){.      ret
8270: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
8280: 72 73 65 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e  rse, pPragma->zN
8290: 61 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20  ame, (db->flags 
82a0: 26 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 29  & pPragma->iArg)
82b0: 21 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  !=0 );.    }else
82c0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b  {.      int mask
82d0: 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67   = pPragma->iArg
82e0: 3b 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20  ;    /* Mask of 
82f0: 62 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63  bits to set or c
8300: 6c 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69  lear. */.      i
8310: 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
8320: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
8330: 2f 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73  /* Foreign key s
8340: 75 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62  upport may not b
8350: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
8360: 61 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a  abled while not.
8370: 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75          ** in au
8380: 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20  to-commit mode. 
8390: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b   */.        mask
83a0: 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72   &= ~(SQLITE_For
83b0: 65 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20  eignKeys);.     
83c0: 20 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53   }.#if SQLITE_US
83d0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
83e0: 4e 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  N.      if( db->
83f0: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d  auth.authLevel==
8400: 55 41 55 54 48 5f 55 73 65 72 20 29 7b 0a 20 20  UAUTH_User ){.  
8410: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
8420: 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20  allow non-admin 
8430: 75 73 65 72 73 20 74 6f 20 6d 6f 64 69 66 79 20  users to modify 
8440: 74 68 65 20 73 63 68 65 6d 61 20 61 72 62 69 74  the schema arbit
8450: 72 61 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20  rarily */.      
8460: 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49    mask &= ~(SQLI
8470: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3b  TE_WriteSchema);
8480: 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  .      }.#endif.
8490: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
84a0: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
84b0: 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20  ght, 0) ){.     
84c0: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
84d0: 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  mask;.      }els
84e0: 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  e{.        db->f
84f0: 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20  lags &= ~mask;. 
8500: 20 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d         if( mask=
8510: 3d 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73  =SQLITE_DeferFKs
8520: 20 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   ) db->nDeferred
8530: 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20  ImmCons = 0;.   
8540: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d     }..      /* M
8550: 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d  any of the flag-
8560: 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74  pragmas modify t
8570: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65  he code generate
8580: 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20  d by the SQL .  
8590: 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20      ** compiler 
85a0: 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67  (eg. count_chang
85b0: 65 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f  es). So add an o
85c0: 70 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20  pcode to expire 
85d0: 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d  all.      ** com
85e0: 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d  piled SQL statem
85f0: 65 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66  ents after modif
8600: 79 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61  ying a pragma va
8610: 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  lue..      */.  
8620: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8630: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70 69  ddOp2(v, OP_Expi
8640: 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  re, 0, 0);.     
8650: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
8660: 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20  s(db);.    }.   
8670: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
8680: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
8690: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a  T_FLAG_PRAGMAS *
86a0: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
86b0: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
86c0: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
86d0: 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69    PRAGMA table_i
86e0: 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a  nfo(<table>).  *
86f0: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20  *.  ** Return a 
8700: 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65  single row for e
8710: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
8720: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54  e named table. T
8730: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20  he columns of.  
8740: 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  ** the returned 
8750: 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20  data set are:.  
8760: 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20  **.  ** cid:    
8770: 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e      Column id (n
8780: 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66  umbered from lef
8790: 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72  t to right, star
87a0: 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20  ting at 0).  ** 
87b0: 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75  name:       Colu
87c0: 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70  mn name.  ** typ
87d0: 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  e:       Column 
87e0: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
87f0: 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20  ..  ** notnull: 
8800: 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20     True if 'NOT 
8810: 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66  NULL' is part of
8820: 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   column declarat
8830: 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61  ion.  ** dflt_va
8840: 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74  lue: The default
8850: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63   value for the c
8860: 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20  olumn, if any.. 
8870: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
8880: 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69  yp_TABLE_INFO: i
8890: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
88a0: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
88b0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
88c0: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
88d0: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
88e0: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
88f0: 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20    int i, k;.    
8900: 20 20 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20    int nHidden = 
8910: 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  0;.      Column 
8920: 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64  *pCol;.      Ind
8930: 65 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74 65  ex *pPk = sqlite
8940: 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
8950: 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 73 71  (pTab);.      sq
8960: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
8970: 6f 6c 73 28 76 2c 20 36 29 3b 0a 20 20 20 20 20  ols(v, 6);.     
8980: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
8990: 36 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  6;.      sqlite3
89a0: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
89b0: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
89c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
89d0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
89e0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
89f0: 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  cid", SQLITE_STA
8a00: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
8a10: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
8a20: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
8a30: 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51  NAME, "name", SQ
8a40: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8a50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8a60: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
8a70: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
8a80: 79 70 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ype", SQLITE_STA
8a90: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
8aa0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
8ab0: 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 3, COLNAME_
8ac0: 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c  NAME, "notnull",
8ad0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
8ae0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8af0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
8b00: 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  4, COLNAME_NAME,
8b10: 20 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20 53   "dflt_value", S
8b20: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8b30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8b40: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c  SetColName(v, 5,
8b50: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
8b60: 70 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  pk", SQLITE_STAT
8b70: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
8b80: 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
8b90: 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54 61  ames(pParse, pTa
8ba0: 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  b);.      for(i=
8bb0: 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43  0, pCol=pTab->aC
8bc0: 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c  ol; i<pTab->nCol
8bd0: 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a  ; i++, pCol++){.
8be0: 20 20 20 20 20 20 20 20 69 66 28 20 49 73 48 69          if( IsHi
8bf0: 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29  ddenColumn(pCol)
8c00: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 48   ){.          nH
8c10: 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  idden++;.       
8c20: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
8c30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
8c40: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
8c50: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
8c60: 69 2d 6e 48 69 64 64 65 6e 2c 20 31 29 3b 0a 20  i-nHidden, 1);. 
8c70: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
8c80: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
8c90: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
8ca0: 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pCol->zName, 0)
8cb0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
8cc0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
8cd0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
8ce0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70   0,.           p
8cf0: 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f  Col->zType ? pCo
8d00: 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20 30  l->zType : "", 0
8d10: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8d20: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8d30: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 28 70 43 6f  OP_Integer, (pCo
8d40: 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a  l->notNull ? 1 :
8d50: 20 30 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20   0), 4);.       
8d60: 20 69 66 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74   if( pCol->zDflt
8d70: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
8d80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
8d90: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
8da0: 2c 20 35 2c 20 30 2c 20 28 63 68 61 72 2a 29 70  , 5, 0, (char*)p
8db0: 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b 0a  Col->zDflt, 0);.
8dc0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
8dd0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
8de0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8df0: 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20 20  _Null, 0, 5);.  
8e00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8e10: 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c  if( (pCol->colFl
8e20: 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52  ags & COLFLAG_PR
8e30: 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20  IMKEY)==0 ){.   
8e40: 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20         k = 0;.  
8e50: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
8e60: 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  pPk==0 ){.      
8e70: 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20      k = 1;.     
8e80: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8e90: 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 41 4c 57      for(k=1; ALW
8ea0: 41 59 53 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f  AYS(k<=pTab->nCo
8eb0: 6c 29 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c  l) && pPk->aiCol
8ec0: 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b  umn[k-1]!=i; k++
8ed0: 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ){}.        }.  
8ee0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8ef0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
8f00: 74 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20 20  teger, k, 6);.  
8f10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8f20: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
8f30: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a  sultRow, 1, 6);.
8f40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
8f50: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
8f60: 73 65 20 50 72 61 67 54 79 70 5f 53 54 41 54 53  se PragTyp_STATS
8f70: 3a 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  : {.    Index *p
8f80: 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c 65  Idx;.    HashEle
8f90: 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73 71  m *i;.    v = sq
8fa0: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
8fb0: 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  rse);.    sqlite
8fc0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
8fd0: 76 2c 20 34 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 4);.    pPars
8fe0: 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20  e->nMem = 4;.   
8ff0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
9000: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
9010: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
9020: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
9030: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
9040: 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51  AME, "table", SQ
9050: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9060: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9070: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
9080: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 64  LNAME_NAME, "ind
9090: 65 78 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ex", SQLITE_STAT
90a0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
90b0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
90c0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
90d0: 45 2c 20 22 77 69 64 74 68 22 2c 20 53 51 4c 49  E, "width", SQLI
90e0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
90f0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
9100: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
9110: 41 4d 45 5f 4e 41 4d 45 2c 20 22 68 65 69 67 68  AME_NAME, "heigh
9120: 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  t", SQLITE_STATI
9130: 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73 71  C);.    for(i=sq
9140: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 70  liteHashFirst(&p
9150: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62 6c  Db->pSchema->tbl
9160: 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c 69  Hash); i; i=sqli
9170: 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a  teHashNext(i)){.
9180: 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
9190: 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
91a0: 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73 71 6c  ta(i);.      sql
91b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
91c0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
91d0: 20 31 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61   1, 0, pTab->zNa
91e0: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  me, 0);.      sq
91f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9200: 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 32  v, OP_Null, 0, 2
9210: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9220: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9230: 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20 20  _Integer,.      
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9250: 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65       (int)sqlite
9260: 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61  3LogEstToInt(pTa
9270: 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 20 33 29  b->szTabRow), 3)
9280: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9290: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
92a0: 49 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20 20  Integer, .      
92b0: 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33      (int)sqlite3
92c0: 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61 62  LogEstToInt(pTab
92d0: 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29 2c 20 34  ->nRowLogEst), 4
92e0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
92f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9300: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34  _ResultRow, 1, 4
9310: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64  );.      for(pId
9320: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
9330: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
9340: 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20  >pNext){.       
9350: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9360: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
9370: 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d  , 0, 2, 0, pIdx-
9380: 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  >zName, 0);.    
9390: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
93a0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
93b0: 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f    (int)sqlite3Lo
93e0: 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e  gEstToInt(pIdx->
93f0: 73 7a 49 64 78 52 6f 77 29 2c 20 33 29 3b 0a 20  szIdxRow), 3);. 
9400: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9410: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
9420: 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20 20 20  nteger, .       
9430: 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65       (int)sqlite
9440: 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 49 64  3LogEstToInt(pId
9450: 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 30  x->aiRowLogEst[0
9460: 5d 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  ]), 4);.        
9470: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9480: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
9490: 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20  w, 1, 4);.      
94a0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
94b0: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
94c0: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a  gTyp_INDEX_INFO:
94d0: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
94e0: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
94f0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
9500: 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69  .    pIdx = sqli
9510: 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c  te3FindIndex(db,
9520: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
9530: 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20     if( pIdx ){. 
9540: 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
9550: 20 20 69 6e 74 20 6d 78 20 3d 20 70 50 72 61 67    int mx = pPrag
9560: 6d 61 2d 3e 69 41 72 67 20 3f 20 70 49 64 78 2d  ma->iArg ? pIdx-
9570: 3e 6e 43 6f 6c 75 6d 6e 20 3a 20 70 49 64 78 2d  >nColumn : pIdx-
9580: 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20 20  >nKeyCol;.      
9590: 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61  pTab = pIdx->pTa
95a0: 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ble;.      sqlit
95b0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
95c0: 28 76 2c 20 36 29 3b 0a 20 20 20 20 20 20 70 50  (v, 6);.      pP
95d0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
95e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
95f0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
9600: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
9610: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9620: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
9630: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
9640: 6e 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  no", SQLITE_STAT
9650: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
9660: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
9670: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
9680: 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49  AME, "cid", SQLI
9690: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
96a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
96b0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
96c0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
96d0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
96e0: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
96f0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9700: 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 3, COLNAME_NA
9710: 4d 45 2c 20 22 64 65 73 63 22 2c 20 53 51 4c 49  ME, "desc", SQLI
9720: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9730: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9740: 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f  ColName(v, 4, CO
9750: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6c  LNAME_NAME, "col
9760: 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  l", SQLITE_STATI
9770: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
9780: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9790: 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 5, COLNAME_NA
97a0: 4d 45 2c 20 22 6b 65 79 22 2c 20 53 51 4c 49 54  ME, "key", SQLIT
97b0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
97c0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6d 78 3b 20   for(i=0; i<mx; 
97d0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 31  i++){.        i1
97e0: 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61  6 cnum = pIdx->a
97f0: 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20  iColumn[i];.    
9800: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9810: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
9820: 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20  ger, i, 1);.    
9830: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9840: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
9850: 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a 20  ger, cnum, 2);. 
9860: 20 20 20 20 20 20 20 69 66 28 20 63 6e 75 6d 3c         if( cnum<
9870: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
9880: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9890: 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20  (v, OP_Null, 0, 
98a0: 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  3);.        }els
98b0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e{.          sql
98c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
98d0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
98e0: 20 33 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f   3, 0, pTab->aCo
98f0: 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30  l[cnum].zName, 0
9900: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
9910: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9920: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
9930: 65 67 65 72 2c 20 70 49 64 78 2d 3e 61 53 6f 72  eger, pIdx->aSor
9940: 74 4f 72 64 65 72 5b 69 5d 2c 20 34 29 3b 0a 20  tOrder[i], 4);. 
9950: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9960: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
9970: 74 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c  tring8, 0, 5, 0,
9980: 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d   pIdx->azColl[i]
9990: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
99a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
99b0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
99c0: 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 2c 20  <pIdx->nKeyCol, 
99d0: 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  6);.        sqli
99e0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
99f0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9a00: 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 6);.      }.  
9a10: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
9a20: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
9a30: 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66 28  _INDEX_LIST: if(
9a40: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49   zRight ){.    I
9a50: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
9a60: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
9a70: 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61 62   int i;.    pTab
9a80: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
9a90: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
9aa0: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
9ab0: 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  ab ){.      v = 
9ac0: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
9ad0: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 73 71  Parse);.      sq
9ae0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
9af0: 6f 6c 73 28 76 2c 20 35 29 3b 0a 20 20 20 20 20  ols(v, 5);.     
9b00: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9b10: 35 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  5;.      sqlite3
9b20: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
9b30: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
9b40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9b50: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
9b60: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9b70: 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  seq", SQLITE_STA
9b80: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
9b90: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
9ba0: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
9bb0: 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51  NAME, "name", SQ
9bc0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9bd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9be0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
9bf0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75  COLNAME_NAME, "u
9c00: 6e 69 71 75 65 22 2c 20 53 51 4c 49 54 45 5f 53  nique", SQLITE_S
9c10: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
9c20: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9c30: 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d  ame(v, 3, COLNAM
9c40: 45 5f 4e 41 4d 45 2c 20 22 6f 72 69 67 69 6e 22  E_NAME, "origin"
9c50: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9c60: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9c70: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
9c80: 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   4, COLNAME_NAME
9c90: 2c 20 22 70 61 72 74 69 61 6c 22 2c 20 53 51 4c  , "partial", SQL
9ca0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9cb0: 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62     for(pIdx=pTab
9cc0: 2d 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70  ->pIndex, i=0; p
9cd0: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
9ce0: 70 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20  pNext, i++){.   
9cf0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
9d00: 2a 61 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20  *azOrigin[] = { 
9d10: 22 63 22 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d  "c", "u", "pk" }
9d20: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9d30: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9d40: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29  P_Integer, i, 1)
9d50: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9d60: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
9d70: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
9d80: 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c   0, pIdx->zName,
9d90: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
9da0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9db0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 49 73  , OP_Integer, Is
9dc0: 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78  UniqueIndex(pIdx
9dd0: 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73  ), 3);.        s
9de0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
9df0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
9e00: 30 2c 20 34 2c 20 30 2c 20 61 7a 4f 72 69 67 69  0, 4, 0, azOrigi
9e10: 6e 5b 70 49 64 78 2d 3e 69 64 78 54 79 70 65 5d  n[pIdx->idxType]
9e20: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
9e30: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9e40: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
9e50: 49 64 78 2d 3e 70 50 61 72 74 49 64 78 57 68 65  Idx->pPartIdxWhe
9e60: 72 65 21 3d 30 2c 20 35 29 3b 0a 20 20 20 20 20  re!=0, 5);.     
9e70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9e80: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9e90: 74 52 6f 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20  tRow, 1, 5);.   
9ea0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
9eb0: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
9ec0: 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53 45  PragTyp_DATABASE
9ed0: 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74  _LIST: {.    int
9ee0: 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   i;.    sqlite3V
9ef0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
9f00: 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   3);.    pParse-
9f10: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73  >nMem = 3;.    s
9f20: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
9f30: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
9f40: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
9f50: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9f60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9f70: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
9f80: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
9f90: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
9fa0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
9fb0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9fc0: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
9fd0: 4d 45 2c 20 22 66 69 6c 65 22 2c 20 53 51 4c 49  ME, "file", SQLI
9fe0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9ff0: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
a000: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
a010: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  if( db->aDb[i].p
a020: 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  Bt==0 ) continue
a030: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
a040: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
a050: 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  !=0 );.      sql
a060: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
a070: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c  , OP_Integer, i,
a080: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
a090: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
a0a0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
a0b0: 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  , 0, db->aDb[i].
a0c0: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
a0d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a0e0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
a0f0: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
a100: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
a110: 65 65 47 65 74 46 69 6c 65 6e 61 6d 65 28 64 62  eeGetFilename(db
a120: 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 2c 20 30  ->aDb[i].pBt), 0
a130: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
a140: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
a150: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
a160: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
a170: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
a180: 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f  agTyp_COLLATION_
a190: 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20  LIST: {.    int 
a1a0: 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73 68 45  i = 0;.    HashE
a1b0: 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 73 71 6c 69  lem *p;.    sqli
a1c0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
a1d0: 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61  s(v, 2);.    pPa
a1e0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20  rse->nMem = 2;. 
a1f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a200: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
a210: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65  OLNAME_NAME, "se
a220: 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  q", SQLITE_STATI
a230: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
a240: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
a250: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
a260: 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45  , "name", SQLITE
a270: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f  _STATIC);.    fo
a280: 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(p=sqliteHashFi
a290: 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  rst(&db->aCollSe
a2a0: 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48  q); p; p=sqliteH
a2b0: 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20  ashNext(p)){.   
a2c0: 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c     CollSeq *pCol
a2d0: 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73  l = (CollSeq *)s
a2e0: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 29  qliteHashData(p)
a2f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
a300: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
a310: 49 6e 74 65 67 65 72 2c 20 69 2b 2b 2c 20 31 29  Integer, i++, 1)
a320: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
a330: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
a340: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
a350: 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20  , pColl->zName, 
a360: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
a370: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
a380: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
a390: 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  2);.    }.  }.  
a3a0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
a3b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
a3c0: 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  EMA_PRAGMAS */..
a3d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a3e0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
a3f0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
a400: 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a  OREIGN_KEY_LIST:
a410: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
a420: 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20     FKey *pFK;.  
a430: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
a440: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
a450: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
a460: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
a470: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
a480: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
a490: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
a4a0: 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61 62 2d       pFK = pTab-
a4b0: 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20 69 66  >pFKey;.      if
a4c0: 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20 20 20  ( pFK ){.       
a4d0: 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20   int i = 0; .   
a4e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a4f0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 38 29  SetNumCols(v, 8)
a500: 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65  ;.        pParse
a510: 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20  ->nMem = 8;.    
a520: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
a530: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
a540: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
a550: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a560: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
a570: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 64 22  LNAME_NAME, "id"
a580: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
a590: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
a5a0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
a5b0: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
a5c0: 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54  ME, "seq", SQLIT
a5d0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
a5e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a5f0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
a600: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61  OLNAME_NAME, "ta
a610: 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ble", SQLITE_STA
a620: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
a630: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
a640: 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d  ame(v, 3, COLNAM
a650: 45 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d 22 2c 20  E_NAME, "from", 
a660: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
a670: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a680: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
a690: 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   4, COLNAME_NAME
a6a0: 2c 20 22 74 6f 22 2c 20 53 51 4c 49 54 45 5f 53  , "to", SQLITE_S
a6b0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
a6c0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
a6d0: 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e  lName(v, 5, COLN
a6e0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70  AME_NAME, "on_up
a6f0: 64 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  date", SQLITE_ST
a700: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
a710: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
a720: 4e 61 6d 65 28 76 2c 20 36 2c 20 43 4f 4c 4e 41  Name(v, 6, COLNA
a730: 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c  ME_NAME, "on_del
a740: 65 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ete", SQLITE_STA
a750: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
a760: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
a770: 61 6d 65 28 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d  ame(v, 7, COLNAM
a780: 45 5f 4e 41 4d 45 2c 20 22 6d 61 74 63 68 22 2c  E_NAME, "match",
a790: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
a7a0: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 70  .        while(p
a7b0: 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  FK){.          i
a7c0: 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20  nt j;.          
a7d0: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e  for(j=0; j<pFK->
a7e0: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
a7f0: 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43          char *zC
a800: 6f 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  ol = pFK->aCol[j
a810: 5d 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20  ].zCol;.        
a820: 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 44 65 6c      char *zOnDel
a830: 65 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63  ete = (char *)ac
a840: 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41  tionName(pFK->aA
a850: 63 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20 20 20  ction[0]);.     
a860: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e         char *zOn
a870: 55 70 64 61 74 65 20 3d 20 28 63 68 61 72 20 2a  Update = (char *
a880: 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d  )actionName(pFK-
a890: 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20  >aAction[1]);.  
a8a0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a8b0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
a8c0: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29  P_Integer, i, 1)
a8d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
a8e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
a8f0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6a  v, OP_Integer, j
a900: 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 2);.          
a910: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a920: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
a930: 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 46 4b 2d  8, 0, 3, 0, pFK-
a940: 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20  >zTo, 0);.      
a950: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a960: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
a970: 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a  ring8, 0, 4, 0,.
a980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 54                pT
a9a0: 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43  ab->aCol[pFK->aC
a9b0: 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61  ol[j].iFrom].zNa
a9c0: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
a9d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a9e0: 64 64 4f 70 34 28 76 2c 20 7a 43 6f 6c 20 3f 20  ddOp4(v, zCol ? 
a9f0: 4f 50 5f 53 74 72 69 6e 67 38 20 3a 20 4f 50 5f  OP_String8 : OP_
aa00: 4e 75 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c 20 7a  Null, 0, 5, 0, z
aa10: 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Col, 0);.       
aa20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aa30: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
aa40: 69 6e 67 38 2c 20 30 2c 20 36 2c 20 30 2c 20 7a  ing8, 0, 6, 0, z
aa50: 4f 6e 55 70 64 61 74 65 2c 20 30 29 3b 0a 20 20  OnUpdate, 0);.  
aa60: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
aa70: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
aa80: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 37 2c  P_String8, 0, 7,
aa90: 20 30 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c 20 30   0, zOnDelete, 0
aaa0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
aab0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
aac0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
aad0: 30 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c  0, 8, 0, "NONE",
aae0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
aaf0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ab00: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
ab10: 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20  ow, 1, 8);.     
ab20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
ab30: 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20   ++i;.          
ab40: 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74  pFK = pFK->pNext
ab50: 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  From;.        }.
ab60: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
ab70: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
ab80: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
ab90: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
aba0: 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64  N_KEY) */..#ifnd
abb0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
abc0: 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64  OREIGN_KEY.#ifnd
abd0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
abe0: 52 49 47 47 45 52 0a 20 20 63 61 73 65 20 50 72  RIGGER.  case Pr
abf0: 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45  agTyp_FOREIGN_KE
ac00: 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46  Y_CHECK: {.    F
ac10: 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20  Key *pFK;       
ac20: 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69        /* A forei
ac30: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
ac40: 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  t */.    Table *
ac50: 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
ac60: 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63  /* Child table c
ac70: 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43  ontain "REFERENC
ac80: 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20  ES" keyword */. 
ac90: 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e     Table *pParen
aca0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72  t;        /* Par
acb0: 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20 63  ent table that c
acc0: 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a  hild points to *
acd0: 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  /.    Index *pId
ace0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  x;           /* 
acf0: 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61 72  Index in the par
ad00: 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  ent table */.   
ad10: 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
ad20: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
ad30: 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67  counter:  Foreig
ad40: 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72  n key number for
ad50: 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74   pTab */.    int
ad60: 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
ad70: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
ad80: 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74  ter:  Field of t
ad90: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a  he foreign key *
ada0: 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  /.    HashElem *
adb0: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  k;           /* 
adc0: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e  Loop counter:  N
add0: 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68  ext table in sch
ade0: 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78  ema */.    int x
adf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ae00: 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69    /* result vari
ae10: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
ae20: 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20  regResult;      
ae30: 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72     /* 3 register
ae40: 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75  s to hold a resu
ae50: 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e  lt row */.    in
ae60: 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20  t regKey;       
ae70: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
ae80: 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72   to hold key for
ae90: 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b   checking the FK
aea0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
aeb0: 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ow;            /
aec0: 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f 20 68  * Registers to h
aed0: 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70  old a row from p
aee0: 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  Tab */.    int a
aef0: 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20  ddrTop;         
af00: 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f    /* Top of a lo
af10: 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65  op checking fore
af20: 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20  ign keys */.    
af30: 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20  int addrOk;     
af40: 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
af50: 65 72 65 20 69 66 20 74 68 65 20 6b 65 79 20 69  ere if the key i
af60: 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20  s OK */.    int 
af70: 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20  *aiCols;        
af80: 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70     /* child to p
af90: 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70  arent column map
afa0: 70 69 6e 67 20 2a 2f 0a 0a 20 20 20 20 72 65 67  ping */..    reg
afb0: 52 65 73 75 6c 74 20 3d 20 70 50 61 72 73 65 2d  Result = pParse-
afc0: 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61  >nMem+1;.    pPa
afd0: 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a  rse->nMem += 4;.
afe0: 20 20 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70      regKey = ++p
aff0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  Parse->nMem;.   
b000: 20 72 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72   regRow = ++pPar
b010: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20  se->nMem;.    v 
b020: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
b030: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71  (pParse);.    sq
b040: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
b050: 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 73  ols(v, 4);.    s
b060: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
b070: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
b080: 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22  ME_NAME, "table"
b090: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
b0a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
b0b0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
b0c0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
b0d0: 22 72 6f 77 69 64 22 2c 20 53 51 4c 49 54 45 5f  "rowid", SQLITE_
b0e0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
b0f0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
b100: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
b110: 5f 4e 41 4d 45 2c 20 22 70 61 72 65 6e 74 22 2c  _NAME, "parent",
b120: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
b130: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b140: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c  SetColName(v, 3,
b150: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
b160: 66 6b 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  fkid", SQLITE_ST
b170: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
b180: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
b190: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
b1a0: 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48  .    k = sqliteH
b1b0: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44  ashFirst(&db->aD
b1c0: 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e  b[iDb].pSchema->
b1d0: 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68  tblHash);.    wh
b1e0: 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20  ile( k ){.      
b1f0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
b200: 20 20 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c        pTab = sql
b210: 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
b220: 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68  pParse, 0, zRigh
b230: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20  t, zDb);.       
b240: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65   k = 0;.      }e
b250: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61  lse{.        pTa
b260: 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69  b = (Table*)sqli
b270: 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20  teHashData(k);. 
b280: 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74         k = sqlit
b290: 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20  eHashNext(k);.  
b2a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
b2b0: 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d  pTab==0 || pTab-
b2c0: 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74  >pFKey==0 ) cont
b2d0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
b2e0: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
b2f0: 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e  rse, iDb, pTab->
b300: 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a  tnum, 0, pTab->z
b310: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28  Name);.      if(
b320: 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52   pTab->nCol+regR
b330: 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20  ow>pParse->nMem 
b340: 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d  ) pParse->nMem =
b350: 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65   pTab->nCol + re
b360: 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69  gRow;.      sqli
b370: 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61  te3OpenTable(pPa
b380: 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61  rse, 0, iDb, pTa
b390: 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b  b, OP_OpenRead);
b3a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
b3b0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
b3c0: 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65  tring8, 0, regRe
b3d0: 73 75 6c 74 2c 20 30 2c 20 70 54 61 62 2d 3e 7a  sult, 0, pTab->z
b3e0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 34                P4
b400: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
b410: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
b420: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
b430: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
b440: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
b450: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
b460: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
b470: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
b480: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
b490: 50 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74  Parent==0 ) cont
b4a0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49  inue;.        pI
b4b0: 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  dx = 0;.        
b4c0: 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
b4d0: 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50  (pParse, iDb, pP
b4e0: 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20  arent->tnum, 0, 
b4f0: 70 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b  pParent->zName);
b500: 0a 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c  .        x = sql
b510: 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
b520: 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e  x(pParse, pParen
b530: 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30  t, pFK, &pIdx, 0
b540: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 78  );.        if( x
b550: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
b560: 20 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a   if( pIdx==0 ){.
b570: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b580: 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61  te3OpenTable(pPa
b590: 72 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61  rse, i, iDb, pPa
b5a0: 72 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  rent, OP_OpenRea
b5b0: 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  d);.          }e
b5c0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
b5d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b5e0: 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  p3(v, OP_OpenRea
b5f0: 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d  d, i, pIdx->tnum
b600: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
b610: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
b620: 65 74 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72  etP4KeyInfo(pPar
b630: 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20  se, pIdx);.     
b640: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
b650: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
b660: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  k = 0;.         
b670: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
b680: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
b690: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
b6a0: 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30  nErr>0 || pFK==0
b6b0: 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46   );.      if( pF
b6c0: 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  K ) break;.     
b6d0: 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61   if( pParse->nTa
b6e0: 62 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54  b<i ) pParse->nT
b6f0: 61 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64  ab = i;.      ad
b700: 64 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56  drTop = sqlite3V
b710: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
b720: 52 65 77 69 6e 64 2c 20 30 29 3b 20 56 64 62 65  Rewind, 0); Vdbe
b730: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
b740: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
b750: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
b760: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
b770: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
b780: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
b790: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
b7a0: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
b7b0: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  );.        pIdx 
b7c0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43  = 0;.        aiC
b7d0: 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ols = 0;.       
b7e0: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
b7f0: 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 73 71            x = sq
b800: 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
b810: 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65  ex(pParse, pPare
b820: 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20  nt, pFK, &pIdx, 
b830: 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20  &aiCols);.      
b840: 20 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30      assert( x==0
b850: 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   );.        }.  
b860: 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73        addrOk = s
b870: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
b880: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
b890: 69 66 28 20 70 50 61 72 65 6e 74 20 26 26 20 70  if( pParent && p
b8a0: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
b8b0: 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70      int iKey = p
b8c0: 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f  FK->aCol[0].iFro
b8d0: 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  m;.          ass
b8e0: 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20  ert( iKey>=0 && 
b8f0: 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iKey<pTab->nCol 
b900: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
b910: 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b   iKey!=pTab->iPK
b920: 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ey ){.          
b930: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b940: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e  Op3(v, OP_Column
b950: 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f  , 0, iKey, regRo
b960: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  w);.            
b970: 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
b980: 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b  ault(v, pTab, iK
b990: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
b9a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b9b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
b9c0: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c  _IsNull, regRow,
b9d0: 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f   addrOk); VdbeCo
b9e0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
b9f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ba00: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d  beAddOp2(v, OP_M
ba10: 75 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77  ustBeInt, regRow
ba20: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
ba30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72    sqlite3VdbeCur
ba40: 72 65 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 20  rentAddr(v)+3); 
ba50: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
ba60: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
ba70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
ba80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
ba90: 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20  v, OP_Rowid, 0, 
baa0: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
bab0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73     }.          s
bac0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
bad0: 28 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  (v, OP_NotExists
bae0: 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b  , i, 0, regRow);
baf0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
bb00: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
bb10: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bb20: 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 61 64 64   OP_Goto, 0, add
bb30: 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rOk);.          
bb40: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
bb50: 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33 56 64  ere(v, sqlite3Vd
bb60: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
bb70: 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  -2);.        }el
bb80: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  se{.          fo
bb90: 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43  r(j=0; j<pFK->nC
bba0: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
bbb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
bbc0: 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
bbd0: 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 30  Table(v, pTab, 0
bbe0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 69                ai
bc00: 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d  Cols ? aiCols[j]
bc10: 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e   : pFK->aCol[j].
bc20: 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29  iFrom, regRow+j)
bc30: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
bc40: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
bc50: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65  v, OP_IsNull, re
bc60: 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b  gRow+j, addrOk);
bc70: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
bc80: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
bc90: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
bca0: 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ent ){.         
bcb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bcc0: 64 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b 65 52  dOp4(v, OP_MakeR
bcd0: 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20 70  ecord, regRow, p
bce0: 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79  FK->nCol, regKey
bcf0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
bd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd10: 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
bd20: 6e 69 74 79 53 74 72 28 76 2c 70 49 64 78 29 2c  nityStr(v,pIdx),
bd30: 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20   pFK->nCol);.   
bd40: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
bd50: 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c  VdbeAddOp4Int(v,
bd60: 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64   OP_Found, i, ad
bd70: 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29  drOk, regKey, 0)
bd80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 64  ;.            Vd
bd90: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
bda0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
bdb0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
bdc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
bdd0: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
bde0: 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20  egResult+1);.   
bdf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
be00: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
be10: 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75  ing8, 0, regResu
be20: 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20 20  lt+2, 0, .      
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be40: 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34      pFK->zTo, P4
be50: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
be60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
be70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
be80: 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67 52 65  eger, i-1, regRe
be90: 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20 20  sult+3);.       
bea0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
beb0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
bec0: 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34  ow, regResult, 4
bed0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
bee0: 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
bef0: 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  el(v, addrOk);. 
bf00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
bf10: 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29  Free(db, aiCols)
bf20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
bf30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bf40: 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c  2(v, OP_Next, 0,
bf50: 20 61 64 64 72 54 6f 70 2b 31 29 3b 20 56 64 62   addrTop+1); Vdb
bf60: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
bf70: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
bf80: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54  umpHere(v, addrT
bf90: 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  op);.    }.  }. 
bfa0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
bfb0: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
bfc0: 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20  E_OMIT_TRIGGER) 
bfd0: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  */.#endif /* !de
bfe0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
bff0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a  T_FOREIGN_KEY) *
c000: 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  /..#ifndef NDEBU
c010: 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  G.  case PragTyp
c020: 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b  _PARSER_TRACE: {
c030: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
c040: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
c050: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
c060: 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20  Right, 0) ){.   
c070: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73       sqlite3Pars
c080: 65 72 54 72 61 63 65 28 73 74 64 65 72 72 2c 20  erTrace(stderr, 
c090: 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20  "parser: ");.   
c0a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
c0b0: 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54    sqlite3ParserT
c0c0: 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20  race(0, 0);.    
c0d0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
c0e0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
c0f0: 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68   /* Reinstall th
c100: 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20  e LIKE and GLOB 
c110: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
c120: 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a  variant of LIKE.
c130: 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62    ** used will b
c140: 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  e case sensitive
c150: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
c160: 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20  g on the RHS..  
c170: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
c180: 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45  p_CASE_SENSITIVE
c190: 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28  _LIKE: {.    if(
c1a0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
c1b0: 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
c1c0: 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62  LikeFunctions(db
c1d0: 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  , sqlite3GetBool
c1e0: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b  ean(zRight, 0));
c1f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
c200: 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ak;..#ifndef SQL
c210: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
c220: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20  ECK_ERROR_MAX.# 
c230: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
c240: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
c250: 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64  ROR_MAX 100.#end
c260: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
c270: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
c280: 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61  Y_CHECK.  /* Pra
c290: 67 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b  gma "quick_check
c2a0: 22 20 69 73 20 72 65 64 75 63 65 64 20 76 65 72  " is reduced ver
c2b0: 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e  sion of .  ** in
c2c0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65  tegrity_check de
c2d0: 73 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74  signed to detect
c2e0: 20 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20 63   most database c
c2f0: 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77  orruption.  ** w
c300: 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74  ithout most of t
c310: 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61  he overhead of a
c320: 20 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d   full integrity-
c330: 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61  check..  */.  ca
c340: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47  se PragTyp_INTEG
c350: 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20  RITY_CHECK: {.  
c360: 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72    int i, j, addr
c370: 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a  , mxErr;..    /*
c380: 20 43 6f 64 65 20 74 68 61 74 20 61 70 70 65 61   Code that appea
c390: 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
c3a0: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63   the integrity c
c3b0: 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72  heck.  If no err
c3c0: 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67  or.    ** messag
c3d0: 65 73 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e  es have been gen
c3e0: 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f  erated, output O
c3f0: 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75  K.  Otherwise ou
c400: 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20  tput the.    ** 
c410: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20  error message.  
c420: 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20    */.    static 
c430: 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20  const int iLn = 
c440: 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45  VDBE_OFFSET_LINE
c450: 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69  NO(2);.    stati
c460: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
c470: 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b  st endCode[] = {
c480: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e 65  .      { OP_IfNe
c490: 67 2c 20 20 20 20 20 20 20 31 2c 20 30 2c 20 20  g,       1, 0,  
c4a0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
c4b0: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
c4c0: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
c4d0: 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  3,        0},   
c4e0: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 1 */.      {
c4f0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20   OP_ResultRow,  
c500: 20 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   3, 1,        0}
c510: 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e  ,.    };..    in
c520: 74 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c  t isQuick = (sql
c530: 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66  ite3Tolower(zLef
c540: 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20  t[0])=='q');..  
c550: 20 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47    /* If the PRAG
c560: 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f  MA command was o
c570: 66 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47  f the form "PRAG
c580: 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74  MA <db>.integrit
c590: 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a  y_check",.    **
c5a0: 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74   then iDb is set
c5b0: 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66   to the index of
c5c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 64   the database id
c5d0: 65 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e  entified by <db>
c5e0: 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73  ..    ** In this
c5f0: 20 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67   case, the integ
c600: 72 69 74 79 20 6f 66 20 64 61 74 61 62 61 73 65  rity of database
c610: 20 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72   iDb only is ver
c620: 69 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20  ified by.    ** 
c630: 74 68 65 20 56 44 42 45 20 63 72 65 61 74 65 64  the VDBE created
c640: 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20   below..    **. 
c650: 20 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c     ** Otherwise,
c660: 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   if the command 
c670: 77 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47  was simply "PRAG
c680: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
c690: 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22  ck" (or.    ** "
c6a0: 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65  PRAGMA quick_che
c6b0: 63 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69  ck"), then iDb i
c6c0: 73 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74  s set to 0. In t
c6d0: 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 69 44  his case, set iD
c6e0: 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68  b.    ** to -1 h
c6f0: 65 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65  ere, to indicate
c700: 20 74 68 61 74 20 74 68 65 20 56 44 42 45 20 73   that the VDBE s
c710: 68 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68 65  hould verify the
c720: 20 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a   integrity.    *
c730: 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  * of all attache
c740: 64 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f  d databases.  */
c750: 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
c760: 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  >=0 );.    asser
c770: 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64  t( iDb==0 || pId
c780: 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20  2->z );.    if( 
c790: 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62  pId2->z==0 ) iDb
c7a0: 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49   = -1;..    /* I
c7b0: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44  nitialize the VD
c7c0: 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  BE program */.  
c7d0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
c7e0: 20 36 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   6;.    sqlite3V
c7f0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
c800: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
c810: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c820: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
c830: 45 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68  E, "integrity_ch
c840: 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  eck", SQLITE_STA
c850: 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65  TIC);..    /* Se
c860: 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72  t the maximum er
c870: 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  ror count */.   
c880: 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f   mxErr = SQLITE_
c890: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
c8a0: 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69  ERROR_MAX;.    i
c8b0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
c8c0: 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74     sqlite3GetInt
c8d0: 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72  32(zRight, &mxEr
c8e0: 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78  r);.      if( mx
c8f0: 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20  Err<=0 ){.      
c900: 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
c910: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
c920: 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
c930: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
c940: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c950: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d  v, OP_Integer, m
c960: 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65  xErr, 1);  /* re
c970: 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72  g[1] holds error
c980: 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f  s left */..    /
c990: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
c9a0: 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20  y check on each 
c9b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
c9c0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
c9d0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
c9e0: 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78       HashElem *x
c9f0: 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70 54  ;.      Hash *pT
ca00: 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 63  bls;.      int c
ca10: 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69  nt = 0;..      i
ca20: 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26  f( OMIT_TEMPDB &
ca30: 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75  & i==1 ) continu
ca40: 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44 62  e;.      if( iDb
ca50: 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29 20  >=0 && i!=iDb ) 
ca60: 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20  continue;..     
ca70: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
ca80: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
ca90: 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20   i);.      addr 
caa0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
cab0: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
cac0: 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20   1); /* Halt if 
cad0: 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f  out of errors */
cae0: 0a 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72  .      VdbeCover
caf0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
cb00: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
cb10: 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
cb20: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
cb30: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
cb40: 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  addr);..      /*
cb50: 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79   Do an integrity
cb60: 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d   check of the B-
cb70: 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20  Tree.      **.  
cb80: 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20      ** Begin by 
cb90: 66 69 6c 6c 69 6e 67 20 72 65 67 69 73 74 65 72  filling register
cba0: 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74 68  s 2, 3, ... with
cbb0: 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73 20   the root pages 
cbc0: 6e 75 6d 62 65 72 73 0a 20 20 20 20 20 20 2a 2a  numbers.      **
cbd0: 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73 20   for all tables 
cbe0: 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74  and indices in t
cbf0: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  he database..   
cc00: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
cc10: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
cc20: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
cc30: 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70 54  , 0) );.      pT
cc40: 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  bls = &db->aDb[i
cc50: 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61  ].pSchema->tblHa
cc60: 73 68 3b 0a 20 20 20 20 20 20 66 6f 72 28 78 3d  sh;.      for(x=
cc70: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
cc80: 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c  pTbls); x; x=sql
cc90: 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b  iteHashNext(x)){
cca0: 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a  .        Table *
ccb0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
ccc0: 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20  hData(x);.      
ccd0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
cce0: 20 20 20 20 20 20 20 69 66 28 20 48 61 73 52 6f         if( HasRo
ccf0: 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20  wid(pTab) ){.   
cd00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cd10: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
cd20: 6e 74 65 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e  nteger, pTab->tn
cd30: 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20  um, 2+cnt);.    
cd40: 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e        VdbeCommen
cd50: 74 28 28 76 2c 20 22 25 73 22 2c 20 70 54 61 62  t((v, "%s", pTab
cd60: 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20  ->zName));.     
cd70: 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20       cnt++;.    
cd80: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
cd90: 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  r(pIdx=pTab->pIn
cda0: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
cdb0: 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pIdx->pNext){.  
cdc0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cdd0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
cde0: 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74  Integer, pIdx->t
cdf0: 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20  num, 2+cnt);.   
ce00: 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65         VdbeComme
ce10: 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70 49 64  nt((v, "%s", pId
ce20: 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20  x->zName));.    
ce30: 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
ce40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
ce50: 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
ce60: 72 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75  re sufficient nu
ce70: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
ce80: 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  s have been allo
ce90: 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 70  cated */.      p
cea0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41  Parse->nMem = MA
ceb0: 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  X( pParse->nMem,
cec0: 20 63 6e 74 2b 38 20 29 3b 0a 0a 20 20 20 20 20   cnt+8 );..     
ced0: 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72 65   /* Do the b-tre
cee0: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
cef0: 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  ks */.      sqli
cf00: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
cf10: 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c   OP_IntegrityCk,
cf20: 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20   2, cnt, 1);.   
cf30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
cf40: 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69 29  angeP5(v, (u8)i)
cf50: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
cf60: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
cf70: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32  (v, OP_IsNull, 2
cf80: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
cf90: 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  v);.      sqlite
cfa0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
cfb0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
cfc0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c   0,.         sql
cfd0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
cfe0: 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  "*** in database
cff0: 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e   %s ***\n", db->
d000: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20  aDb[i].zName),. 
d010: 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d          P4_DYNAM
d020: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
d030: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
d040: 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20 31  OP_Move, 2, 4, 1
d050: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d060: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
d070: 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32  _Concat, 4, 3, 2
d080: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d090: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d0a0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31  _ResultRow, 2, 1
d0b0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d0c0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
d0d0: 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  addr);..      /*
d0e0: 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74   Make sure all t
d0f0: 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20 63  he indices are c
d100: 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72 65  onstructed corre
d110: 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ctly..      */. 
d120: 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
d130: 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
d140: 29 3b 20 78 20 26 26 20 21 69 73 51 75 69 63 6b  ); x && !isQuick
d150: 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; x=sqliteHashNe
d160: 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20  xt(x)){.        
d170: 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
d180: 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b  liteHashData(x);
d190: 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
d1a0: 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20 20  pIdx, *pPk;.    
d1b0: 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72 69 6f      Index *pPrio
d1c0: 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  r = 0;.        i
d1d0: 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20 20  nt loopTop;.    
d1e0: 20 20 20 20 69 6e 74 20 69 44 61 74 61 43 75 72      int iDataCur
d1f0: 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20 20 20  , iIdxCur;.     
d200: 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b 0a     int r1 = -1;.
d210: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61  .        if( pTa
d220: 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63  b->pIndex==0 ) c
d230: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
d240: 20 70 50 6b 20 3d 20 48 61 73 52 6f 77 69 64 28   pPk = HasRowid(
d250: 70 54 61 62 29 20 3f 20 30 20 3a 20 73 71 6c 69  pTab) ? 0 : sqli
d260: 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
d270: 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20  ex(pTab);.      
d280: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
d290: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
d2a0: 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20  _IfPos, 1);  /* 
d2b0: 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20 65  Stop if out of e
d2c0: 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 20  rrors */.       
d2d0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d2e0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d2f0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d300: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
d310: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d320: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
d330: 64 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  dr);.        sql
d340: 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
d350: 61 72 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ar(pParse);.    
d360: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
d370: 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70  ableAndIndices(p
d380: 50 61 72 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f  Parse, pTab, OP_
d390: 4f 70 65 6e 52 65 61 64 2c 0a 20 20 20 20 20 20  OpenRead,.      
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
d3c0: 30 2c 20 26 69 44 61 74 61 43 75 72 2c 20 26 69  0, &iDataCur, &i
d3d0: 49 64 78 43 75 72 29 3b 0a 20 20 20 20 20 20 20  IdxCur);.       
d3e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d3f0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
d400: 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20 20 20 20  , 0, 7);.       
d410: 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
d420: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
d430: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
d440: 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
d450: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d460: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
d470: 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f  eger, 0, 8+j); /
d480: 2a 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  * index entries 
d490: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20  counter */.     
d4a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 50 61     }.        pPa
d4b0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28  rse->nMem = MAX(
d4c0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b  pParse->nMem, 8+
d4d0: 6a 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  j);.        sqli
d4e0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d4f0: 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69 44 61 74   OP_Rewind, iDat
d500: 61 43 75 72 2c 20 30 29 3b 20 56 64 62 65 43 6f  aCur, 0); VdbeCo
d510: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d520: 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c     loopTop = sql
d530: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d540: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20  , OP_AddImm, 7, 
d550: 31 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56  1);.        /* V
d560: 65 72 69 66 79 20 74 68 61 74 20 61 6c 6c 20 4e  erify that all N
d570: 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20  OT NULL columns 
d580: 72 65 61 6c 6c 79 20 61 72 65 20 4e 4f 54 20 4e  really are NOT N
d590: 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  ULL */.        f
d5a0: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e  or(j=0; j<pTab->
d5b0: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
d5c0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72        char *zErr
d5d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
d5e0: 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20  jmp2, jmp3;.    
d5f0: 20 20 20 20 20 20 69 66 28 20 6a 3d 3d 70 54 61        if( j==pTa
d600: 62 2d 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74 69  b->iPKey ) conti
d610: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nue;.          i
d620: 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d  f( pTab->aCol[j]
d630: 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f  .notNull==0 ) co
d640: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
d650: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
d660: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
d670: 65 28 76 2c 20 70 54 61 62 2c 20 69 44 61 74 61  e(v, pTab, iData
d680: 43 75 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20  Cur, j, 3);.    
d690: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d6a0: 65 43 68 61 6e 67 65 50 35 28 76 2c 20 4f 50 46  eChangeP5(v, OPF
d6b0: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a  LAG_TYPEOFARG);.
d6c0: 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d            jmp2 =
d6d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d6e0: 70 31 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c  p1(v, OP_NotNull
d6f0: 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 3); VdbeCovera
d700: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
d710: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d720: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
d730: 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72   1, -1); /* Decr
d740: 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69  ement error limi
d750: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a  t */.          z
d760: 45 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Err = sqlite3MPr
d770: 69 6e 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76  intf(db, "NULL v
d780: 61 6c 75 65 20 69 6e 20 25 73 2e 25 73 22 2c 20  alue in %s.%s", 
d790: 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7b0: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
d7c0: 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b  >aCol[j].zName);
d7d0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d7e0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
d7f0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
d800: 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59  , 0, zErr, P4_DY
d810: 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20  NAMIC);.        
d820: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d830: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
d840: 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20  Row, 3, 1);.    
d850: 20 20 20 20 20 20 6a 6d 70 33 20 3d 20 73 71 6c        jmp3 = sql
d860: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
d870: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
d880: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d890: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d8a0: 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20  e3VdbeAddOp0(v, 
d8b0: 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20  OP_Halt);.      
d8c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
d8d0: 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29  umpHere(v, jmp2)
d8e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d8f0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
d900: 76 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20  v, jmp3);.      
d910: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 56    }.        /* V
d920: 61 6c 69 64 61 74 65 20 69 6e 64 65 78 20 65 6e  alidate index en
d930: 74 72 69 65 73 20 66 6f 72 20 74 68 65 20 63 75  tries for the cu
d940: 72 72 65 6e 74 20 72 6f 77 20 2a 2f 0a 20 20 20  rrent row */.   
d950: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
d960: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
d970: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
d980: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
d990: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
d9a0: 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a  2, jmp3, jmp4, j
d9b0: 6d 70 35 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mp5;.          i
d9c0: 6e 74 20 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69  nt ckUniq = sqli
d9d0: 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
d9e0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  (v);.          i
d9f0: 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63  f( pPk==pIdx ) c
da00: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
da10: 20 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47     r1 = sqlite3G
da20: 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
da30: 70 50 61 72 73 65 2c 20 70 49 64 78 2c 20 69 44  pParse, pIdx, iD
da40: 61 74 61 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a  ataCur, 0, 0, &j
da50: 6d 70 33 2c 0a 20 20 20 20 20 20 20 20 20 20 20  mp3,.           
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da70: 20 20 20 20 20 20 20 20 20 20 20 20 70 50 72 69              pPri
da80: 6f 72 2c 20 72 31 29 3b 0a 20 20 20 20 20 20 20  or, r1);.       
da90: 20 20 20 70 50 72 69 6f 72 20 3d 20 70 49 64 78     pPrior = pIdx
daa0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
dab0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
dac0: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c   OP_AddImm, 8+j,
dad0: 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65   1);  /* increme
dae0: 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a  nt entry count *
daf0: 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  /.          /* V
db00: 65 72 69 66 79 20 74 68 61 74 20 61 6e 20 69 6e  erify that an in
db10: 64 65 78 20 65 6e 74 72 79 20 65 78 69 73 74 73  dex entry exists
db20: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
db30: 20 74 61 62 6c 65 20 72 6f 77 20 2a 2f 0a 20 20   table row */.  
db40: 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
db50: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
db60: 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c  Int(v, OP_Found,
db70: 20 69 49 64 78 43 75 72 2b 6a 2c 20 63 6b 55 6e   iIdxCur+j, ckUn
db80: 69 71 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20  iq, r1,.        
db90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49                pI
dbb0: 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64  dx->nColumn); Vd
dbc0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
dbd0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
dbe0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
dbf0: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
dc00: 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72   /* Decrement er
dc10: 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20  ror limit */.   
dc20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
dc30: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
dc40: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
dc50: 20 22 72 6f 77 20 22 2c 20 50 34 5f 53 54 41 54   "row ", P4_STAT
dc60: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  IC);.          s
dc70: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
dc80: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37  (v, OP_Concat, 7
dc90: 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
dca0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
dcb0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
dcc0: 67 38 2c 20 30 2c 20 34 2c 20 30 2c 20 0a 20 20  g8, 0, 4, 0, .  
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 20 20 20 20 20 20 20 20 22 20 6d 69 73 73            " miss
dcf0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22  ing from index "
dd00: 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
dd10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
dd20: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
dd30: 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29  Concat, 4, 3, 3)
dd40: 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 35  ;.          jmp5
dd50: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
dd60: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
dd70: 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20  g8, 0, 4, 0,.   
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f  pIdx->zName, P4_
ddb0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
ddc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ddd0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
dde0: 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a  ncat, 4, 3, 3);.
ddf0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
de00: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
de10: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20  P_ResultRow, 3, 
de20: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d  1);.          jm
de30: 70 34 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p4 = sqlite3Vdbe
de40: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
de50: 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65  os, 1); VdbeCove
de60: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
de70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
de80: 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29  dOp0(v, OP_Halt)
de90: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
dea0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
deb0: 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20  v, jmp2);.      
dec0: 20 20 20 20 2f 2a 20 46 6f 72 20 55 4e 49 51 55      /* For UNIQU
ded0: 45 20 69 6e 64 65 78 65 73 2c 20 76 65 72 69 66  E indexes, verif
dee0: 79 20 74 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20  y that only one 
def0: 65 6e 74 72 79 20 65 78 69 73 74 73 20 77 69 74  entry exists wit
df00: 68 20 74 68 65 0a 20 20 20 20 20 20 20 20 20 20  h the.          
df10: 2a 2a 20 63 75 72 72 65 6e 74 20 6b 65 79 2e 20  ** current key. 
df20: 20 54 68 65 20 65 6e 74 72 79 20 69 73 20 75 6e   The entry is un
df30: 69 71 75 65 20 69 66 20 28 31 29 20 61 6e 79 20  ique if (1) any 
df40: 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20  column is NULL. 
df50: 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 28           ** or (
df60: 32 29 20 74 68 65 20 6e 65 78 74 20 65 6e 74 72  2) the next entr
df70: 79 20 68 61 73 20 61 20 64 69 66 66 65 72 65 6e  y has a differen
df80: 74 20 6b 65 79 20 2a 2f 0a 20 20 20 20 20 20 20  t key */.       
df90: 20 20 20 69 66 28 20 49 73 55 6e 69 71 75 65 49     if( IsUniqueI
dfa0: 6e 64 65 78 28 70 49 64 78 29 20 29 7b 0a 20 20  ndex(pIdx) ){.  
dfb0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 75 6e            int un
dfc0: 69 71 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64  iqOk = sqlite3Vd
dfd0: 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
dff0: 6a 6d 70 36 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp6;.          
e000: 20 20 69 6e 74 20 6b 6b 3b 0a 20 20 20 20 20 20    int kk;.      
e010: 20 20 20 20 20 20 66 6f 72 28 6b 6b 3d 30 3b 20        for(kk=0; 
e020: 6b 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c  kk<pIdx->nKeyCol
e030: 3b 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; kk++){.       
e040: 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 20         int iCol 
e050: 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e  = pIdx->aiColumn
e060: 5b 6b 6b 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  [kk];.          
e070: 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6f 6c      assert( iCol
e080: 3e 3d 30 20 26 26 20 69 43 6f 6c 3c 70 54 61 62  >=0 && iCol<pTab
e090: 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20  ->nCol );.      
e0a0: 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62          if( pTab
e0b0: 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74  ->aCol[iCol].not
e0c0: 4e 75 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b  Null ) continue;
e0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
e0e0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
e0f0: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72  (v, OP_IsNull, r
e100: 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20  1+kk, uniqOk);. 
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 56 64 62               Vdb
e120: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
e130: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
e140: 20 20 20 20 20 20 20 20 6a 6d 70 36 20 3d 20 73          jmp6 = s
e150: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
e160: 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64  (v, OP_Next, iId
e170: 78 43 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76  xCur+j); VdbeCov
e180: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
e190: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e1a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f  eAddOp2(v, OP_Go
e1b0: 74 6f 2c 20 30 2c 20 75 6e 69 71 4f 6b 29 3b 0a  to, 0, uniqOk);.
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e1d0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
e1e0: 76 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20  v, jmp6);.      
e1f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e200: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
e210: 5f 49 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b  _IdxGT, iIdxCur+
e220: 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20  j, uniqOk, r1,. 
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e250: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20  pIdx->nKeyCol); 
e260: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
e270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e280: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
e290: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
e2a0: 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e  -1); /* Decremen
e2b0: 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f  t error limit */
e2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e2d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
e2e0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
e2f0: 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   3, 0,.         
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e310: 20 20 20 20 20 22 6e 6f 6e 2d 75 6e 69 71 75 65       "non-unique
e320: 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20   entry in index 
e330: 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
e340: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e350: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e360: 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 6a 6d 70 35  OP_Goto, 0, jmp5
e370: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
e380: 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76  qlite3VdbeResolv
e390: 65 4c 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f 6b  eLabel(v, uniqOk
e3a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
e3b0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e3c0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
e3d0: 6a 6d 70 34 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp4);.         
e3e0: 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
e3f0: 61 72 74 49 64 78 4c 61 62 65 6c 28 70 50 61 72  artIdxLabel(pPar
e400: 73 65 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20  se, jmp3);.     
e410: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
e420: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
e430: 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74 61  , OP_Next, iData
e440: 43 75 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20 56  Cur, loopTop); V
e450: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
e460: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e470: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c  dbeJumpHere(v, l
e480: 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64  oopTop-1);.#ifnd
e490: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
e4a0: 54 52 45 45 43 4f 55 4e 54 0a 20 20 20 20 20 20  TREECOUNT.      
e4b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e4c0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
e4d0: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20  8, 0, 2, 0, .   
e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4f0: 20 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e    "wrong # of en
e500: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22  tries in index "
e510: 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
e520: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
e530: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
e540: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
e550: 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
e560: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
e570: 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e  k==pIdx ) contin
e580: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64  ue;.          ad
e590: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
e5a0: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a  CurrentAddr(v);.
e5b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e5c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e5d0: 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72  P_IfPos, 1, addr
e5e0: 2b 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +2); VdbeCoverag
e5f0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
e600: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e610: 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  2(v, OP_Halt, 0,
e620: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   0);.          s
e630: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
e640: 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49  (v, OP_Count, iI
e650: 64 78 43 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20  dxCur+j, 3);.   
e660: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e670: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45  beAddOp3(v, OP_E
e680: 71 2c 20 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20  q, 8+j, addr+8, 
e690: 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  3); VdbeCoverage
e6a0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
e6b0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
e6c0: 50 35 28 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54  P5(v, SQLITE_NOT
e6d0: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20  NULL);.         
e6e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e6f0: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
e700: 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20   1, -1);.       
e710: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e720: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
e730: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 49 64  g8, 0, 3, 0, pId
e740: 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41  x->zName, P4_TRA
e750: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20  NSIENT);.       
e760: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e770: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
e780: 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20  t, 3, 2, 7);.   
e790: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e7a0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
e7b0: 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b  esultRow, 7, 1);
e7c0: 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  .        }.#endi
e7d0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
e7e0: 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20  _BTREECOUNT */. 
e7f0: 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20       } .    }.  
e800: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
e810: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
e820: 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f   ArraySize(endCo
e830: 64 65 29 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c  de), endCode, iL
e840: 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  n);.    sqlite3V
e850: 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61  dbeChangeP3(v, a
e860: 64 64 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20  ddr, -mxErr);.  
e870: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
e880: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
e890: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
e8a0: 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b  hangeP4(v, addr+
e8b0: 31 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54  1, "ok", P4_STAT
e8c0: 49 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  IC);.  }.  break
e8d0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
e8e0: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
e8f0: 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e  Y_CHECK */..#ifn
e900: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
e910: 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20  UTF16.  /*.  ** 
e920: 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
e930: 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  g.  **   PRAGMA 
e940: 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d  encoding = "utf-
e950: 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66  8"|"utf-16"|"utf
e960: 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65  -16le"|"utf-16be
e970: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69  ".  **.  ** In i
e980: 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74  ts first form, t
e990: 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72  his pragma retur
e9a0: 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  ns the encoding 
e9b0: 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a  of the main.  **
e9c0: 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
e9d0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
e9e0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69  t initialized, i
e9f0: 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  t is initialized
ea00: 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   now..  **.  ** 
ea10: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
ea20: 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69  of this pragma i
ea30: 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
ea40: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
ea50: 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74  ile.  ** has not
ea60: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
ea70: 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68  itialized. In th
ea80: 69 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20  is case it sets 
ea90: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a  the default.  **
eaa0: 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77   encoding that w
eab0: 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
eac0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
ead0: 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20  e file if a new 
eae0: 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65  file.  ** is cre
eaf0: 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73  ated. If an exis
eb00: 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61  ting main databa
eb10: 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65  se file is opene
eb20: 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  d, then the.  **
eb30: 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
eb40: 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65  coding for the e
eb50: 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
eb60: 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a   is used..  ** .
eb70: 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65    ** In all case
eb80: 73 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  s new databases 
eb90: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
eba0: 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64  e ATTACH command
ebb0: 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65   are.  ** create
ebc0: 64 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  d to use the sam
ebd0: 65 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65  e default text e
ebe0: 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d  ncoding as the m
ebf0: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66  ain database. If
ec00: 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  .  ** the main d
ec10: 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
ec20: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
ec30: 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20   and/or created 
ec40: 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a  when ATTACH.  **
ec50: 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68   is executed, th
ec60: 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72  is is done befor
ec70: 65 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65  e the ATTACH ope
ec80: 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  ration..  **.  *
ec90: 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * In the second 
eca0: 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61  form this pragma
ecb0: 20 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65   sets the text e
ecc0: 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73  ncoding to be us
ecd0: 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64  ed in.  ** new d
ece0: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72  atabase files cr
ecf0: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73  eated using this
ed00: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
ed10: 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a  . It is only.  *
ed20: 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f  * useful if invo
ed30: 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ked immediately 
ed40: 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64  after the main d
ed50: 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20  atabase i.  */. 
ed60: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e   case PragTyp_EN
ed70: 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74  CODING: {.    st
ed80: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
ed90: 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20  t EncName {.    
eda0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20    char *zName;. 
edb0: 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20       u8 enc;.   
edc0: 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20   } encnames[] = 
edd0: 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22  {.      { "UTF8"
ede0: 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ,     SQLITE_UTF
edf0: 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  8        },.    
ee00: 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20    { "UTF-8",    
ee10: 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20  SQLITE_UTF8     
ee20: 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
ee30: 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f  e element [1] */
ee40: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
ee50: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  le", SQLITE_UTF1
ee60: 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6LE     },  /* M
ee70: 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
ee80: 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  2] */.      { "U
ee90: 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45  TF-16be", SQLITE
eea0: 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20  _UTF16BE     }, 
eeb0: 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
eec0: 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20  ent [3] */.     
eed0: 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53   { "UTF16le",  S
eee0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20  QLITE_UTF16LE   
eef0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
ef00: 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f  F16be",  SQLITE_
ef10: 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20  UTF16BE     },. 
ef20: 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c       { "UTF-16",
ef30: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
ef40: 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
ef50: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
ef60: 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  /.      { "UTF16
ef70: 22 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20  ",    0         
ef80: 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53           }, /* S
ef90: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
efa0: 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20  E */.      { 0, 
efb0: 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63  0 }.    };.    c
efc0: 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e  onst struct EncN
efd0: 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69  ame *pEnc;.    i
efe0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20  f( !zRight ){   
eff0: 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
f000: 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69  ding" */.      i
f010: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
f020: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
f030: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
f040: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f050: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
f060: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
f070: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
f080: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
f090: 45 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53  E, "encoding", S
f0a0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
f0b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f0c0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72  AddOp2(v, OP_Str
f0d0: 69 6e 67 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20  ing8, 0, 1);.   
f0e0: 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61     assert( encna
f0f0: 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d  mes[SQLITE_UTF8]
f100: 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
f110: 38 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  8 );.      asser
f120: 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49  t( encnames[SQLI
f130: 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d  TE_UTF16LE].enc=
f140: 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
f150: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
f160: 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
f170: 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53  _UTF16BE].enc==S
f180: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b  QLITE_UTF16BE );
f190: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f1a0: 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31  beChangeP4(v, -1
f1b0: 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70  , encnames[ENC(p
f1c0: 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d  Parse->db)].zNam
f1d0: 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  e, P4_STATIC);. 
f1e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f1f0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
f200: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
f210: 20 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20     }else{       
f220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f230: 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
f240: 64 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20  ding = XXX" */. 
f250: 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61       /* Only cha
f260: 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  nge the value of
f270: 20 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74   sqlite.enc if t
f280: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
f290: 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20  le is not.      
f2a0: 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  ** initialized. 
f2b0: 49 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  If the main data
f2c0: 62 61 73 65 20 65 78 69 73 74 73 2c 20 74 68 65  base exists, the
f2d0: 20 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20   new sqlite.enc 
f2e0: 76 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77  value.      ** w
f2f0: 69 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74  ill be overwritt
f300: 65 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  en when the sche
f310: 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65  ma is next loade
f320: 64 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  d. If it does no
f330: 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61  t.      ** alrea
f340: 64 79 20 65 78 69 73 74 73 2c 20 69 74 20 77 69  dy exists, it wi
f350: 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20 74 6f  ll be created to
f360: 20 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63   use the new enc
f370: 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20  oding value..   
f380: 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
f390: 0a 20 20 20 20 20 20 20 20 21 28 44 62 48 61 73  .        !(DbHas
f3a0: 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
f3b0: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
f3c0: 29 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62  ) || .        Db
f3d0: 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
f3e0: 30 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20  0, DB_Empty) .  
f3f0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66      ){.        f
f400: 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65  or(pEnc=&encname
f410: 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d  s[0]; pEnc->zNam
f420: 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20  e; pEnc++){.    
f430: 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c        if( 0==sql
f440: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
f450: 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29  ht, pEnc->zName)
f460: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
f470: 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d  SCHEMA_ENC(db) =
f480: 20 45 4e 43 28 64 62 29 20 3d 0a 20 20 20 20 20   ENC(db) =.     
f490: 20 20 20 20 20 20 20 20 20 20 20 70 45 6e 63 2d             pEnc-
f4a0: 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63  >enc ? pEnc->enc
f4b0: 20 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   : SQLITE_UTF16N
f4c0: 41 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20 20  ATIVE;.         
f4d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
f4e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
f4f0: 20 20 20 20 20 20 20 20 69 66 28 20 21 70 45 6e          if( !pEn
f500: 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20  c->zName ){.    
f510: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
f520: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 75  orMsg(pParse, "u
f530: 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64  nsupported encod
f540: 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68 74  ing: %s", zRight
f550: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
f560: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
f570: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
f580: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
f590: 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  F16 */..#ifndef 
f5a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
f5b0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
f5c0: 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AS.  /*.  **   P
f5d0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
f5e0: 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a  ]schema_version.
f5f0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
f600: 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f  atabase.]schema_
f610: 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67  version = <integ
f620: 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  er>.  **.  **   
f630: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
f640: 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20  .]user_version. 
f650: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
f660: 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72  tabase.]user_ver
f670: 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e  sion = <integer>
f680: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
f690: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 66  GMA [database.]f
f6a0: 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20  reelist_count = 
f6b0: 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
f6c0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
f6d0: 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61 74  tabase.]applicat
f6e0: 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52  ion_id.  **   PR
f6f0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
f700: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d  application_id =
f710: 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
f720: 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27    ** The pragma'
f730: 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  s schema_version
f740: 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f   and user_versio
f750: 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 65  n are used to se
f760: 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68  t or get.  ** th
f770: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73  e value of the s
f780: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e  chema-version an
f790: 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20  d user-version, 
f7a0: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f  respectively. Bo
f7b0: 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65  th.  ** the sche
f7c0: 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74  ma-version and t
f7d0: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
f7e0: 61 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65  are 32-bit signe
f7f0: 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20  d integers.  ** 
f800: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
f810: 74 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20  tabase header.. 
f820: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68   **.  ** The sch
f830: 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73  ema-cookie is us
f840: 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70  ually only manip
f850: 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c  ulated internall
f860: 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a  y by SQLite. It.
f870: 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e    ** is incremen
f880: 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68  ted by SQLite wh
f890: 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
f8a0: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f  ase schema is mo
f8b0: 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20  dified (by.  ** 
f8c0: 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70  creating or drop
f8d0: 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20  ping a table or 
f8e0: 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68 65  index). The sche
f8f0: 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73  ma version is us
f900: 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74  ed by.  ** SQLit
f910: 65 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75  e each time a qu
f920: 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20  ery is executed 
f930: 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
f940: 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68  he internal cach
f950: 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63  e.  ** of the sc
f960: 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63  hema used when c
f970: 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c  ompiling the SQL
f980: 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74   query matches t
f990: 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a  he schema of.  *
f9a0: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  * the database a
f9b0: 67 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65  gainst which the
f9c0: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20   compiled query 
f9d0: 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63  is actually exec
f9e0: 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65  uted..  ** Subve
f9f0: 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61  rting this mecha
fa00: 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50  nism by using "P
fa10: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
fa20: 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a  sion" to modify.
fa30: 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d    ** the schema-
fa40: 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e  version is poten
fa50: 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73  tially dangerous
fa60: 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f   and may lead to
fa70: 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72   program.  ** cr
fa80: 61 73 68 65 73 20 6f 72 20 64 61 74 61 62 61 73  ashes or databas
fa90: 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73  e corruption. Us
faa0: 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a  e with caution!.
fab0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73    **.  ** The us
fac0: 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f  er-version is no
fad0: 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  t used internall
fae0: 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20  y by SQLite. It 
faf0: 6d 61 79 20 62 65 20 75 73 65 64 20 62 79 0a 20  may be used by. 
fb00: 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73   ** applications
fb10: 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65   for any purpose
fb20: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
fb30: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
fb40: 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 43  UE: {.    int iC
fb50: 6f 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d 61 2d  ookie = pPragma-
fb60: 3e 69 41 72 67 3b 20 20 2f 2a 20 57 68 69 63 68  >iArg;  /* Which
fb70: 20 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61 64 20   cookie to read 
fb80: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 20 20  or write */.    
fb90: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
fba0: 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20  tree(v, iDb);.  
fbb0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20    if( zRight && 
fbc0: 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46  (pPragma->mPragF
fbd0: 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 52  lag & PragFlag_R
fbe0: 65 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20  eadOnly)==0 ){. 
fbf0: 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68       /* Write th
fc00: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b  e specified cook
fc10: 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ie value */.    
fc20: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
fc30: 64 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f  dbeOpList setCoo
fc40: 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  kie[] = {.      
fc50: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
fc60: 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30  on,    0,  1,  0
fc70: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
fc80: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
fc90: 65 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31  er,        0,  1
fca0: 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a  ,  0},    /* 1 *
fcb0: 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53  /.        { OP_S
fcc0: 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30  etCookie,      0
fcd0: 2c 20 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a  ,  0,  1},    /*
fce0: 20 32 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20   2 */.      };. 
fcf0: 20 20 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20       int addr = 
fd00: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
fd10: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
fd20: 65 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65  e(setCookie), se
fd30: 74 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20  tCookie, 0);.   
fd40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
fd50: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20  angeP1(v, addr, 
fd60: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
fd70: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
fd80: 76 2c 20 61 64 64 72 2b 31 2c 20 73 71 6c 69 74  v, addr+1, sqlit
fd90: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b  e3Atoi(zRight));
fda0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
fdb0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
fdc0: 64 72 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20  dr+2, iDb);.    
fdd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
fde0: 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP2(v, addr+2,
fdf0: 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d   iCookie);.    }
fe00: 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52  else{.      /* R
fe10: 65 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65  ead the specifie
fe20: 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a  d cookie value *
fe30: 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  /.      static c
fe40: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
fe50: 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b  readCookie[] = {
fe60: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72  .        { OP_Tr
fe70: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30  ansaction,     0
fe80: 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  0,  0},    /*
fe90: 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
fea0: 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20  OP_ReadCookie,  
feb0: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
fec0: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
fed0: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
fee0: 77 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20  w,       1,  1, 
fef0: 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20   0}.      };.   
ff00: 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71     int addr = sq
ff10: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
ff20: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
ff30: 72 65 61 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61  readCookie), rea
ff40: 64 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20  dCookie, 0);.   
ff50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
ff60: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20  angeP1(v, addr, 
ff70: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
ff80: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
ff90: 76 2c 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b  v, addr+1, iDb);
ffa0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ffb0: 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64  beChangeP3(v, ad
ffc0: 64 72 2b 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a  dr+1, iCookie);.
ffd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ffe0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
fff0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10000 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
10010 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
10020 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45  E, zLeft, SQLITE
10030 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
10040 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
10050 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
10060 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
10070 53 49 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  SION_PRAGMAS */.
10080 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10090 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
100a0 4f 4e 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20  ON_DIAGS.  /*.  
100b0 2a 2a 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70  **   PRAGMA comp
100c0 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a  ile_options.  **
100d0 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  .  ** Return the
100e0 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f   names of all co
100f0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
10100 6e 73 20 75 73 65 64 20 69 6e 20 74 68 69 73 20  ns used in this 
10110 62 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20  build,.  ** one 
10120 6f 70 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a  option per row..
10130 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
10140 54 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  Typ_COMPILE_OPTI
10150 4f 4e 53 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  ONS: {.    int i
10160 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20   = 0;.    const 
10170 63 68 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20  char *zOpt;.    
10180 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
10190 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
101a0 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
101b0 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  1;.    sqlite3Vd
101c0 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
101d0 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
101e0 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e   "compile_option
101f0 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
10200 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a  );.    while( (z
10210 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Opt = sqlite3_co
10220 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
10230 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  i++))!=0 ){.    
10240 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10250 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
10260 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74  8, 0, 1, 0, zOpt
10270 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
10280 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10290 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
102a0 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , 1);.    }.  }.
102b0 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
102c0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
102d0 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
102e0 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  GS */..#ifndef S
102f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
10300 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
10310 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 77 61 6c  A [database.]wal
10320 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61  _checkpoint = pa
10330 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61  ssive|full|resta
10340 72 74 7c 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a  rt|truncate.  **
10350 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74  .  ** Checkpoint
10360 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20   the database.. 
10370 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
10380 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e  yp_WAL_CHECKPOIN
10390 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74  T: {.    int iBt
103a0 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a   = (pId2->z?iDb:
103b0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
103c0 48 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d  HED);.    int eM
103d0 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45  ode = SQLITE_CHE
103e0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b  CKPOINT_PASSIVE;
103f0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
10400 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
10410 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
10420 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29  ht, "full")==0 )
10430 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20  {.        eMode 
10440 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  = SQLITE_CHECKPO
10450 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20  INT_FULL;.      
10460 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
10470 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
10480 20 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29   "restart")==0 )
10490 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20  {.        eMode 
104a0 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  = SQLITE_CHECKPO
104b0 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20  INT_RESTART;.   
104c0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
104d0 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
104e0 68 74 2c 20 22 74 72 75 6e 63 61 74 65 22 29 3d  ht, "truncate")=
104f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d  =0 ){.        eM
10500 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45  ode = SQLITE_CHE
10510 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45  CKPOINT_TRUNCATE
10520 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
10530 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
10540 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b  etNumCols(v, 3);
10550 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
10560 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74  m = 3;.    sqlit
10570 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
10580 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
10590 41 4d 45 2c 20 22 62 75 73 79 22 2c 20 53 51 4c  AME, "busy", SQL
105a0 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
105b0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
105c0 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
105d0 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22  NAME_NAME, "log"
105e0 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
105f0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
10600 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
10610 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
10620 22 63 68 65 63 6b 70 6f 69 6e 74 65 64 22 2c 20  "checkpointed", 
10630 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
10640 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10650 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65  AddOp3(v, OP_Che
10660 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d  ckpoint, iBt, eM
10670 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  ode, 1);.    sql
10680 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10690 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
106a0 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65  1, 3);.  }.  bre
106b0 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  ak;..  /*.  **  
106c0 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f   PRAGMA wal_auto
106d0 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20  checkpoint.  ** 
106e0 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74    PRAGMA wal_aut
106f0 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a  ocheckpoint = N.
10700 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67    **.  ** Config
10710 75 72 65 20 61 20 64 61 74 61 62 61 73 65 20 63  ure a database c
10720 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74  onnection to aut
10730 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b  omatically check
10740 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73 65  point a database
10750 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75  .  ** after accu
10760 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65  mulating N frame
10770 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72  s in the log. Or
10780 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 20 63   query for the c
10790 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a  urrent value.  *
107a0 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63  * of N..  */.  c
107b0 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f  ase PragTyp_WAL_
107c0 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20  AUTOCHECKPOINT: 
107d0 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
107e0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
107f0 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  3_wal_autocheckp
10800 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69 74 65 33  oint(db, sqlite3
10810 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
10820 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
10830 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
10840 20 22 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70   "wal_autocheckp
10850 6f 69 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64  oint", .       d
10860 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d  b->xWalCallback=
10870 3d 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75  =sqlite3WalDefau
10880 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20  ltHook ? .      
10890 20 20 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f       SQLITE_PTR_
108a0 54 4f 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41  TO_INT(db->pWalA
108b0 72 67 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20  rg) : 0);.  }.  
108c0 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
108d0 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
108e0 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20   shrink_memory. 
108f0 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 70 72   **.  ** This pr
10900 61 67 6d 61 20 61 74 74 65 6d 70 74 73 20 74 6f  agma attempts to
10910 20 66 72 65 65 20 61 73 20 6d 75 63 68 20 6d 65   free as much me
10920 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65  mory as possible
10930 20 66 72 6f 6d 20 74 68 65 0a 20 20 2a 2a 20 63   from the.  ** c
10940 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20  urrent database 
10950 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 2a 2f  connection..  */
10960 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10970 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b  SHRINK_MEMORY: {
10980 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
10990 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 64  release_memory(d
109a0 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  b);.    break;. 
109b0 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
109c0 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65  PRAGMA busy_time
109d0 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  out.  **   PRAGM
109e0 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d  A busy_timeout =
109f0 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c   N.  **.  ** Cal
10a00 6c 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74  l sqlite3_busy_t
10a10 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20  imeout(db, N).  
10a20 52 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65  Return the curre
10a30 6e 74 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65  nt timeout value
10a40 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20  .  ** if one is 
10a50 73 65 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79  set.  If no busy
10a60 20 68 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69   handler or a di
10a70 66 66 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e  fferent busy han
10a80 64 6c 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a  dler is set.  **
10a90 20 74 68 65 6e 20 30 20 69 73 20 72 65 74 75 72   then 0 is retur
10aa0 6e 65 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68  ned.  Setting th
10ab0 65 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74  e busy_timeout t
10ac0 6f 20 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a  o 0 or negative.
10ad0 20 20 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68    ** disables th
10ae0 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a  e timeout..  */.
10af0 20 20 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70    /*case PragTyp
10b00 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20  _BUSY_TIMEOUT*/ 
10b10 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61  default: {.    a
10b20 73 73 65 72 74 28 20 70 50 72 61 67 6d 61 2d 3e  ssert( pPragma->
10b30 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79  ePragTyp==PragTy
10b40 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29  p_BUSY_TIMEOUT )
10b50 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
10b60 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
10b70 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
10b80 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
10b90 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
10ba0 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
10bb0 6e 74 28 70 50 61 72 73 65 2c 20 22 74 69 6d 65  nt(pParse, "time
10bc0 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54  out",  db->busyT
10bd0 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65  imeout);.    bre
10be0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
10bf0 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
10c00 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a  _heap_limit.  **
10c10 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68     PRAGMA soft_h
10c20 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20  eap_limit = N.  
10c30 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c  **.  ** Call sql
10c40 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
10c50 69 6d 69 74 36 34 28 4e 29 2e 20 20 52 65 74 75  imit64(N).  Retu
10c60 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  rn the result.  
10c70 49 66 20 4e 20 69 73 20 6f 6d 69 74 74 65 64 2c  If N is omitted,
10c80 0a 20 20 2a 2a 20 75 73 65 20 2d 31 2e 0a 20 20  .  ** use -1..  
10c90 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
10ca0 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49  p_SOFT_HEAP_LIMI
10cb0 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  T: {.    sqlite3
10cc0 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66  _int64 N;.    if
10cd0 28 20 7a 52 69 67 68 74 20 26 26 20 73 71 6c 69  ( zRight && sqli
10ce0 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
10cf0 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51  (zRight, &N)==SQ
10d00 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
10d10 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
10d20 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20  ap_limit64(N);. 
10d30 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
10d40 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
10d50 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69   "soft_heap_limi
10d60 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66  t",  sqlite3_sof
10d70 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d  t_heap_limit64(-
10d80 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  1));.    break;.
10d90 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
10da0 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a   PRAGMA threads.
10db0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68    **   PRAGMA th
10dc0 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20  reads = N.  **. 
10dd0 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68   ** Configure th
10de0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
10df0 20 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61   of worker threa
10e00 64 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  ds.  Return the 
10e10 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d  new.  ** maximum
10e20 2c 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65  , which might be
10e30 20 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75 65   less than reque
10e40 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  sted..  */.  cas
10e50 65 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44  e PragTyp_THREAD
10e60 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  S: {.    sqlite3
10e70 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66  _int64 N;.    if
10e80 28 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26  ( zRight.     &&
10e90 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
10ea0 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e  ToI64(zRight, &N
10eb0 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  )==SQLITE_OK.   
10ec0 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b    && N>=0.    ){
10ed0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c  .      sqlite3_l
10ee0 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  imit(db, SQLITE_
10ef0 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
10f00 45 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78  EADS, (int)(N&0x
10f10 37 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20  7fffffff));.    
10f20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
10f30 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74  leInt(pParse, "t
10f40 68 72 65 61 64 73 22 2c 0a 20 20 20 20 20 20 20  hreads",.       
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
10f60 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53  ite3_limit(db, S
10f70 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
10f80 45 52 5f 54 48 52 45 41 44 53 2c 20 2d 31 29 29  ER_THREADS, -1))
10f90 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
10fa0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
10fb0 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
10fc0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
10fd0 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65  ST).  /*.  ** Re
10fe0 70 6f 72 74 20 74 68 65 20 63 75 72 72 65 6e 74  port the current
10ff0 20 73 74 61 74 65 20 6f 66 20 66 69 6c 65 20 6c   state of file l
11000 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61  ogs for all data
11010 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73  bases.  */.  cas
11020 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53  e PragTyp_LOCK_S
11030 54 41 54 55 53 3a 20 7b 0a 20 20 20 20 73 74 61  TATUS: {.    sta
11040 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
11050 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65  const azLockName
11060 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e  [] = {.      "un
11070 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61 72 65 64  locked", "shared
11080 22 2c 20 22 72 65 73 65 72 76 65 64 22 2c 20 22  ", "reserved", "
11090 70 65 6e 64 69 6e 67 22 2c 20 22 65 78 63 6c 75  pending", "exclu
110a0 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20  sive".    };.   
110b0 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69   int i;.    sqli
110c0 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
110d0 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61  s(v, 2);.    pPa
110e0 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20  rse->nMem = 2;. 
110f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
11100 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
11110 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 61  OLNAME_NAME, "da
11120 74 61 62 61 73 65 22 2c 20 53 51 4c 49 54 45 5f  tabase", SQLITE_
11130 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
11140 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
11150 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
11160 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75 73 22 2c  _NAME, "status",
11170 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
11180 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
11190 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
111a0 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b       Btree *pBt;
111b0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
111c0 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b  r *zState = "unk
111d0 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74  nown";.      int
111e0 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62   j;.      if( db
111f0 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d  ->aDb[i].zName==
11200 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
11210 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
11220 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
11230 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 64 62  ng8, 0, 1, 0, db
11240 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
11250 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
11260 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
11270 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69 66  i].pBt;.      if
11280 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69  ( pBt==0 || sqli
11290 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
112a0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)==0 ){.       
112b0 20 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73 65   zState = "close
112c0 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  d";.      }else 
112d0 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  if( sqlite3_file
112e0 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f  _control(db, i ?
112f0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
11300 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20  e : 0, .        
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
11330 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54  ITE_FCNTL_LOCKST
11340 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45  ATE, &j)==SQLITE
11350 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
11360 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e  zState = azLockN
11370 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a  ame[j];.      }.
11380 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11390 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
113a0 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
113b0 7a 53 74 61 74 65 2c 20 50 34 5f 53 54 41 54 49  zState, P4_STATI
113c0 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
113d0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
113e0 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
113f0 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  2);.    }.    br
11400 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
11410 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
11420 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20  AS_CODEC.  case 
11430 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20  PragTyp_KEY: {. 
11440 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20     if( zRight ) 
11450 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64  sqlite3_key_v2(d
11460 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20  b, zDb, zRight, 
11470 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
11480 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72  zRight));.    br
11490 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20  eak;.  }.  case 
114a0 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b  PragTyp_REKEY: {
114b0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
114c0 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f  ) sqlite3_rekey_
114d0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
114e0 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
114f0 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
11500 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
11510 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b  ase PragTyp_HEXK
11520 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
11530 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38  ight ){.      u8
11540 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e   iByte;.      in
11550 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20  t i;.      char 
11560 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20  zKey[40];.      
11570 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30  for(i=0, iByte=0
11580 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29  ; i<sizeof(zKey)
11590 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78  *2 && sqlite3Isx
115a0 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29  digit(zRight[i])
115b0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
115c0 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c  iByte = (iByte<<
115d0 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54  4) + sqlite3HexT
115e0 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  oInt(zRight[i]);
115f0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26  .        if( (i&
11600 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32  1)!=0 ) zKey[i/2
11610 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20  ] = iByte;.     
11620 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c   }.      if( (zL
11630 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30  eft[3] & 0xf)==0
11640 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  xb ){.        sq
11650 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c  lite3_key_v2(db,
11660 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
11670 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
11680 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
11690 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
116a0 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20   zKey, i/2);.   
116b0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
116c0 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
116d0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
116e0 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c  ITE_HAS_CODEC) |
116f0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
11700 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20  _ENABLE_CEROD). 
11710 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43   case PragTyp_AC
11720 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
11730 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  S: if( zRight ){
11740 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
11750 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28  AS_CODEC.    if(
11760 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
11770 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c  (zRight, "see-",
11780 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   4)==0 ){.      
11790 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65  sqlite3_activate
117a0 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29  _see(&zRight[4])
117b0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23  ;.    }.#endif.#
117c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
117d0 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66  BLE_CEROD.    if
117e0 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
117f0 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64  p(zRight, "cerod
11800 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 6)==0 ){.   
11810 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
11820 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68  ate_cerod(&zRigh
11830 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[6]);.    }.#en
11840 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
11850 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20  .#endif..  } /* 
11860 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d  End of the PRAGM
11870 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61  A switch */..pra
11880 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74  gma_out:.  sqlit
11890 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65  e3DbFree(db, zLe
118a0 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  ft);.  sqlite3Db
118b0 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29  Free(db, zRight)
118c0 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.}..#endif /* S
118d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
118e0 41 20 2a 2f 0a                                   A */.