/ Hex Artifact Content
Login

Artifact c1f4d012ea9f6b1ce52d341b2cd0ad72d560afd7:


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 6e 4d 65 6d 20 3d 20 2b 2b 70 50 61 72  nt nMem = ++pPar
1550: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20  se->nMem;.  i64 
1560: 2a 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44  *pI64 = sqlite3D
1570: 62 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73  bMallocRaw(pPars
1580: 65 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61  e->db, sizeof(va
1590: 6c 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36  lue));.  if( pI6
15a0: 34 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  4 ){.    memcpy(
15b0: 70 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69  pI64, &value, si
15c0: 7a 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20  zeof(value));.  
15d0: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41  }.  sqlite3VdbeA
15e0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36  ddOp4(v, OP_Int6
15f0: 34 2c 20 30 2c 20 6e 4d 65 6d 2c 20 30 2c 20 28  4, 0, nMem, 0, (
1600: 63 68 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49  char*)pI64, P4_I
1610: 4e 54 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33  NT64);.  sqlite3
1620: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
1630: 2c 20 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  , 1);.  sqlite3V
1640: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
1650: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
1660: 2c 20 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45  , zLabel, SQLITE
1670: 5f 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69  _STATIC);.  sqli
1680: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
1690: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6e   OP_ResultRow, n
16a0: 4d 65 6d 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a  Mem, 1);.}.../*.
16b0: 2a 2a 20 53 65 74 20 74 68 65 20 73 61 66 65 74  ** Set the safet
16c0: 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70 61 67 65  y_level and page
16d0: 72 20 66 6c 61 67 73 20 66 6f 72 20 70 61 67 65  r flags for page
16e0: 72 20 69 44 62 2e 20 20 4f 72 20 69 66 20 69 44  r iDb.  Or if iD
16f0: 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68 65 73 65  b<0.** set these
1700: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
1710: 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  pagers..*/.#ifnd
1720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
1730: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 73 74 61  AGER_PRAGMAS.sta
1740: 74 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 50  tic void setAllP
1750: 61 67 65 72 46 6c 61 67 73 28 73 71 6c 69 74 65  agerFlags(sqlite
1760: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
1770: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1780: 20 20 20 20 44 62 20 2a 70 44 62 20 3d 20 64 62      Db *pDb = db
1790: 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e  ->aDb;.    int n
17a0: 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20   = db->nDb;.    
17b0: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 46  assert( SQLITE_F
17c0: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
17d0: 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20  FULLFSYNC );.   
17e0: 20 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f   assert( SQLITE_
17f0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  CkptFullFSync==P
1800: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
1810: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
1820: 74 28 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  t( SQLITE_CacheS
1830: 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48  pill==PAGER_CACH
1840: 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73  ESPILL );.    as
1850: 73 65 72 74 28 20 28 50 41 47 45 52 5f 46 55 4c  sert( (PAGER_FUL
1860: 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43  LFSYNC | PAGER_C
1870: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20  KPT_FULLFSYNC | 
1880: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
1890: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3d  ).             =
18a0: 3d 20 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d  =  PAGER_FLAGS_M
18b0: 41 53 4b 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ASK );.    asser
18c0: 74 28 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f  t( (pDb->safety_
18d0: 6c 65 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59  level & PAGER_SY
18e0: 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d  NCHRONOUS_MASK)=
18f0: 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  =pDb->safety_lev
1900: 65 6c 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  el );.    while(
1910: 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20   (n--) > 0 ){.  
1920: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
1930: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1940: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 72  te3BtreeSetPager
1950: 46 6c 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a  Flags(pDb->pBt,.
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1970: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
1980: 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20  el | (db->flags 
1990: 26 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41  & PAGER_FLAGS_MA
19a0: 53 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  SK) );.      }. 
19b0: 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20       pDb++;.    
19c0: 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20  }.  }.}.#else.# 
19d0: 64 65 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67  define setAllPag
19e0: 65 72 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e  erFlags(X)  /* n
19f0: 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  o-op */.#endif..
1a00: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
1a10: 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e  human-readable n
1a20: 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72  ame for a constr
1a30: 61 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  aint resolution 
1a40: 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  action..*/.#ifnd
1a50: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1a60: 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69  OREIGN_KEY.stati
1a70: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63  c const char *ac
1a80: 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69  tionName(u8 acti
1a90: 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  on){.  const cha
1aa0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74  r *zName;.  swit
1ab0: 63 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ch( action ){.  
1ac0: 20 20 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c    case OE_SetNul
1ad0: 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54  l:  zName = "SET
1ae0: 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62   NULL";        b
1af0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1b00: 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d  E_SetDflt:  zNam
1b10: 65 20 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54  e = "SET DEFAULT
1b20: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
1b30: 20 20 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64    case OE_Cascad
1b40: 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53  e:  zName = "CAS
1b50: 43 41 44 45 22 3b 20 20 20 20 20 20 20 20 20 62  CADE";         b
1b60: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1b70: 45 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d  E_Restrict: zNam
1b80: 65 20 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20  e = "RESTRICT"; 
1b90: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1ba0: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
1bb0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20      zName = "NO 
1bc0: 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20  ACTION";  .     
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be0: 20 61 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d   assert( action=
1bf0: 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61  =OE_None ); brea
1c00: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1c10: 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a  zName;.}.#endif.
1c20: 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ../*.** Paramete
1c30: 72 20 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20  r eMode must be 
1c40: 6f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52  one of the PAGER
1c50: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
1c60: 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1c70: 66 69 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68  fined in pager.h
1c80: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
1c90: 72 65 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f  returns the asso
1ca0: 63 69 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65  ciated lowercase
1cb0: 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  .** journal-mode
1cc0: 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20   name..*/.const 
1cd0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
1ce0: 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
1cf0: 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69   eMode){.  stati
1d00: 63 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  c char * const a
1d10: 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zModeName[] = {.
1d20: 20 20 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70      "delete", "p
1d30: 65 72 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20  ersist", "off", 
1d40: 22 74 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d  "truncate", "mem
1d50: 6f 72 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c  ory".#ifndef SQL
1d60: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20  ITE_OMIT_WAL.   
1d70: 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66    , "wal".#endif
1d80: 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20  .  };.  assert( 
1d90: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
1da0: 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20  E_DELETE==0 );. 
1db0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
1dc0: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
1dd0: 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  ST==1 );.  asser
1de0: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
1df0: 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20  MODE_OFF==2 );. 
1e00: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
1e10: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
1e20: 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65  ATE==3 );.  asse
1e30: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
1e40: 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20  LMODE_MEMORY==4 
1e50: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
1e60: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
1e70: 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72  AL==5 );.  asser
1e80: 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65  t( eMode>=0 && e
1e90: 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28  Mode<=ArraySize(
1ea0: 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a  azModeName) );..
1eb0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72    if( eMode==Arr
1ec0: 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d  aySize(azModeNam
1ed0: 65 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  e) ) return 0;. 
1ee0: 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61   return azModeNa
1ef0: 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a  me[eMode];.}../*
1f00: 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72  .** Process a pr
1f10: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
1f20: 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20   .**.** Pragmas 
1f30: 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  are of this form
1f40: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41  :.**.**      PRA
1f50: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69  GMA [database.]i
1f60: 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a  d [= value].**.*
1f70: 2a 20 54 68 65 20 69 64 65 6e 74 69 66 69 65 72  * The identifier
1f80: 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61   might also be a
1f90: 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61   string.  The va
1fa0: 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
1fb0: 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69   and.** identifi
1fc0: 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e  er, or a number.
1fd0: 20 20 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69    If minusFlag i
1fe0: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
1ff0: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e   value is.** a n
2000: 75 6d 62 65 72 20 74 68 61 74 20 77 61 73 20 70  umber that was p
2010: 72 65 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e  receded by a min
2020: 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49  us sign..**.** I
2030: 66 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20  f the left side 
2040: 69 73 20 22 64 61 74 61 62 61 73 65 2e 69 64 22  is "database.id"
2050: 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68   then pId1 is th
2060: 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a  e database name.
2070: 2a 2a 20 61 6e 64 20 70 49 64 32 20 69 73 20 74  ** and pId2 is t
2080: 68 65 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c  he id.  If the l
2090: 65 66 74 20 73 69 64 65 20 69 73 20 6a 75 73 74  eft side is just
20a0: 20 22 69 64 22 20 74 68 65 6e 20 70 49 64 31 20   "id" then pId1 
20b0: 69 73 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64  is the.** id and
20c0: 20 70 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70   pId2 is any emp
20d0: 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f  ty string..*/.vo
20e0: 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
20f0: 28 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  (.  Parse *pPars
2100: 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64  e, .  Token *pId
2110: 31 2c 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72  1,        /* Fir
2120: 73 74 20 70 61 72 74 20 6f 66 20 5b 64 61 74 61  st part of [data
2130: 62 61 73 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a  base.]id field *
2140: 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c  /.  Token *pId2,
2150: 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e          /* Secon
2160: 64 20 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62  d part of [datab
2170: 61 73 65 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f  ase.]id field, o
2180: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65  r NULL */.  Toke
2190: 6e 20 2a 70 56 61 6c 75 65 2c 20 20 20 20 20 20  n *pValue,      
21a0: 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61  /* Token for <va
21b0: 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  lue>, or NULL */
21c0: 0a 20 20 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67  .  int minusFlag
21d0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
21e0: 66 20 61 20 27 2d 27 20 73 69 67 6e 20 70 72 65  f a '-' sign pre
21f0: 63 65 64 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f  ceded <value> */
2200: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66  .){.  char *zLef
2210: 74 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20  t = 0;       /* 
2220: 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55  Nul-terminated U
2230: 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 69 64 3e  TF-8 string <id>
2240: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 69 67   */.  char *zRig
2250: 68 74 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ht = 0;      /* 
2260: 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55  Nul-terminated U
2270: 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 76 61 6c  TF-8 string <val
2280: 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  ue>, or NULL */.
2290: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
22a0: 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54 68 65 20  b = 0;   /* The 
22b0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f  database name */
22c0: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20  .  Token *pId;  
22d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
22e0: 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b  nter to <id> tok
22f0: 65 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46  en */.  char *aF
2300: 63 6e 74 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f  cntl[4];       /
2310: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 53 51  * Argument to SQ
2320: 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d  LITE_FCNTL_PRAGM
2330: 41 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  A */.  int iDb; 
2340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2350: 20 44 61 74 61 62 61 73 65 20 69 6e 64 65 78 20   Database index 
2360: 66 6f 72 20 3c 64 61 74 61 62 61 73 65 3e 20 2a  for <database> *
2370: 2f 0a 20 20 69 6e 74 20 6c 77 72 2c 20 75 70 72  /.  int lwr, upr
2380: 2c 20 6d 69 64 20 3d 20 30 3b 20 20 20 20 20 20  , mid = 0;      
2390: 20 2f 2a 20 42 69 6e 61 72 79 20 73 65 61 72 63   /* Binary searc
23a0: 68 20 62 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e  h bounds */.  in
23b0: 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
23c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65             /* re
23d0: 74 75 72 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20  turn value form 
23e0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
23f0: 47 4d 41 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  GMA */.  sqlite3
2400: 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64   *db = pParse->d
2410: 62 3b 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  b;    /* The dat
2420: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2430: 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 20 20   */.  Db *pDb;  
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2450: 20 20 20 2f 2a 20 54 68 65 20 73 70 65 63 69 66     /* The specif
2460: 69 63 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  ic database bein
2470: 67 20 70 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20  g pragmaed */.  
2480: 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69 74 65  Vdbe *v = sqlite
2490: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
24a0: 3b 20 20 2f 2a 20 50 72 65 70 61 72 65 64 20 73  ;  /* Prepared s
24b0: 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f  tatement */.  co
24c0: 6e 73 74 20 73 74 72 75 63 74 20 73 50 72 61 67  nst struct sPrag
24d0: 6d 61 4e 61 6d 65 73 20 2a 70 50 72 61 67 6d 61  maNames *pPragma
24e0: 3b 0a 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20  ;..  if( v==0 ) 
24f0: 72 65 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65  return;.  sqlite
2500: 33 56 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65  3VdbeRunOnlyOnce
2510: 28 76 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e  (v);.  pParse->n
2520: 4d 65 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49  Mem = 2;..  /* I
2530: 6e 74 65 72 70 72 65 74 20 74 68 65 20 5b 64 61  nterpret the [da
2540: 74 61 62 61 73 65 2e 5d 20 70 61 72 74 20 6f 66  tabase.] part of
2550: 20 74 68 65 20 70 72 61 67 6d 61 20 73 74 61 74   the pragma stat
2560: 65 6d 65 6e 74 2e 20 69 44 62 20 69 73 20 74 68  ement. iDb is th
2570: 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20  e.  ** index of 
2580: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68 69  the database thi
2590: 73 20 70 72 61 67 6d 61 20 69 73 20 62 65 69 6e  s pragma is bein
25a0: 67 20 61 70 70 6c 69 65 64 20 74 6f 20 69 6e 20  g applied to in 
25b0: 64 62 2e 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69  db.aDb[]. */.  i
25c0: 44 62 20 3d 20 73 71 6c 69 74 65 33 54 77 6f 50  Db = sqlite3TwoP
25d0: 61 72 74 4e 61 6d 65 28 70 50 61 72 73 65 2c 20  artName(pParse, 
25e0: 70 49 64 31 2c 20 70 49 64 32 2c 20 26 70 49 64  pId1, pId2, &pId
25f0: 29 3b 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29  );.  if( iDb<0 )
2600: 20 72 65 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d   return;.  pDb =
2610: 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
2620: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 74 65 6d  .  /* If the tem
2630: 70 20 64 61 74 61 62 61 73 65 20 68 61 73 20 62  p database has b
2640: 65 65 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 6e  een explicitly n
2650: 61 6d 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  amed as part of 
2660: 74 68 65 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61  the .  ** pragma
2670: 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69  , make sure it i
2680: 73 20 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20  s open. .  */.  
2690: 69 66 28 20 69 44 62 3d 3d 31 20 26 26 20 73 71  if( iDb==1 && sq
26a0: 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
26b0: 61 62 61 73 65 28 70 50 61 72 73 65 29 20 29 7b  abase(pParse) ){
26c0: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
26d0: 0a 0a 20 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69  ..  zLeft = sqli
26e0: 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
26f0: 28 64 62 2c 20 70 49 64 29 3b 0a 20 20 69 66 28  (db, pId);.  if(
2700: 20 21 7a 4c 65 66 74 20 29 20 72 65 74 75 72 6e   !zLeft ) return
2710: 3b 0a 20 20 69 66 28 20 6d 69 6e 75 73 46 6c 61  ;.  if( minusFla
2720: 67 20 29 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  g ){.    zRight 
2730: 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
2740: 28 64 62 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c  (db, "-%T", pVal
2750: 75 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ue);.  }else{.  
2760: 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74    zRight = sqlit
2770: 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
2780: 64 62 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d  db, pValue);.  }
2790: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 49 64 32  ..  assert( pId2
27a0: 20 29 3b 0a 20 20 7a 44 62 20 3d 20 70 49 64 32   );.  zDb = pId2
27b0: 2d 3e 6e 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61  ->n>0 ? pDb->zNa
27c0: 6d 65 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71  me : 0;.  if( sq
27d0: 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 70  lite3AuthCheck(p
27e0: 50 61 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52  Parse, SQLITE_PR
27f0: 41 47 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69  AGMA, zLeft, zRi
2800: 67 68 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20  ght, zDb) ){.   
2810: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
2820: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64  ;.  }..  /* Send
2830: 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c   an SQLITE_FCNTL
2840: 5f 50 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e  _PRAGMA file-con
2850: 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65  trol to the unde
2860: 72 6c 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20  rlying VFS.  ** 
2870: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20  connection.  If 
2880: 69 74 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  it returns SQLIT
2890: 45 5f 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d  E_OK, then assum
28a0: 65 20 74 68 61 74 20 74 68 65 20 56 46 53 0a 20  e that the VFS. 
28b0: 20 2a 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20   ** handled the 
28c0: 70 72 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72  pragma and gener
28d0: 61 74 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70  ate a no-op prep
28e0: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
28f0: 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d    **.  ** IMPLEM
2900: 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 31  ENTATION-OF: R-1
2910: 32 32 33 38 2d 35 35 31 32 30 20 57 68 65 6e 65  2238-55120 Whene
2920: 76 65 72 20 61 20 50 52 41 47 4d 41 20 73 74 61  ver a PRAGMA sta
2930: 74 65 6d 65 6e 74 20 69 73 20 70 61 72 73 65 64  tement is parsed
2940: 2c 0a 20 20 2a 2a 20 61 6e 20 53 51 4c 49 54 45  ,.  ** an SQLITE
2950: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69  _FCNTL_PRAGMA fi
2960: 6c 65 20 63 6f 6e 74 72 6f 6c 20 69 73 20 73 65  le control is se
2970: 6e 74 20 74 6f 20 74 68 65 20 6f 70 65 6e 20 73  nt to the open s
2980: 71 6c 69 74 65 33 5f 66 69 6c 65 0a 20 20 2a 2a  qlite3_file.  **
2990: 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f   object correspo
29a0: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 64 61 74  nding to the dat
29b0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 77 68  abase file to wh
29c0: 69 63 68 20 74 68 65 20 70 72 61 67 6d 61 0a 20  ich the pragma. 
29d0: 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 72 65   ** statement re
29e0: 66 65 72 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  fers..  **.  ** 
29f0: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
2a00: 46 3a 20 52 2d 32 39 38 37 35 2d 33 31 36 37 38  F: R-29875-31678
2a10: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   The argument to
2a20: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54   the SQLITE_FCNT
2a30: 4c 5f 50 52 41 47 4d 41 0a 20 20 2a 2a 20 66 69  L_PRAGMA.  ** fi
2a40: 6c 65 20 63 6f 6e 74 72 6f 6c 20 69 73 20 61 6e  le control is an
2a50: 20 61 72 72 61 79 20 6f 66 20 70 6f 69 6e 74 65   array of pointe
2a60: 72 73 20 74 6f 20 73 74 72 69 6e 67 73 20 28 63  rs to strings (c
2a70: 68 61 72 2a 2a 29 20 69 6e 20 77 68 69 63 68 20  har**) in which 
2a80: 74 68 65 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20  the.  ** second 
2a90: 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
2aa0: 72 72 61 79 20 69 73 20 74 68 65 20 6e 61 6d 65  rray is the name
2ab0: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 61   of the pragma a
2ac0: 6e 64 20 74 68 65 20 74 68 69 72 64 0a 20 20 2a  nd the third.  *
2ad0: 2a 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  * element is the
2ae0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2af0: 20 70 72 61 67 6d 61 20 6f 72 20 4e 55 4c 4c 20   pragma or NULL 
2b00: 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 68 61  if the pragma ha
2b10: 73 20 6e 6f 0a 20 20 2a 2a 20 61 72 67 75 6d 65  s no.  ** argume
2b20: 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74  nt..  */.  aFcnt
2b30: 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e  l[0] = 0;.  aFcn
2b40: 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20  tl[1] = zLeft;. 
2b50: 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69   aFcntl[2] = zRi
2b60: 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d  ght;.  aFcntl[3]
2b70: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
2b80: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
2b90: 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
2ba0: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
2bb0: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
2bc0: 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f  CNTL_PRAGMA, (vo
2bd0: 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69  id*)aFcntl);.  i
2be0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2bf0: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e   ){.    if( aFcn
2c00: 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 69  tl[0] ){.      i
2c10: 6e 74 20 6e 4d 65 6d 20 3d 20 2b 2b 70 50 61 72  nt nMem = ++pPar
2c20: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20 20  se->nMem;.      
2c30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
2c40: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
2c50: 20 30 2c 20 6e 4d 65 6d 2c 20 30 2c 20 61 46 63   0, nMem, 0, aFc
2c60: 6e 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20  ntl[0], 0);.    
2c70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
2c80: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
2c90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2ca0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
2cb0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
2cc0: 72 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f  result", SQLITE_
2cd0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
2ce0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
2cf0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
2d00: 2c 20 6e 4d 65 6d 2c 20 31 29 3b 0a 20 20 20 20  , nMem, 1);.    
2d10: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
2d20: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
2d30: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
2d40: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _out;.  }.  if( 
2d50: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
2d60: 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61  UND ){.    if( a
2d70: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
2d80: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
2d90: 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20  g(pParse, "%s", 
2da0: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
2db0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
2dc0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
2dd0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72  .    pParse->nEr
2de0: 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  r++;.    pParse-
2df0: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f  >rc = rc;.    go
2e00: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2e10: 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20   }..  /* Locate 
2e20: 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68  the pragma in th
2e30: 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a  e lookup table *
2e40: 2f 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75  /.  lwr = 0;.  u
2e50: 70 72 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61  pr = ArraySize(a
2e60: 50 72 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a  PragmaNames)-1;.
2e70: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
2e80: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
2e90: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
2ea0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72  rc = sqlite3_str
2eb0: 69 63 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61  icmp(zLeft, aPra
2ec0: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e  gmaNames[mid].zN
2ed0: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ame);.    if( rc
2ee0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
2ef0: 20 69 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20   if( rc<0 ){.   
2f00: 20 20 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31     upr = mid - 1
2f10: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2f20: 20 20 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31     lwr = mid + 1
2f30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
2f40: 28 20 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f  ( lwr>upr ) goto
2f50: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 70   pragma_out;.  p
2f60: 50 72 61 67 6d 61 20 3d 20 26 61 50 72 61 67 6d  Pragma = &aPragm
2f70: 61 4e 61 6d 65 73 5b 6d 69 64 5d 3b 0a 0a 20 20  aNames[mid];..  
2f80: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
2f90: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
2fa0: 20 69 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68   is loaded if th
2fb0: 65 20 70 72 61 67 6d 61 20 72 65 71 75 69 72 65  e pragma require
2fc0: 73 20 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20  s that */.  if( 
2fd0: 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46  (pPragma->mPragF
2fe0: 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 4e  lag & PragFlag_N
2ff0: 65 65 64 53 63 68 65 6d 61 29 21 3d 30 20 29 7b  eedSchema)!=0 ){
3000: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
3010: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
3020: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
3030: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
3040: 4a 75 6d 70 20 74 6f 20 74 68 65 20 61 70 70 72  Jump to the appr
3050: 6f 70 72 69 61 74 65 20 70 72 61 67 6d 61 20 68  opriate pragma h
3060: 61 6e 64 6c 65 72 20 2a 2f 0a 20 20 73 77 69 74  andler */.  swit
3070: 63 68 28 20 70 50 72 61 67 6d 61 2d 3e 65 50 72  ch( pPragma->ePr
3080: 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69 66 20  agTyp ){.  .#if 
3090: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
30a0: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
30b0: 41 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  AS) && !defined(
30c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
30d0: 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20 2a  ECATED).  /*.  *
30e0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
30f0: 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63  ase.]default_cac
3100: 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  he_size.  **  PR
3110: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
3120: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
3130: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
3140: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
3150: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
3160: 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65 74  t persistent set
3170: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
3180: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
3190: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65  e.  The value re
31a0: 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61  turned is the ma
31b0: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a  ximum number of.
31c0: 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68    ** pages in th
31d0: 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20 54  e page cache.  T
31e0: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
31f0: 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75 72  ets both the cur
3200: 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20 63  rent.  ** page c
3210: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20  ache size value 
3220: 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74 65  and the persiste
3230: 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69  nt page cache si
3240: 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74  ze value.  ** st
3250: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
3260: 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a  base file..  **.
3270: 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69    ** Older versi
3280: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f  ons of SQLite wo
3290: 75 6c 64 20 73 65 74 20 74 68 65 20 64 65 66 61  uld set the defa
32a0: 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20 74  ult cache size t
32b0: 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69 76  o a.  ** negativ
32c0: 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64 69  e number to indi
32d0: 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73  cate synchronous
32e0: 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61 79  =OFF.  These day
32f0: 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20  s, synchronous. 
3300: 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f 6e   ** is always on
3310: 20 62 79 20 64 65 66 61 75 6c 74 20 72 65 67 61   by default rega
3320: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73 69  rdless of the si
3330: 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  gn of the defaul
3340: 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a  t cache.  ** siz
3350: 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75 65  e.  But continue
3360: 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62 73   to take the abs
3370: 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74  olute value of t
3380: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
3390: 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68 69  .  ** size of hi
33a0: 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69  storical compati
33b0: 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20 63  bility..  */.  c
33c0: 61 73 65 20 50 72 61 67 54 79 70 5f 44 45 46 41  ase PragTyp_DEFA
33d0: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  ULT_CACHE_SIZE: 
33e0: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
33f0: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
3400: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
3410: 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63  2);.    static c
3420: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
3430: 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d  getCacheSize[] =
3440: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54 72   {.      { OP_Tr
3450: 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c  ansaction, 0, 0,
3460: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20          0},     
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
3490: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
34a0: 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20  e,  0, 1,       
34b0: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
34c0: 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20  ACHE_SIZE},  /* 
34d0: 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  1 */.      { OP_
34e0: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
34f0: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
3500: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
3510: 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20 20  ,     0, 2,     
3520: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
3530: 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20 31  P_Subtract,    1
3540: 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a  , 2,        1},.
3550: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73        { OP_IfPos
3560: 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20  ,       1, 8,   
3570: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
3580: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
3590: 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   0, 1,        0}
35a0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
35b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20 2a            /* 6 *
35c0: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f  /.      { OP_Noo
35d0: 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20  p,        0, 0, 
35e0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
35f0: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
3600: 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20     1, 1,        
3610: 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69  0},.    };.    i
3620: 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73 71 6c  nt addr;.    sql
3630: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
3640: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
3650: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
3660: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
3670: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
3680: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3690: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
36a0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
36b0: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53   "cache_size", S
36c0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
36d0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
36e0: 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64  m += 2;.      ad
36f0: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
3700: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
3710: 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53  aySize(getCacheS
3720: 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69  ize), getCacheSi
3730: 7a 65 2c 69 4c 6e 29 3b 0a 20 20 20 20 20 20 73  ze,iLn);.      s
3740: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
3750: 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
3760: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3770: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
3780: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
3790: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
37a0: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 36  angeP1(v, addr+6
37b0: 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  , SQLITE_DEFAULT
37c0: 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a 20 20  _CACHE_SIZE);.  
37d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
37e0: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
37f0: 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65  3AbsInt32(sqlite
3800: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
3810: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67        sqlite3Beg
3820: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
3830: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29  (pParse, 0, iDb)
3840: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3850: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
3860: 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 31  Integer, size, 1
3870: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3880: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
3890: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c  _SetCookie, iDb,
38a0: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
38b0: 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b 0a 20  ACHE_SIZE, 1);. 
38c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
38d0: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
38e0: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
38f0: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53  );.      pDb->pS
3900: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
3910: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
3920: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
3930: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
3940: 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t, pDb->pSchema-
3950: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
3960: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
3970: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51   }.#endif /* !SQ
3980: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
3990: 50 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c 49  PRAGMAS && !SQLI
39a0: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
39b0: 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  ED */..#if !defi
39c0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
39d0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
39e0: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
39f0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65   [database.]page
3a00: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
3a10: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61  MA [database.]pa
3a20: 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  ge_size=N.  **. 
3a30: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
3a40: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
3a50: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66  urrent setting f
3a60: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  or the.  ** data
3a70: 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 69  base page size i
3a80: 6e 20 62 79 74 65 73 2e 20 20 54 68 65 20 73 65  n bytes.  The se
3a90: 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74  cond form sets t
3aa0: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
3ab0: 20 70 61 67 65 20 73 69 7a 65 20 76 61 6c 75 65   page size value
3ac0: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e  .  The value can
3ad0: 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 0a   only be set if.
3ae0: 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
3af0: 65 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62 65  e has not yet be
3b00: 65 6e 20 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f  en created..  */
3b10: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
3b20: 50 41 47 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20  PAGE_SIZE: {.   
3b30: 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44   Btree *pBt = pD
3b40: 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65  b->pBt;.    asse
3b50: 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20  rt( pBt!=0 );.  
3b60: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
3b70: 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20  .      int size 
3b80: 3d 20 41 4c 57 41 59 53 28 70 42 74 29 20 3f 20  = ALWAYS(pBt) ? 
3b90: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 50  sqlite3BtreeGetP
3ba0: 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a 20 30  ageSize(pBt) : 0
3bb0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  ;.      returnSi
3bc0: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
3bd0: 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73 69 7a  "page_size", siz
3be0: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
3bf0: 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d       /* Malloc m
3c00: 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73 65 74  ay fail when set
3c10: 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d 73 69  ting the page-si
3c20: 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69 73 20  ze, as there is 
3c30: 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20 20 20  an internal.    
3c40: 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74    ** buffer that
3c50: 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64 75 6c   the pager modul
3c60: 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e 67 20  e resizes using 
3c70: 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28  sqlite3_realloc(
3c80: 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
3c90: 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69    db->nextPagesi
3ca0: 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69  ze = sqlite3Atoi
3cb0: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
3cc0: 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  if( SQLITE_NOMEM
3cd0: 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  ==sqlite3BtreeSe
3ce0: 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c 20 64  tPageSize(pBt, d
3cf0: 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 2c  b->nextPagesize,
3d00: 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20 20 20  -1,0) ){.       
3d10: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
3d20: 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  d = 1;.      }. 
3d30: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
3d40: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
3d50: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
3d60: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  .]secure_delete.
3d70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
3d80: 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64  tabase.]secure_d
3d90: 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a  elete=ON/OFF.  *
3da0: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
3db0: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
3dc0: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
3dd0: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  g for the.  ** s
3de0: 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61  ecure_delete fla
3df0: 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  g.  The second f
3e00: 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20  orm changes the 
3e10: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20  secure_delete.  
3e20: 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20  ** flag setting 
3e30: 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e  and reports then
3e40: 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20  ew value..  */. 
3e50: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45   case PragTyp_SE
3e60: 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20  CURE_DELETE: {. 
3e70: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
3e80: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e  pDb->pBt;.    in
3e90: 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73  t b = -1;.    as
3ea0: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
3eb0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
3ec0: 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69  {.      b = sqli
3ed0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
3ee0: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  ight, 0);.    }.
3ef0: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
3f00: 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20  =0 && b>=0 ){.  
3f10: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
3f20: 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
3f30: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
3f40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
3f50: 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28  reeSecureDelete(
3f60: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
3f70: 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   b);.      }.   
3f80: 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74   }.    b = sqlit
3f90: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
3fa0: 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20  ete(pBt, b);.   
3fb0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
3fc0: 28 70 50 61 72 73 65 2c 20 22 73 65 63 75 72 65  (pParse, "secure
3fd0: 5f 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20  _delete", b);.  
3fe0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
3ff0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
4000: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
4010: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20  age_count.  **  
4020: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
4030: 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74  .]max_page_count
4040: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
4050: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
4060: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
4070: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
4080: 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d    ** maximum num
4090: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
40a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
40b0: 65 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65  e.  The .  ** se
40c0: 63 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70  cond form attemp
40d0: 74 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69  ts to change thi
40e0: 73 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68  s setting.  Both
40f0: 0a 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75  .  ** forms retu
4100: 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  rn the current s
4110: 65 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  etting..  **.  *
4120: 2a 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76  * The absolute v
4130: 61 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65  alue of N is use
4140: 64 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f  d.  This is undo
4150: 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67  cumented and mig
4160: 68 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20  ht.  ** change. 
4170: 20 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73   The only purpos
4180: 65 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20  e is to provide 
4190: 61 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74  an easy way to t
41a0: 65 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c  est.  ** the sql
41b0: 69 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66  ite3AbsInt32() f
41c0: 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20  unction..  **.  
41d0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
41e0: 62 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75 6e 74  base.]page_count
41f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
4200: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
4210: 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 70 65  pages in the spe
4220: 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 2e  cified database.
4230: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
4240: 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e 54 3a  gTyp_PAGE_COUNT:
4250: 20 7b 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b   {.    int iReg;
4260: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65  .    sqlite3Code
4270: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
4280: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  rse, iDb);.    i
4290: 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Reg = ++pParse->
42a0: 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20 73 71  nMem;.    if( sq
42b0: 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65  lite3Tolower(zLe
42c0: 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b 0a 20  ft[0])=='p' ){. 
42d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
42e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50 61 67  AddOp2(v, OP_Pag
42f0: 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69 52 65  ecount, iDb, iRe
4300: 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  g);.    }else{. 
4310: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4320: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 78  AddOp3(v, OP_Max
4330: 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52 65 67  Pgcnt, iDb, iReg
4340: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
4350: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
4360: 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74  e3AbsInt32(sqlit
4370: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 29  e3Atoi(zRight)))
4380: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
4390: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
43a0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 69   OP_ResultRow, i
43b0: 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Reg, 1);.    sql
43c0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
43d0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71  ls(v, 1);.    sq
43e0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
43f0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
4400: 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53  E_NAME, zLeft, S
4410: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
4420: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
4430: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
4440: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
4450: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a  ocking_mode.  **
4460: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
4470: 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  se.]locking_mode
4480: 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75   = (normal|exclu
4490: 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73  sive).  */.  cas
44a0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  e PragTyp_LOCKIN
44b0: 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f  G_MODE: {.    co
44c0: 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d  nst char *zRet =
44d0: 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69   "normal";.    i
44e0: 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f  nt eMode = getLo
44f0: 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74  ckingMode(zRight
4500: 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32  );..    if( pId2
4510: 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d  ->n==0 && eMode=
4520: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
4530: 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20  DE_QUERY ){.    
4540: 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41    /* Simple "PRA
4550: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
4560: 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  ;" statement. Th
4570: 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f  is is a query fo
4580: 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  r.      ** the c
4590: 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c  urrent default l
45a0: 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69  ocking mode (whi
45b0: 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ch may be differ
45c0: 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  ent to.      ** 
45d0: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
45e0: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
45f0: 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f  abase)..      */
4600: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64  .      eMode = d
4610: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  b->dfltLockMode;
4620: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4630: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
4640: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d  .      if( pId2-
4650: 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  >n==0 ){.       
4660: 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74   /* This indicat
4670: 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62  es that no datab
4680: 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65  ase name was spe
4690: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20  cified as part. 
46a0: 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
46b0: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e   PRAGMA command.
46c0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
46d0: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d  e locking-mode m
46e0: 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a  ust be.        *
46f0: 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74  * set on all att
4700: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c  ached databases,
4710: 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20   as well as the 
4720: 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20  main db file..  
4730: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20        **.       
4740: 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71   ** Also, the sq
4750: 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f  lite3.dfltLockMo
4760: 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  de variable is s
4770: 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20  et so that.     
4780: 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71     ** any subseq
4790: 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20  uently attached 
47a0: 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75  databases also u
47b0: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  se the specified
47c0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b  .        ** lock
47d0: 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20  ing mode..      
47e0: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74    */.        int
47f0: 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73   ii;.        ass
4800: 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44  ert(pDb==&db->aD
4810: 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66  b[0]);.        f
4820: 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e  or(ii=2; ii<db->
4830: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
4840: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
4850: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
4860: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
4870: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
4880: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
4890: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
48a0: 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  de);.        }. 
48b0: 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c         db->dfltL
48c0: 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d  ockMode = (u8)eM
48d0: 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ode;.      }.   
48e0: 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69     pPager = sqli
48f0: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
4900: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65  b->pBt);.      e
4910: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61  Mode = sqlite3Pa
4920: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
4930: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
4940: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
4950: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
4960: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41  OCKINGMODE_NORMA
4970: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  L.            ||
4980: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4990: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
49a0: 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65  IVE );.    if( e
49b0: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
49c0: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
49d0: 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20  E ){.      zRet 
49e0: 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20  = "exclusive";. 
49f0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
4a00: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
4a10: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
4a20: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
4a30: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
4a40: 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ME, "locking_mod
4a50: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
4a60: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
4a70: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
4a80: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
4a90: 2c 20 7a 52 65 74 2c 20 30 29 3b 0a 20 20 20 20  , zRet, 0);.    
4aa0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4ab0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
4ac0: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72  w, 1, 1);.    br
4ad0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
4ae0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
4af0: 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d  abase.]journal_m
4b00: 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ode.  **  PRAGMA
4b10: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72   [database.]jour
4b20: 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20  nal_mode =.  ** 
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b40: 20 20 20 20 20 28 64 65 6c 65 74 65 7c 70 65 72       (delete|per
4b50: 73 69 73 74 7c 6f 66 66 7c 74 72 75 6e 63 61 74  sist|off|truncat
4b60: 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66  e|memory|wal|off
4b70: 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ).  */.  case Pr
4b80: 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f  agTyp_JOURNAL_MO
4b90: 44 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 65 4d  DE: {.    int eM
4ba0: 6f 64 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  ode;        /* O
4bb0: 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f  ne of the PAGER_
4bc0: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
4bd0: 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20 20 69  symbols */.    i
4be0: 6e 74 20 69 69 3b 20 20 20 20 20 20 20 20 20 20  nt ii;          
4bf0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
4c00: 20 2a 2f 0a 0a 20 20 20 20 73 71 6c 69 74 65 33   */..    sqlite3
4c10: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
4c20: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
4c30: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
4c40: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
4c50: 4d 45 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ME, "journal_mod
4c60: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
4c70: 43 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a 52 69  C);..    if( zRi
4c80: 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ght==0 ){.      
4c90: 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
4ca0: 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f  o "=MODE" part o
4cb0: 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f  f the pragma, do
4cc0: 20 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65   a query for the
4cd0: 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  .      ** curren
4ce0: 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20  t mode */.      
4cf0: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
4d00: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
4d10: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4d20: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
4d30: 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ode;.      int n
4d40: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
4d50: 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  30(zRight);.    
4d60: 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28    for(eMode=0; (
4d70: 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a  zMode = sqlite3J
4d80: 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
4d90: 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65  Mode))!=0; eMode
4da0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
4db0: 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
4dc0: 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20  (zRight, zMode, 
4dd0: 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  n)==0 ) break;. 
4de0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
4df0: 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20   !zMode ){.     
4e00: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d     /* If the "=M
4e10: 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e  ODE" part does n
4e20: 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f  ot match any kno
4e30: 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c  wn journal mode,
4e40: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
4e50: 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20   do a query */. 
4e60: 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50         eMode = P
4e70: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
4e80: 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a  _QUERY;.      }.
4e90: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d      }.    if( eM
4ea0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  ode==PAGER_JOURN
4eb0: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20  ALMODE_QUERY && 
4ec0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20  pId2->n==0 ){.  
4ed0: 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22      /* Convert "
4ee0: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
4ef0: 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d  ode" into "PRAGM
4f00: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
4f10: 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44  ode" */.      iD
4f20: 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64  b = 0;.      pId
4f30: 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  2->n = 1;.    }.
4f40: 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e      for(ii=db->n
4f50: 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d  Db-1; ii>=0; ii-
4f60: 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  -){.      if( db
4f70: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26  ->aDb[ii].pBt &&
4f80: 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64   (ii==iDb || pId
4f90: 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20  2->n==0) ){.    
4fa0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
4fb0: 73 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b  sesBtree(v, ii);
4fc0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4fd0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
4fe0: 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69  _JournalMode, ii
4ff0: 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  , 1, eMode);.   
5000: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
5010: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
5020: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
5030: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65  , 1, 1);.    bre
5040: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
5050: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
5060: 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69  base.]journal_si
5070: 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50  ze_limit.  **  P
5080: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
5090: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
50a0: 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  mit=N.  **.  ** 
50b0: 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 73  Get or set the s
50c0: 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c  ize limit on rol
50d0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
50e0: 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  les..  */.  case
50f0: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
5100: 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _SIZE_LIMIT: {. 
5110: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
5120: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
5130: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
5140: 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d      i64 iLimit =
5150: 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69   -2;.    if( zRi
5160: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
5170: 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
5180: 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69  4(zRight, &iLimi
5190: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c  t);.      if( iL
51a0: 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74  imit<-1 ) iLimit
51b0: 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20   = -1;.    }.   
51c0: 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65   iLimit = sqlite
51d0: 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a  3PagerJournalSiz
51e0: 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69  eLimit(pPager, i
51f0: 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75  Limit);.    retu
5200: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
5210: 73 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a  se, "journal_siz
5220: 65 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d 69 74  e_limit", iLimit
5230: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
5240: 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
5250: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
5260: 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a  RAGMAS */..  /*.
5270: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
5280: 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63  tabase.]auto_vac
5290: 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  uum.  **  PRAGMA
52a0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f   [database.]auto
52b0: 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20  _vacuum=N.  **. 
52c0: 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74   ** Get or set t
52d0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
52e0: 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d 76  database 'auto-v
52f0: 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65 72  acuum' parameter
5300: 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75 65  ..  ** The value
5310: 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20 4e   is one of:  0 N
5320: 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e 43  ONE 1 FULL 2 INC
5330: 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69  REMENTAL.  */.#i
5340: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
5350: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63  T_AUTOVACUUM.  c
5360: 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54 4f  ase PragTyp_AUTO
5370: 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 42  _VACUUM: {.    B
5380: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
5390: 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  >pBt;.    assert
53a0: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
53b0: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
53c0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
53d0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 61 75  eInt(pParse, "au
53e0: 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69  to_vacuum", sqli
53f0: 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56  te3BtreeGetAutoV
5400: 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20  acuum(pBt));.   
5410: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
5420: 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74  t eAuto = getAut
5430: 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b  oVacuum(zRight);
5440: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
5450: 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f  Auto>=0 && eAuto
5460: 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  <=2 );.      db-
5470: 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28  >nextAutovac = (
5480: 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20  u8)eAuto;.      
5490: 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56  /* Call SetAutoV
54a0: 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69  acuum() to set i
54b0: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e  nitialize the in
54c0: 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a  ternal auto and.
54d0: 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61        ** incr-va
54e0: 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73  cuum flags. This
54f0: 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
5500: 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63  case this connec
5510: 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72  tion.      ** cr
5520: 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61  eates the databa
5530: 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69  se file. It is i
5540: 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74  mportant that it
5550: 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20   is created.    
5560: 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d    ** as an auto-
5570: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
5580: 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  b..      */.    
5590: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
55a0: 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d  reeSetAutoVacuum
55b0: 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20  (pBt, eAuto);.  
55c0: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
55d0: 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d  TE_OK && (eAuto=
55e0: 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20  =1 || eAuto==2) 
55f0: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ){.        /* Wh
5600: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61  en setting the a
5610: 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto_vacuum mode 
5620: 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22  to either "full"
5630: 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   or .        ** 
5640: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77  "incremental", w
5650: 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f  rite the value o
5660: 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65  f meta[6] in the
5670: 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
5680: 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72    ** file. Befor
5690: 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74  e writing to met
56a0: 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74  a[6], check that
56b0: 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74   meta[3] indicat
56c0: 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  es.        ** th
56d0: 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69  at this really i
56e0: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
56f0: 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73   capable databas
5700: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
5710: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
5720: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
5730: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
5740: 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74  2);.        stat
5750: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
5760: 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d  ist setMeta6[] =
5770: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f   {.          { O
5780: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
5790: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57b0: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
57c0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
57d0: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c  adCookie,     0,
57e0: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
57f0: 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53      BTREE_LARGES
5800: 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20  T_ROOT_PAGE},.  
5810: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
5830: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
5840: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5850: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
5860: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
5870: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
5880: 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20  OK, OE_Abort,   
5890: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
58a0: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
58b0: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
58c0: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
58d0: 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1,              
58e0: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a     0},    /* 4 *
58f0: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
5900: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20  _SetCookie,     
5910: 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   0,         BTRE
5920: 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31  E_INCR_VACUUM, 1
5930: 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20  },    /* 5 */.  
5940: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20        };.       
5950: 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20 20 20   int iAddr;.    
5960: 20 20 20 20 69 41 64 64 72 20 3d 20 73 71 6c 69      iAddr = sqli
5970: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
5980: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
5990: 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74 61  tMeta6), setMeta
59a0: 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 20  6, iLn);.       
59b0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
59c0: 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69  geP1(v, iAddr, i
59d0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
59e0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
59f0: 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62  (v, iAddr+1, iDb
5a00: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5a10: 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
5a20: 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72  , iAddr+2, iAddr
5a30: 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +4);.        sql
5a40: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
5a50: 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75  (v, iAddr+4, eAu
5a60: 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73  to-1);.        s
5a70: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5a80: 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69  P1(v, iAddr+5, i
5a90: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
5aa0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
5ab0: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  e(v, iDb);.     
5ac0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
5ad0: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
5ae0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
5af0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e 63  A [database.]inc
5b00: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28  remental_vacuum(
5b10: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20  N).  **.  ** Do 
5b20: 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65  N steps of incre
5b30: 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67  mental vacuuming
5b40: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a   on a database..
5b50: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
5b60: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
5b70: 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54  UUM.  case PragT
5b80: 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56  yp_INCREMENTAL_V
5b90: 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74  ACUUM: {.    int
5ba0: 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20   iLimit, addr;. 
5bb0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
5bc0: 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49   || !sqlite3GetI
5bd0: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c  nt32(zRight, &iL
5be0: 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c  imit) || iLimit<
5bf0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d  =0 ){.      iLim
5c00: 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b  it = 0x7fffffff;
5c10: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
5c20: 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
5c30: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
5c40: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
5c50: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5c60: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d  OP_Integer, iLim
5c70: 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72  it, 1);.    addr
5c80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
5c90: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56  dOp1(v, OP_IncrV
5ca0: 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62  acuum, iDb); Vdb
5cb0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
5cc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5cd0: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op1(v, OP_Result
5ce0: 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Row, 1);.    sql
5cf0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
5d00: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
5d10: 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  -1);.    sqlite3
5d20: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5d30: 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29  _IfPos, 1, addr)
5d40: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
5d50: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5d60: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
5d70: 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  dr);.    break;.
5d80: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
5d90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
5da0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20  PAGER_PRAGMAS.  
5db0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
5dc0: 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65  [database.]cache
5dd0: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
5de0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61  MA [database.]ca
5df0: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
5e00: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
5e10: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
5e20: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
5e30: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
5e40: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
5e50: 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66  ze. The second f
5e60: 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63  orm sets the loc
5e70: 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  al.  ** page cac
5e80: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  he size value.  
5e90: 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  If N is positive
5ea0: 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68   then that is th
5eb0: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
5ec0: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61   pages in the ca
5ed0: 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  che.  If N is ne
5ee0: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
5ef0: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
5f00: 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65  pages is adjuste
5f10: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61  d so that the ca
5f20: 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69  che uses -N kibi
5f30: 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65  bytes.  ** of me
5f40: 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  mory..  */.  cas
5f50: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
5f60: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65  SIZE: {.    asse
5f70: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
5f80: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
5f90: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
5fa0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
5fb0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
5fc0: 6e 74 28 70 50 61 72 73 65 2c 20 22 63 61 63 68  nt(pParse, "cach
5fd0: 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d 3e 70 53  e_size", pDb->pS
5fe0: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
5ff0: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
6000: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
6010: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
6020: 68 74 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e  ht);.      pDb->
6030: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
6040: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
6050: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
6060: 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e  tCacheSize(pDb->
6070: 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  pBt, pDb->pSchem
6080: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
6090: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
60a0: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
60b0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
60c0: 65 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29 0a  e.]mmap_size(N).
60d0: 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20 74    **.  ** Used t
60e0: 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73 69  o set mapping si
60f0: 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d 61  ze limit. The ma
6100: 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74  pping size limit
6110: 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74 6f   is.  ** used to
6120: 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72 65   limit the aggre
6130: 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c 6c  gate size of all
6140: 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20 72   memory mapped r
6150: 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20 20  egions of the.  
6160: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
6170: 2e 20 49 66 20 74 68 69 73 20 70 61 72 61 6d 65  . If this parame
6180: 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a 65  ter is set to ze
6190: 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20  ro, then memory 
61a0: 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73 20  mapping.  ** is 
61b0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 2e  not used at all.
61c0: 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69    If N is negati
61d0: 76 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66  ve, then the def
61e0: 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70 0a  ault memory map.
61f0: 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65 72    ** limit deter
6200: 6d 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  mined by sqlite3
6210: 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
6220: 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 29  ONFIG_MMAP_SIZE)
6230: 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54 68   is set..  ** Th
6240: 65 20 70 61 72 61 6d 65 74 65 72 20 4e 20 69 73  e parameter N is
6250: 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79 74   measured in byt
6260: 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  es..  **.  ** Th
6270: 69 73 20 76 61 6c 75 65 20 69 73 20 61 64 76 69  is value is advi
6280: 73 6f 72 79 2e 20 20 54 68 65 20 75 6e 64 65 72  sory.  The under
6290: 6c 79 69 6e 67 20 56 46 53 20 69 73 20 66 72 65  lying VFS is fre
62a0: 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70 0a  e to memory map.
62b0: 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20 6f    ** as little o
62c0: 72 20 61 73 20 6d 75 63 68 20 61 73 20 69 74 20  r as much as it 
62d0: 77 61 6e 74 73 2e 20 20 45 78 63 65 70 74 2c 20  wants.  Except, 
62e0: 69 66 20 4e 20 69 73 20 73 65 74 20 74 6f 20 30  if N is set to 0
62f0: 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 75   then the.  ** u
6300: 70 70 65 72 20 6c 61 79 65 72 73 20 77 69 6c 6c  pper layers will
6310: 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 74 68   never invoke th
6320: 65 20 78 46 65 74 63 68 20 69 6e 74 65 72 66 61  e xFetch interfa
6330: 63 65 73 20 74 6f 20 74 68 65 20 56 46 53 2e 0a  ces to the VFS..
6340: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
6350: 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b  Typ_MMAP_SIZE: {
6360: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  .    sqlite3_int
6370: 36 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49 54  64 sz;.#if SQLIT
6380: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e  E_MAX_MMAP_SIZE>
6390: 30 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  0.    assert( sq
63a0: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
63b0: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
63c0: 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   );.    if( zRig
63d0: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  ht ){.      int 
63e0: 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ii;.      sqlite
63f0: 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
6400: 52 69 67 68 74 2c 20 26 73 7a 29 3b 0a 20 20 20  Right, &sz);.   
6410: 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a     if( sz<0 ) sz
6420: 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c   = sqlite3Global
6430: 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20  Config.szMmap;. 
6440: 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e       if( pId2->n
6450: 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70  ==0 ) db->szMmap
6460: 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72   = sz;.      for
6470: 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69  (ii=db->nDb-1; i
6480: 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20  i>=0; ii--){.   
6490: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
64a0: 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d  [ii].pBt && (ii=
64b0: 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d  =iDb || pId2->n=
64c0: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  =0) ){.         
64d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
64e0: 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44  MmapLimit(db->aD
64f0: 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a  b[ii].pBt, sz);.
6500: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6510: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d  }.    }.    sz =
6520: 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   -1;.    rc = sq
6530: 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
6540: 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49  ol(db, zDb, SQLI
6550: 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49  TE_FCNTL_MMAP_SI
6560: 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a  ZE, &sz);.#else.
6570: 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20      sz = 0;.    
6580: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
6590: 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 72  #endif.    if( r
65a0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
65b0: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
65c0: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6d  leInt(pParse, "m
65d0: 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a  map_size", sz);.
65e0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
65f0: 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  !=SQLITE_NOTFOUN
6600: 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73  D ){.      pPars
6610: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20  e->nErr++;.     
6620: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
6630: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
6640: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
6650: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
6660: 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41  store.  **   PRA
6670: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
6680: 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f   "default"|"memo
6690: 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a  ry"|"file".  **.
66a0: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
66b0: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
66c0: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
66d0: 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  tore flag.  Chan
66e0: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
66f0: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
6700: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
6710: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
6720: 20 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74   and the default
6730: 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c  .  ** value will
6740: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
6750: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
6760: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
6770: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74  d..  **.  ** Not
6780: 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73  e that it is pos
6790: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69  sible for the li
67a0: 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69  brary compile-ti
67b0: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20  me options to.  
67c0: 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ** override this
67d0: 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20   setting.  */.  
67e0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
67f0: 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69  P_STORE: {.    i
6800: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
6810: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
6820: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d  Int(pParse, "tem
6830: 70 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65  p_store", db->te
6840: 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d  mp_store);.    }
6850: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e  else{.      chan
6860: 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50  geTempStorage(pP
6870: 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20  arse, zRight);. 
6880: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
6890: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
68a0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
68b0: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
68c0: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
68d0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
68e0: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
68f0: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
6900: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
6910: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
6920: 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f   the temp_store_
6930: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
6940: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
6950: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
6960: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
6970: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
6980: 72 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  r temporary file
6990: 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20  s..  ** Setting 
69a0: 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67  to a null string
69b0: 20 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20   reverts to the 
69c0: 64 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72  default temporar
69d0: 79 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72  y directory sear
69e0: 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70  ch..  ** If temp
69f0: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
6a00: 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e  is changed, then
6a10: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
6a20: 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a  torage..  **.  *
6a30: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
6a40: 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45  _TEMP_STORE_DIRE
6a50: 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28  CTORY: {.    if(
6a60: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
6a70: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 65    if( sqlite3_te
6a80: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a  mp_directory ){.
6a90: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
6aa0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
6ab0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
6ac0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
6ad0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
6ae0: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
6af0: 20 20 20 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f      "temp_store_
6b00: 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49  directory", SQLI
6b10: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
6b20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6b30: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
6b40: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71  ng8, 0, 1, 0, sq
6b50: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
6b60: 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  tory, 0);.      
6b70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
6b80: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
6b90: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
6ba0: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23    }.    }else{.#
6bb0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6bc0: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
6bd0: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
6be0: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
6bf0: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
6c00: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
6c10: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
6c20: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
6c30: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
6c40: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
6c50: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
6c60: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
6c70: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
6c80: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
6c90: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
6ca0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
6cb0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
6cc0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
6cd0: 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54  .      if( SQLIT
6ce0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a  E_TEMP_STORE==0.
6cf0: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
6d00: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20  E_TEMP_STORE==1 
6d10: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
6d20: 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20  e<=1).       || 
6d30: 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  (SQLITE_TEMP_STO
6d40: 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d  RE==2 && db->tem
6d50: 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20  p_store==1).    
6d60: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76    ){.        inv
6d70: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
6d80: 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ge(pParse);.    
6d90: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
6da0: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74  3_free(sqlite3_t
6db0: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
6dc0: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
6dd0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
6de0: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
6df0: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
6e00: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
6e10: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
6e20: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
6e30: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
6e40: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
6e50: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
6e60: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
6e70: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
6e80: 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  }..#if SQLITE_OS
6e90: 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WIN.  /*.  **  
6ea0: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
6eb0: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
6ec0: 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f  *   PRAGMA data_
6ed0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
6ee0: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
6ef0: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
6f00: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
6f10: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
6f20: 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f   the data_store_
6f30: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
6f40: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
6f50: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
6f60: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
6f70: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
6f80: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
6f90: 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20   that.  ** were 
6fa0: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
6fb0: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61   relative pathna
6fc0: 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20  me.  Setting to 
6fd0: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
6fe0: 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68  verts.  ** to th
6ff0: 65 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61  e default databa
7000: 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  se directory, wh
7010: 69 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65  ich for database
7020: 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64   files specified
7030: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c   with.  ** a rel
7040: 61 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20  ative path will 
7050: 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65  probably be base
7060: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
7070: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
7080: 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e  he.  ** process.
7090: 20 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20    Database file 
70a0: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
70b0: 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20  n absolute path 
70c0: 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64  are not impacted
70d0: 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65  .  ** by this se
70e0: 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73  tting, regardles
70f0: 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a  s of its value..
7100: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
7110: 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54   PragTyp_DATA_ST
7120: 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b  ORE_DIRECTORY: {
7130: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
7140: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
7150: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7160: 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20  tory ){.        
7170: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
7180: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
7190: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
71a0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
71b0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a   COLNAME_NAME, .
71c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 64 61 74              "dat
71d0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
71e0: 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  y", SQLITE_STATI
71f0: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
7200: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
7210: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
7220: 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 64 61  1, 0, sqlite3_da
7230: 74 61 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29  ta_directory, 0)
7240: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
7250: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
7260: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
7270: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
7280: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
7290: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
72a0: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
72b0: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
72c0: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
72d0: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
72e0: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
72f0: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
7300: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
7310: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
7320: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
7330: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
7340: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
7350: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
7360: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
7370: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
7380: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
7390: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
73a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
73b0: 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69  qlite3_free(sqli
73c0: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
73d0: 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ry);.      if( z
73e0: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
73f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
7400: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c  _directory = sql
7410: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
7420: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
7430: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
7440: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
7450: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
7460: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
7470: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a  QLITE_OMIT_WSD *
7480: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  /.    }.    brea
7490: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
74a0: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
74b0: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
74c0: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
74d0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
74e0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a  k_proxy_file.  *
74f0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
7500: 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  base.]lock_proxy
7510: 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22  _file = ":auto:"
7520: 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68  |"lock_file_path
7530: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
7540: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  rn or set the va
7550: 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f  lue of the lock_
7560: 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e  proxy_file flag.
7570: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
7580: 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61  the value sets a
7590: 20 73 70 65 63 69 66 69 63 20 66 69 6c 65 20 74   specific file t
75a0: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
75b0: 74 61 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f  tabase access lo
75c0: 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  cks..  **.  */. 
75d0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
75e0: 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b  CK_PROXY_FILE: {
75f0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
7600: 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20   ){.      Pager 
7610: 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
7620: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
7630: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61  >pBt);.      cha
7640: 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61  r *proxy_file_pa
7650: 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  th = NULL;.     
7660: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70   sqlite3_file *p
7670: 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61  File = sqlite3Pa
7680: 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b  gerFile(pPager);
7690: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73  .      sqlite3Os
76a0: 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28  FileControlHint(
76b0: 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45  pFile, SQLITE_GE
76c0: 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c  T_LOCKPROXYFILE,
76d0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70 72               &pr
76f0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a  oxy_file_path);.
7700: 20 20 20 20 20 20 0a 20 20 20 20 20 20 69 66 28        .      if(
7710: 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68   proxy_file_path
7720: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
7730: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
7740: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  s(v, 1);.       
7750: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7760: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
7770: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20  NAME_NAME, .    
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7790: 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 6b 5f            "lock_
77a0: 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 53 51 4c  proxy_file", SQL
77b0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
77c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
77d0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
77e0: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70  ing8, 0, 1, 0, p
77f0: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 2c 20  roxy_file_path, 
7800: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
7810: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
7820: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
7830: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
7840: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50    }else{.      P
7850: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
7860: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
7870: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
7880: 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a    sqlite3_file *
7890: 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  pFile = sqlite3P
78a0: 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29  agerFile(pPager)
78b0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b  ;.      int res;
78c0: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
78d0: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
78e0: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
78f0: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
7900: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
7910: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7940: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
7950: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
7960: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
7970: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
7980: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
7990: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79c0: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  NULL);.      }. 
79d0: 20 20 20 20 20 69 66 28 20 72 65 73 21 3d 53 51       if( res!=SQ
79e0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
79f0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
7a00: 73 67 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c  sg(pParse, "fail
7a10: 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70  ed to set lock p
7a20: 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20  roxy file");.   
7a30: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
7a40: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
7a50: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
7a60: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
7a70: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
7a80: 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20  NG_STYLE */     
7a90: 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a   .    .  /*.  **
7aa0: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
7ab0: 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ase.]synchronous
7ac0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
7ad0: 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72  database.]synchr
7ae0: 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52  onous=OFF|ON|NOR
7af0: 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20  MAL|FULL.  **.  
7b00: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
7b10: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
7b20: 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e   of the synchron
7b30: 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ous flag.  Chang
7b40: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
7b50: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
7b60: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
7b70: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
7b80: 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  and the.  ** def
7b90: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will 
7ba0: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
7bb0: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
7bc0: 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f  tabase is.  ** o
7bd0: 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  pened..  */.  ca
7be0: 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48  se PragTyp_SYNCH
7bf0: 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66  RONOUS: {.    if
7c00: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
7c10: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
7c20: 6e 74 28 70 50 61 72 73 65 2c 20 22 73 79 6e 63  nt(pParse, "sync
7c30: 68 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73  hronous", pDb->s
7c40: 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a  afety_level-1);.
7c50: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7c60: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
7c70: 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
7c80: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
7c90: 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20  pParse, .       
7ca0: 20 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76       "Safety lev
7cb0: 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68  el may not be ch
7cc0: 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74  anged inside a t
7cd0: 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20  ransaction");.  
7ce0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7cf0: 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 20 3d 20     int iLevel = 
7d00: 28 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  (getSafetyLevel(
7d10: 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 29 20 26  zRight,0,1)+1) &
7d20: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
7d30: 55 53 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20  US_MASK;.       
7d40: 20 69 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29   if( iLevel==0 )
7d50: 20 69 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20   iLevel = 1;.   
7d60: 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79       pDb->safety
7d70: 5f 6c 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b  _level = iLevel;
7d80: 0a 20 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50  .        setAllP
7d90: 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20  agerFlags(db);. 
7da0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
7db0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
7dc0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
7dd0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
7de0: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
7df0: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
7e00: 47 4d 41 53 0a 20 20 63 61 73 65 20 50 72 61 67  GMAS.  case Prag
7e10: 54 79 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20  Typ_FLAG: {.    
7e20: 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b  if( zRight==0 ){
7e30: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7e40: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 70  gleInt(pParse, p
7e50: 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65 2c 20 28  Pragma->zName, (
7e60: 64 62 2d 3e 66 6c 61 67 73 20 26 20 70 50 72 61  db->flags & pPra
7e70: 67 6d 61 2d 3e 69 41 72 67 29 21 3d 30 20 29 3b  gma->iArg)!=0 );
7e80: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7e90: 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20 70 50 72    int mask = pPr
7ea0: 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 20 20 2f  agma->iArg;    /
7eb0: 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74  * Mask of bits t
7ec0: 6f 20 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20  o set or clear. 
7ed0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  */.      if( db-
7ee0: 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
7ef0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  {.        /* For
7f00: 65 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74  eign key support
7f10: 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62   may not be enab
7f20: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20  led or disabled 
7f30: 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20  while not.      
7f40: 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d    ** in auto-com
7f50: 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20  mit mode.  */.  
7f60: 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28        mask &= ~(
7f70: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
7f80: 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a 23 69 66  ys);.      }.#if
7f90: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
7fa0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 20 20  HENTICATION.    
7fb0: 20 20 69 66 28 20 64 62 2d 3e 61 75 74 68 2e 61    if( db->auth.a
7fc0: 75 74 68 4c 65 76 65 6c 3d 3d 55 41 55 54 48 5f  uthLevel==UAUTH_
7fd0: 55 73 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20  User ){.        
7fe0: 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
7ff0: 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73 65 72 73 20  non-admin users 
8000: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 73 63  to modify the sc
8010: 68 65 6d 61 20 61 72 62 69 74 72 61 72 69 6c 79  hema arbitrarily
8020: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b   */.        mask
8030: 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 57 72 69   &= ~(SQLITE_Wri
8040: 74 65 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20  teSchema);.     
8050: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20   }.#endif..     
8060: 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42   if( sqlite3GetB
8070: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
8080: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  ) ){.        db-
8090: 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a  >flags |= mask;.
80a0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
80b0: 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26       db->flags &
80c0: 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20  = ~mask;.       
80d0: 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54   if( mask==SQLIT
80e0: 45 5f 44 65 66 65 72 46 4b 73 20 29 20 64 62 2d  E_DeferFKs ) db-
80f0: 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
8100: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a  s = 0;.      }..
8110: 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66        /* Many of
8120: 20 74 68 65 20 66 6c 61 67 2d 70 72 61 67 6d 61   the flag-pragma
8130: 73 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64  s modify the cod
8140: 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  e generated by t
8150: 68 65 20 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a  he SQL .      **
8160: 20 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20 63   compiler (eg. c
8170: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20 53  ount_changes). S
8180: 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f 64 65 20  o add an opcode 
8190: 74 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a 20 20  to expire all.  
81a0: 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20      ** compiled 
81b0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61  SQL statements a
81c0: 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61  fter modifying a
81d0: 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20   pragma value.. 
81e0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
81f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8200: 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c  v, OP_Expire, 0,
8210: 20 30 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c   0);.      setAl
8220: 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b  lPagerFlags(db);
8230: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
8240: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
8250: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
8260: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
8270: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8280: 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a  _SCHEMA_PRAGMAS.
8290: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
82a0: 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74  MA table_info(<t
82b0: 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a  able>).  **.  **
82c0: 20 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65   Return a single
82d0: 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f   row for each co
82e0: 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65  lumn of the name
82f0: 64 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c  d table. The col
8300: 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65  umns of.  ** the
8310: 20 72 65 74 75 72 6e 65 64 20 64 61 74 61 20 73   returned data s
8320: 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a  et are:.  **.  *
8330: 2a 20 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f  * cid:        Co
8340: 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65  lumn id (numbere
8350: 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  d from left to r
8360: 69 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61  ight, starting a
8370: 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20  t 0).  ** name: 
8380: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d        Column nam
8390: 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20  e.  ** type:    
83a0: 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72     Column declar
83b0: 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a  ation type..  **
83c0: 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75   notnull:    Tru
83d0: 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20  e if 'NOT NULL' 
83e0: 69 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d  is part of colum
83f0: 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20  n declaration.  
8400: 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54  ** dflt_value: T
8410: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
8420: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c   for the column,
8430: 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20   if any..  */.  
8440: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 41 42  case PragTyp_TAB
8450: 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69  LE_INFO: if( zRi
8460: 67 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65  ght ){.    Table
8470: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62   *pTab;.    pTab
8480: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
8490: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
84a0: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
84b0: 61 62 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  ab ){.      int 
84c0: 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20  i, k;.      int 
84d0: 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20  nHidden = 0;.   
84e0: 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b     Column *pCol;
84f0: 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50  .      Index *pP
8500: 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61  k = sqlite3Prima
8510: 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29  ryKeyIndex(pTab)
8520: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8530: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
8540: 20 36 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73   6);.      pPars
8550: 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20  e->nMem = 6;.   
8560: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
8570: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
8580: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  e, iDb);.      s
8590: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
85a0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
85b0: 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20  ME_NAME, "cid", 
85c0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
85d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
85e0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
85f0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
8600: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
8610: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
8620: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
8630: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
8640: 45 5f 4e 41 4d 45 2c 20 22 74 79 70 65 22 2c 20  E_NAME, "type", 
8650: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8660: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8670: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33  eSetColName(v, 3
8680: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
8690: 22 6e 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c 49 54  "notnull", SQLIT
86a0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
86b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
86c0: 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c  olName(v, 4, COL
86d0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74  NAME_NAME, "dflt
86e0: 5f 76 61 6c 75 65 22 2c 20 53 51 4c 49 54 45 5f  _value", SQLITE_
86f0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
8700: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8710: 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41  Name(v, 5, COLNA
8720: 4d 45 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c 20 53  ME_NAME, "pk", S
8730: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8740: 20 20 20 20 20 73 71 6c 69 74 65 33 56 69 65 77       sqlite3View
8750: 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70  GetColumnNames(p
8760: 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a 20 20  Parse, pTab);.  
8770: 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f      for(i=0, pCo
8780: 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c  l=pTab->aCol; i<
8790: 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c  pTab->nCol; i++,
87a0: 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20   pCol++){.      
87b0: 20 20 69 66 28 20 49 73 48 69 64 64 65 6e 43 6f    if( IsHiddenCo
87c0: 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20  lumn(pCol) ){.  
87d0: 20 20 20 20 20 20 20 20 6e 48 69 64 64 65 6e 2b          nHidden+
87e0: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  +;.          con
87f0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d  tinue;.        }
8800: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8810: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8820: 5f 49 6e 74 65 67 65 72 2c 20 69 2d 6e 48 69 64  _Integer, i-nHid
8830: 64 65 6e 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  den, 1);.       
8840: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8850: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
8860: 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 2d  , 0, 2, 0, pCol-
8870: 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  >zName, 0);.    
8880: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8890: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
88a0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20  ng8, 0, 3, 0,.  
88b0: 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a           pCol->z
88c0: 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79  Type ? pCol->zTy
88d0: 70 65 20 3a 20 22 22 2c 20 30 29 3b 0a 20 20 20  pe : "", 0);.   
88e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
88f0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
8900: 65 67 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74  eger, (pCol->not
8910: 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 29 2c 20 34  Null ? 1 : 0), 4
8920: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
8930: 43 6f 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20 20  Col->zDflt ){.  
8940: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8950: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
8960: 53 74 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30  String8, 0, 5, 0
8970: 2c 20 28 63 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a  , (char*)pCol->z
8980: 44 66 6c 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  Dflt, 0);.      
8990: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
89a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
89b0: 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c  dOp2(v, OP_Null,
89c0: 20 30 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20   0, 5);.        
89d0: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70  }.        if( (p
89e0: 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  Col->colFlags & 
89f0: 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29  COLFLAG_PRIMKEY)
8a00: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
8a10: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   k = 0;.        
8a20: 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d 30  }else if( pPk==0
8a30: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20   ){.          k 
8a40: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
8a50: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  se{.          fo
8a60: 72 28 6b 3d 31 3b 20 6b 3c 3d 70 54 61 62 2d 3e  r(k=1; k<=pTab->
8a70: 6e 43 6f 6c 20 26 26 20 70 50 6b 2d 3e 61 69 43  nCol && pPk->aiC
8a80: 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b  olumn[k-1]!=i; k
8a90: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a  ++){}.        }.
8aa0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8ab0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8ac0: 49 6e 74 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a  Integer, k, 6);.
8ad0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8ae0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8af0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29  ResultRow, 1, 6)
8b00: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
8b10: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
8b20: 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 54 41  case PragTyp_STA
8b30: 54 53 3a 20 7b 0a 20 20 20 20 49 6e 64 65 78 20  TS: {.    Index 
8b40: 2a 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45  *pIdx;.    HashE
8b50: 6c 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20  lem *i;.    v = 
8b60: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
8b70: 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69  Parse);.    sqli
8b80: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
8b90: 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 70 50 61  s(v, 4);.    pPa
8ba0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20  rse->nMem = 4;. 
8bb0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
8bc0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
8bd0: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c  e, iDb);.    sql
8be0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
8bf0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
8c00: 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20  _NAME, "table", 
8c10: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8c20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8c30: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
8c40: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69  COLNAME_NAME, "i
8c50: 6e 64 65 78 22 2c 20 53 51 4c 49 54 45 5f 53 54  ndex", SQLITE_ST
8c60: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
8c70: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
8c80: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
8c90: 41 4d 45 2c 20 22 77 69 64 74 68 22 2c 20 53 51  AME, "width", SQ
8ca0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8cb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8cc0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f  ColName(v, 3, CO
8cd0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 68 65 69  LNAME_NAME, "hei
8ce0: 67 68 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ght", SQLITE_STA
8cf0: 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  TIC);.    for(i=
8d00: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
8d10: 26 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74  &pDb->pSchema->t
8d20: 62 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71  blHash); i; i=sq
8d30: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29  liteHashNext(i))
8d40: 7b 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70  {.      Table *p
8d50: 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68  Tab = sqliteHash
8d60: 44 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73  Data(i);.      s
8d70: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
8d80: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
8d90: 30 2c 20 31 2c 20 30 2c 20 70 54 61 62 2d 3e 7a  0, 1, 0, pTab->z
8da0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
8db0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8dc0: 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c  2(v, OP_Null, 0,
8dd0: 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   2);.      sqlit
8de0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8df0: 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20  OP_Integer,.    
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e10: 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69         (int)sqli
8e20: 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70  te3LogEstToInt(p
8e30: 54 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 20  Tab->szTabRow), 
8e40: 33 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  3);.      sqlite
8e50: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8e60: 50 5f 49 6e 74 65 67 65 72 2c 20 0a 20 20 20 20  P_Integer, .    
8e70: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
8e80: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54  e3LogEstToInt(pT
8e90: 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29 2c  ab->nRowLogEst),
8ea0: 20 34 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   4);.      sqlit
8eb0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8ec0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
8ed0: 20 34 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70   4);.      for(p
8ee0: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
8ef0: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
8f00: 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20  x->pNext){.     
8f10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8f20: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
8f30: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64  g8, 0, 2, 0, pId
8f40: 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  x->zName, 0);.  
8f50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8f60: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
8f70: 74 65 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  teger,.         
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33      (int)sqlite3
8fa0: 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78  LogEstToInt(pIdx
8fb0: 2d 3e 73 7a 49 64 78 52 6f 77 29 2c 20 33 29 3b  ->szIdxRow), 3);
8fc0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8fd0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8fe0: 5f 49 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20  _Integer, .     
8ff0: 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69         (int)sqli
9000: 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70  te3LogEstToInt(p
9010: 49 64 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74  Idx->aiRowLogEst
9020: 5b 30 5d 29 2c 20 34 29 3b 0a 20 20 20 20 20 20  [0]), 4);.      
9030: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9040: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9050: 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20  Row, 1, 4);.    
9060: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
9070: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
9080: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46  ragTyp_INDEX_INF
9090: 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  O: if( zRight ){
90a0: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
90b0: 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  ;.    Table *pTa
90c0: 62 3b 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71  b;.    pIdx = sq
90d0: 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64  lite3FindIndex(d
90e0: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  b, zRight, zDb);
90f0: 0a 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b  .    if( pIdx ){
9100: 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
9110: 20 20 20 20 69 6e 74 20 6d 78 3b 0a 20 20 20 20      int mx;.    
9120: 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69    if( pPragma->i
9130: 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  Arg ){.        /
9140: 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  * PRAGMA index_x
9150: 69 6e 66 6f 20 28 6e 65 77 65 72 20 76 65 72 73  info (newer vers
9160: 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 20 72 6f  ion with more ro
9170: 77 73 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 29 20  ws and columns) 
9180: 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20  */.        mx = 
9190: 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20  pIdx->nColumn;. 
91a0: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e         pParse->n
91b0: 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 7d  Mem = 6;.      }
91c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
91d0: 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e   PRAGMA index_in
91e0: 66 6f 20 28 6c 65 67 61 63 79 20 76 65 72 73 69  fo (legacy versi
91f0: 6f 6e 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  on) */.        m
9200: 78 20 3d 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f  x = pIdx->nKeyCo
9210: 6c 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73  l;.        pPars
9220: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
9230: 20 20 20 7d 0a 20 20 20 20 20 20 70 54 61 62 20     }.      pTab 
9240: 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a  = pIdx->pTable;.
9250: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9260: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 70  eSetNumCols(v, p
9270: 50 61 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20 20  Parse->nMem);.  
9280: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
9290: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
92a0: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
92b0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
92c0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
92d0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e 6f  AME_NAME, "seqno
92e0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
92f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9300: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9310: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
9320: 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45  E, "cid", SQLITE
9330: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
9340: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
9350: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
9360: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
9370: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9380: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 72 61  ;.      if( pPra
9390: 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20  gma->iArg ){.   
93a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
93b0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c  SetColName(v, 3,
93c0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
93d0: 64 65 73 63 22 2c 20 53 51 4c 49 54 45 5f 53 54  desc", SQLITE_ST
93e0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
93f0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
9400: 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41  Name(v, 4, COLNA
9410: 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6c 6c 22 2c  ME_NAME, "coll",
9420: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9430: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9440: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9450: 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 5, COLNAME_NAM
9460: 45 2c 20 22 6b 65 79 22 2c 20 53 51 4c 49 54 45  E, "key", SQLITE
9470: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
9480: 7d 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  }.      for(i=0;
9490: 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20   i<mx; i++){.   
94a0: 20 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20       i16 cnum = 
94b0: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69  pIdx->aiColumn[i
94c0: 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ];.        sqlit
94d0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
94e0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31  OP_Integer, i, 1
94f0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9500: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
9510: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d  OP_Integer, cnum
9520: 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 69 66  , 2);.        if
9530: 28 20 63 6e 75 6d 3c 30 20 29 7b 0a 20 20 20 20  ( cnum<0 ){.    
9540: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9550: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75  eAddOp2(v, OP_Nu
9560: 6c 6c 2c 20 30 2c 20 33 29 3b 0a 20 20 20 20 20  ll, 0, 3);.     
9570: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
9580: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9590: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
95a0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 54  ng8, 0, 3, 0, pT
95b0: 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a  ab->aCol[cnum].z
95c0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
95d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
95e0: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b  pPragma->iArg ){
95f0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
9600: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
9610: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78  OP_Integer, pIdx
9620: 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 2c  ->aSortOrder[i],
9630: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   4);.          s
9640: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
9650: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
9660: 30 2c 20 35 2c 20 30 2c 20 70 49 64 78 2d 3e 61  0, 5, 0, pIdx->a
9670: 7a 43 6f 6c 6c 5b 69 5d 2c 20 30 29 3b 0a 20 20  zColl[i], 0);.  
9680: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9690: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
96a0: 49 6e 74 65 67 65 72 2c 20 69 3c 70 49 64 78 2d  Integer, i<pIdx-
96b0: 3e 6e 4b 65 79 43 6f 6c 2c 20 36 29 3b 0a 20 20  >nKeyCol, 6);.  
96c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
96d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
96e0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
96f0: 77 2c 20 31 2c 20 70 50 61 72 73 65 2d 3e 6e 4d  w, 1, pParse->nM
9700: 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  em);.      }.   
9710: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
9720: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9730: 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66 28 20  INDEX_LIST: if( 
9740: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e  zRight ){.    In
9750: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54  dex *pIdx;.    T
9760: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
9770: 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61 62 20  int i;.    pTab 
9780: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
9790: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  le(db, zRight, z
97a0: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  Db);.    if( pTa
97b0: 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  b ){.      v = s
97c0: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
97d0: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  arse);.      sql
97e0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
97f0: 6c 73 28 76 2c 20 35 29 3b 0a 20 20 20 20 20 20  ls(v, 5);.      
9800: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35  pParse->nMem = 5
9810: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
9820: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
9830: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
9840: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9850: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
9860: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
9870: 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  eq", SQLITE_STAT
9880: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
9890: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
98a0: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
98b0: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
98c0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
98d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
98e0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
98f0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e  OLNAME_NAME, "un
9900: 69 71 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  ique", SQLITE_ST
9910: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
9920: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
9930: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
9940: 5f 4e 41 4d 45 2c 20 22 6f 72 69 67 69 6e 22 2c  _NAME, "origin",
9950: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9960: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9970: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
9980: 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  4, COLNAME_NAME,
9990: 20 22 70 61 72 74 69 61 6c 22 2c 20 53 51 4c 49   "partial", SQLI
99a0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
99b0: 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d    for(pIdx=pTab-
99c0: 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49  >pIndex, i=0; pI
99d0: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
99e0: 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20  Next, i++){.    
99f0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
9a00: 61 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22  azOrigin[] = { "
9a10: 63 22 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b  c", "u", "pk" };
9a20: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9a30: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9a40: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
9a50: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9a60: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
9a70: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
9a80: 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  0, pIdx->zName, 
9a90: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
9aa0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9ab0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 49 73 55   OP_Integer, IsU
9ac0: 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29  niqueIndex(pIdx)
9ad0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 3);.        sq
9ae0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
9af0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
9b00: 2c 20 34 2c 20 30 2c 20 61 7a 4f 72 69 67 69 6e  , 4, 0, azOrigin
9b10: 5b 70 49 64 78 2d 3e 69 64 78 54 79 70 65 5d 2c  [pIdx->idxType],
9b20: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
9b30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9b40: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49  , OP_Integer, pI
9b50: 64 78 2d 3e 70 50 61 72 74 49 64 78 57 68 65 72  dx->pPartIdxWher
9b60: 65 21 3d 30 2c 20 35 29 3b 0a 20 20 20 20 20 20  e!=0, 5);.      
9b70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9b80: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9b90: 52 6f 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20 20  Row, 1, 5);.    
9ba0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
9bb0: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
9bc0: 72 61 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f  ragTyp_DATABASE_
9bd0: 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20  LIST: {.    int 
9be0: 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  i;.    sqlite3Vd
9bf0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
9c00: 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  3);.    pParse->
9c10: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71  nMem = 3;.    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 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
9c40: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
9c50: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
9c60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9c70: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
9c80: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
9c90: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
9ca0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
9cb0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9cc0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
9cd0: 45 2c 20 22 66 69 6c 65 22 2c 20 53 51 4c 49 54  E, "file", SQLIT
9ce0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66  E_STATIC);.    f
9cf0: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
9d00: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  b; i++){.      i
9d10: 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  f( db->aDb[i].pB
9d20: 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  t==0 ) continue;
9d30: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
9d40: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21  b->aDb[i].zName!
9d50: 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =0 );.      sqli
9d60: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9d70: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20   OP_Integer, i, 
9d80: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
9d90: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
9da0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
9db0: 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a   0, db->aDb[i].z
9dc0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
9dd0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9de0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
9df0: 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20   0, 3, 0,.      
9e00: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
9e10: 65 47 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d  eGetFilename(db-
9e20: 3e 61 44 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29  >aDb[i].pBt), 0)
9e30: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9e40: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9e50: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29  ResultRow, 1, 3)
9e60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
9e70: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
9e80: 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c  gTyp_COLLATION_L
9e90: 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  IST: {.    int i
9ea0: 20 3d 20 30 3b 0a 20 20 20 20 48 61 73 68 45 6c   = 0;.    HashEl
9eb0: 65 6d 20 2a 70 3b 0a 20 20 20 20 73 71 6c 69 74  em *p;.    sqlit
9ec0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
9ed0: 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72  (v, 2);.    pPar
9ee0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20  se->nMem = 2;.  
9ef0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9f00: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
9f10: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
9f20: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9f30: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9f40: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
9f50: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
9f60: 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f   "name", SQLITE_
9f70: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72  STATIC);.    for
9f80: 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (p=sqliteHashFir
9f90: 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71  st(&db->aCollSeq
9fa0: 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61  ); p; p=sqliteHa
9fb0: 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20  shNext(p)){.    
9fc0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
9fd0: 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71   = (CollSeq *)sq
9fe0: 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b  liteHashData(p);
9ff0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a000: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
a010: 6e 74 65 67 65 72 2c 20 69 2b 2b 2c 20 31 29 3b  nteger, i++, 1);
a020: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a030: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
a040: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
a050: 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30   pColl->zName, 0
a060: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
a070: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
a080: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32  _ResultRow, 1, 2
a090: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
a0a0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
a0b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
a0c0: 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  MA_PRAGMAS */..#
a0d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a0e0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
a0f0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f   case PragTyp_FO
a100: 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20  REIGN_KEY_LIST: 
a110: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
a120: 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20    FKey *pFK;.   
a130: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
a140: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
a150: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
a160: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
a170: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
a180: 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74    v = sqlite3Get
a190: 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20  Vdbe(pParse);.  
a1a0: 20 20 20 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e      pFK = pTab->
a1b0: 70 46 4b 65 79 3b 0a 20 20 20 20 20 20 69 66 28  pFKey;.      if(
a1c0: 20 70 46 4b 20 29 7b 0a 20 20 20 20 20 20 20 20   pFK ){.        
a1d0: 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20  int i = 0; .    
a1e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
a1f0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 38 29 3b  etNumCols(v, 8);
a200: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
a210: 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20  >nMem = 8;.     
a220: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
a230: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
a240: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20  e, iDb);.       
a250: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
a260: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
a270: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 64 22 2c  NAME_NAME, "id",
a280: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
a290: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a2a0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
a2b0: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
a2c0: 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45  E, "seq", SQLITE
a2d0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
a2e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a2f0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
a300: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62  LNAME_NAME, "tab
a310: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  le", SQLITE_STAT
a320: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
a330: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a340: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
a350: 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 53  _NAME, "from", S
a360: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
a370: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a380: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
a390: 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  4, COLNAME_NAME,
a3a0: 20 22 74 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54   "to", SQLITE_ST
a3b0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
a3c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
a3d0: 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41  Name(v, 5, COLNA
a3e0: 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70 64  ME_NAME, "on_upd
a3f0: 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ate", SQLITE_STA
a400: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
a410: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
a420: 61 6d 65 28 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d  ame(v, 6, COLNAM
a430: 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65  E_NAME, "on_dele
a440: 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  te", SQLITE_STAT
a450: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
a460: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a470: 6d 65 28 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45  me(v, 7, COLNAME
a480: 5f 4e 41 4d 45 2c 20 22 6d 61 74 63 68 22 2c 20  _NAME, "match", 
a490: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
a4a0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 46          while(pF
a4b0: 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  K){.          in
a4c0: 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66  t j;.          f
a4d0: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e  or(j=0; j<pFK->n
a4e0: 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  Col; j++){.     
a4f0: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43 6f         char *zCo
a500: 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  l = pFK->aCol[j]
a510: 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20  .zCol;.         
a520: 20 20 20 63 68 61 72 20 2a 7a 4f 6e 44 65 6c 65     char *zOnDele
a530: 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74  te = (char *)act
a540: 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63  ionName(pFK->aAc
a550: 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20 20 20 20  tion[0]);.      
a560: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 55        char *zOnU
a570: 70 64 61 74 65 20 3d 20 28 63 68 61 72 20 2a 29  pdate = (char *)
a580: 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e  actionName(pFK->
a590: 61 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20  aAction[1]);.   
a5a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a5b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
a5c0: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
a5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
a5e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
a5f0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6a 2c  , OP_Integer, j,
a600: 20 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   2);.           
a610: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a620: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
a630: 2c 20 30 2c 20 33 2c 20 30 2c 20 70 46 4b 2d 3e  , 0, 3, 0, pFK->
a640: 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  zTo, 0);.       
a650: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a660: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
a670: 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20  ing8, 0, 4, 0,. 
a680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a690: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61               pTa
a6a0: 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f  b->aCol[pFK->aCo
a6b0: 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d  l[j].iFrom].zNam
a6c0: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e, 0);.         
a6d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a6e0: 64 4f 70 34 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f  dOp4(v, zCol ? O
a6f0: 50 5f 53 74 72 69 6e 67 38 20 3a 20 4f 50 5f 4e  P_String8 : OP_N
a700: 75 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c 20 7a 43  ull, 0, 5, 0, zC
a710: 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  ol, 0);.        
a720: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a730: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
a740: 6e 67 38 2c 20 30 2c 20 36 2c 20 30 2c 20 7a 4f  ng8, 0, 6, 0, zO
a750: 6e 55 70 64 61 74 65 2c 20 30 29 3b 0a 20 20 20  nUpdate, 0);.   
a760: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a770: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
a780: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 37 2c 20  _String8, 0, 7, 
a790: 30 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c 20 30 29  0, zOnDelete, 0)
a7a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
a7b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
a7c0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
a7d0: 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c 20  , 8, 0, "NONE", 
a7e0: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
a7f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a800: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
a810: 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20  w, 1, 8);.      
a820: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
a830: 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70  ++i;.          p
a840: 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46  FK = pFK->pNextF
a850: 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  rom;.        }. 
a860: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
a870: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
a880: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
a890: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
a8a0: 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65  _KEY) */..#ifnde
a8b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
a8c0: 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65  REIGN_KEY.#ifnde
a8d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
a8e0: 49 47 47 45 52 0a 20 20 63 61 73 65 20 50 72 61  IGGER.  case Pra
a8f0: 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  gTyp_FOREIGN_KEY
a900: 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b  _CHECK: {.    FK
a910: 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20  ey *pFK;        
a920: 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67       /* A foreig
a930: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
a940: 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
a950: 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
a960: 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f  * Child table co
a970: 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45  ntain "REFERENCE
a980: 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20  S" keyword */.  
a990: 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74    Table *pParent
a9a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65  ;        /* Pare
a9b0: 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20 63 68  nt table that ch
a9c0: 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f  ild points to */
a9d0: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
a9e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
a9f0: 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61 72 65  ndex in the pare
aa00: 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  nt table */.    
aa10: 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
aa20: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
aa30: 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e  ounter:  Foreign
aa40: 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20   key number for 
aa50: 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  pTab */.    int 
aa60: 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  j;              
aa70: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
aa80: 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68  er:  Field of th
aa90: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f  e foreign key */
aaa0: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b  .    HashElem *k
aab0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
aac0: 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65  oop counter:  Ne
aad0: 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65  xt table in sche
aae0: 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b  ma */.    int x;
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab00: 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61   /* result varia
ab10: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ble */.    int r
ab20: 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20  egResult;       
ab30: 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73    /* 3 registers
ab40: 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c   to hold a resul
ab50: 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74  t row */.    int
ab60: 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20   regKey;        
ab70: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
ab80: 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20  to hold key for 
ab90: 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20  checking the FK 
aba0: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f  */.    int regRo
abb0: 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  w;            /*
abc0: 20 52 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   Registers to ho
abd0: 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54  ld a row from pT
abe0: 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  ab */.    int ad
abf0: 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20  drTop;          
ac00: 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f   /* Top of a loo
ac10: 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69  p checking forei
ac20: 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69  gn keys */.    i
ac30: 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20  nt addrOk;      
ac40: 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
ac50: 72 65 20 69 66 20 74 68 65 20 6b 65 79 20 69 73  re if the key is
ac60: 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a   OK */.    int *
ac70: 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  aiCols;         
ac80: 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61    /* child to pa
ac90: 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70  rent column mapp
aca0: 69 6e 67 20 2a 2f 0a 0a 20 20 20 20 72 65 67 52  ing */..    regR
acb0: 65 73 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e  esult = pParse->
acc0: 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72  nMem+1;.    pPar
acd0: 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20  se->nMem += 4;. 
ace0: 20 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50     regKey = ++pP
acf0: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
ad00: 72 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73  regRow = ++pPars
ad10: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d  e->nMem;.    v =
ad20: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
ad30: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c  pParse);.    sql
ad40: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
ad50: 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 73 71  ls(v, 4);.    sq
ad60: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
ad70: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
ad80: 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c  E_NAME, "table",
ad90: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
ada0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
adb0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
adc0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
add0: 72 6f 77 69 64 22 2c 20 53 51 4c 49 54 45 5f 53  rowid", SQLITE_S
ade0: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
adf0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ae00: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
ae10: 4e 41 4d 45 2c 20 22 70 61 72 65 6e 74 22 2c 20  NAME, "parent", 
ae20: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
ae30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
ae40: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
ae50: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66  COLNAME_NAME, "f
ae60: 6b 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  kid", SQLITE_STA
ae70: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
ae80: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
ae90: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
aea0: 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61      k = sqliteHa
aeb0: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62  shFirst(&db->aDb
aec0: 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74  [iDb].pSchema->t
aed0: 62 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69  blHash);.    whi
aee0: 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69  le( k ){.      i
aef0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
af00: 20 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69       pTab = sqli
af10: 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70  te3LocateTable(p
af20: 50 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74  Parse, 0, zRight
af30: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , zDb);.        
af40: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  k = 0;.      }el
af50: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62  se{.        pTab
af60: 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74   = (Table*)sqlit
af70: 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20  eHashData(k);.  
af80: 20 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65        k = sqlite
af90: 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20  HashNext(k);.   
afa0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
afb0: 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e  Tab==0 || pTab->
afc0: 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69  pFKey==0 ) conti
afd0: 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
afe0: 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72  e3TableLock(pPar
aff0: 73 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74  se, iDb, pTab->t
b000: 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e  num, 0, pTab->zN
b010: 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ame);.      if( 
b020: 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f  pTab->nCol+regRo
b030: 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29  w>pParse->nMem )
b040: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
b050: 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67  pTab->nCol + reg
b060: 52 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Row;.      sqlit
b070: 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72  e3OpenTable(pPar
b080: 73 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62  se, 0, iDb, pTab
b090: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
b0a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b0b0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
b0c0: 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73  ring8, 0, regRes
b0d0: 75 6c 74 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e  ult, 0, pTab->zN
b0e0: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 34 5f               P4_
b100: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
b110: 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70    for(i=1, pFK=p
b120: 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b  Tab->pFKey; pFK;
b130: 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70   i++, pFK=pFK->p
b140: 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20  NextFrom){.     
b150: 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c     pParent = sql
b160: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
b170: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29  , pFK->zTo, zDb)
b180: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
b190: 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69  arent==0 ) conti
b1a0: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64  nue;.        pId
b1b0: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73  x = 0;.        s
b1c0: 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
b1d0: 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61  pParse, iDb, pPa
b1e0: 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70  rent->tnum, 0, p
b1f0: 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a  Parent->zName);.
b200: 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69          x = sqli
b210: 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
b220: 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74  (pParse, pParent
b230: 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29  , pFK, &pIdx, 0)
b240: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 3d  ;.        if( x=
b250: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
b260: 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20  if( pIdx==0 ){. 
b270: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b280: 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72  e3OpenTable(pPar
b290: 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72  se, i, iDb, pPar
b2a0: 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  ent, OP_OpenRead
b2b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
b2c0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
b2d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b2e0: 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  3(v, OP_OpenRead
b2f0: 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c  , i, pIdx->tnum,
b300: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20   iDb);.         
b310: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
b320: 74 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72 73  tP4KeyInfo(pPars
b330: 65 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20  e, pIdx);.      
b340: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
b350: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  lse{.          k
b360: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
b370: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
b380: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
b390: 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e  ssert( pParse->n
b3a0: 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20  Err>0 || pFK==0 
b3b0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b  );.      if( pFK
b3c0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
b3d0: 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62  if( pParse->nTab
b3e0: 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61  <i ) pParse->nTa
b3f0: 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64  b = i;.      add
b400: 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64  rTop = sqlite3Vd
b410: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52  beAddOp1(v, OP_R
b420: 65 77 69 6e 64 2c 20 30 29 3b 20 56 64 62 65 43  ewind, 0); VdbeC
b430: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
b440: 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70    for(i=1, pFK=p
b450: 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b  Tab->pFKey; pFK;
b460: 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70   i++, pFK=pFK->p
b470: 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20  NextFrom){.     
b480: 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c     pParent = sql
b490: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
b4a0: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29  , pFK->zTo, zDb)
b4b0: 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d  ;.        pIdx =
b4c0: 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f   0;.        aiCo
b4d0: 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ls = 0;.        
b4e0: 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20  if( pParent ){. 
b4f0: 20 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c           x = sql
b500: 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
b510: 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e  x(pParse, pParen
b520: 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 26  t, pFK, &pIdx, &
b530: 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20  aiCols);.       
b540: 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20     assert( x==0 
b550: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
b560: 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71       addrOk = sq
b570: 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62  lite3VdbeMakeLab
b580: 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69  el(v);.        i
b590: 66 28 20 70 50 61 72 65 6e 74 20 26 26 20 70 49  f( pParent && pI
b5a0: 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  dx==0 ){.       
b5b0: 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46     int iKey = pF
b5c0: 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d  K->aCol[0].iFrom
b5d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
b5e0: 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69  rt( iKey>=0 && i
b5f0: 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29  Key<pTab->nCol )
b600: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
b610: 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65  iKey!=pTab->iPKe
b620: 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  y ){.           
b630: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b640: 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c  p3(v, OP_Column,
b650: 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77   0, iKey, regRow
b660: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
b670: 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
b680: 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65  ult(v, pTab, iKe
b690: 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20  y, regRow);.    
b6a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b6b0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b6c0: 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20  IsNull, regRow, 
b6d0: 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76  addrOk); VdbeCov
b6e0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
b6f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b700: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75  eAddOp2(v, OP_Mu
b710: 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c  stBeInt, regRow,
b720: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
b730: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
b740: 65 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 20 56  entAddr(v)+3); V
b750: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
b760: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
b770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
b780: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b790: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
b7a0: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
b7b0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71    }.          sq
b7c0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
b7d0: 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c  v, OP_NotExists,
b7e0: 20 69 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 20   i, 0, regRow); 
b7f0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
b800: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
b810: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b820: 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 61 64 64 72  OP_Goto, 0, addr
b830: 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Ok);.          s
b840: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
b850: 72 65 28 76 2c 20 73 71 6c 69 74 65 33 56 64 62  re(v, sqlite3Vdb
b860: 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 2d  eCurrentAddr(v)-
b870: 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  2);.        }els
b880: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  e{.          for
b890: 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f  (j=0; j<pFK->nCo
b8a0: 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  l; j++){.       
b8b0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72       sqlite3Expr
b8c0: 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
b8d0: 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 30 2c  able(v, pTab, 0,
b8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 69 43               aiC
b900: 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20  ols ? aiCols[j] 
b910: 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69  : pFK->aCol[j].i
b920: 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b  From, regRow+j);
b930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
b940: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b950: 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67  , OP_IsNull, reg
b960: 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 20  Row+j, addrOk); 
b970: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
b980: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
b990: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
b9a0: 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  nt ){.          
b9b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b9c0: 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65  Op4(v, OP_MakeRe
b9d0: 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20 70 46  cord, regRow, pF
b9e0: 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 2c  K->nCol, regKey,
b9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ba00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ba10: 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
ba20: 69 74 79 53 74 72 28 76 2c 70 49 64 78 29 2c 20  ityStr(v,pIdx), 
ba30: 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20  pFK->nCol);.    
ba40: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ba50: 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
ba60: 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64  OP_Found, i, add
ba70: 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b  rOk, regKey, 0);
ba80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 64 62  .            Vdb
ba90: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
baa0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
bab0: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
bac0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bad0: 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65   OP_Rowid, 0, re
bae0: 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20  gResult+1);.    
baf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bb00: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
bb10: 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c  ng8, 0, regResul
bb20: 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  t+2, 0, .       
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f     pFK->zTo, P4_
bb50: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
bb60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bb70: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
bb80: 67 65 72 2c 20 69 2d 31 2c 20 72 65 67 52 65 73  ger, i-1, regRes
bb90: 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20 20 20  ult+3);.        
bba0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bbb0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
bbc0: 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34 29  w, regResult, 4)
bbd0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
bbe0: 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65  3VdbeResolveLabe
bbf0: 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20  l(v, addrOk);.  
bc00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
bc10: 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b  ree(db, aiCols);
bc20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
bc30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
bc40: 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20  (v, OP_Next, 0, 
bc50: 61 64 64 72 54 6f 70 2b 31 29 3b 20 56 64 62 65  addrTop+1); Vdbe
bc60: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
bc70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
bc80: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f  mpHere(v, addrTo
bc90: 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  p);.    }.  }.  
bca0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
bcb0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
bcc0: 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a  _OMIT_TRIGGER) *
bcd0: 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  /.#endif /* !def
bce0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
bcf0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f  _FOREIGN_KEY) */
bd00: 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  ..#ifndef NDEBUG
bd10: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
bd20: 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a  PARSER_TRACE: {.
bd30: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
bd40: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
bd50: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
bd60: 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20  ight, 0) ){.    
bd70: 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65      sqlite3Parse
bd80: 72 54 72 61 63 65 28 73 74 64 65 72 72 2c 20 22  rTrace(stderr, "
bd90: 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20  parser: ");.    
bda0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
bdb0: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
bdc0: 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20  ace(0, 0);.     
bdd0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
bde0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
bdf0: 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65  /* Reinstall the
be00: 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66   LIKE and GLOB f
be10: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76  unctions.  The v
be20: 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20  ariant of LIKE. 
be30: 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65   ** used will be
be40: 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
be50: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
be60: 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a   on the RHS..  *
be70: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
be80: 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f  _CASE_SENSITIVE_
be90: 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28 20  LIKE: {.    if( 
bea0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
beb0: 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
bec0: 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c  ikeFunctions(db,
bed0: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
bee0: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a  an(zRight, 0));.
bef0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
bf00: 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  k;..#ifndef SQLI
bf10: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
bf20: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64  CK_ERROR_MAX.# d
bf30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
bf40: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
bf50: 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69  OR_MAX 100.#endi
bf60: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
bf70: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
bf80: 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67  _CHECK.  /* Prag
bf90: 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  ma "quick_check"
bfa0: 20 69 73 20 72 65 64 75 63 65 64 20 76 65 72 73   is reduced vers
bfb0: 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74  ion of .  ** int
bfc0: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73  egrity_check des
bfd0: 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20  igned to detect 
bfe0: 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  most database co
bff0: 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69  rruption.  ** wi
c000: 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68  thout most of th
c010: 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20  e overhead of a 
c020: 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63  full integrity-c
c030: 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  heck..  */.  cas
c040: 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52  e PragTyp_INTEGR
c050: 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20  ITY_CHECK: {.   
c060: 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c   int i, j, addr,
c070: 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a 20   mxErr;..    /* 
c080: 43 6f 64 65 20 74 68 61 74 20 61 70 70 65 61 72  Code that appear
c090: 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
c0a0: 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63 68  the integrity ch
c0b0: 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f  eck.  If no erro
c0c0: 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67 65  r.    ** message
c0d0: 73 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e 65  s have been gene
c0e0: 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b  rated, output OK
c0f0: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75 74  .  Otherwise out
c100: 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65  put the.    ** e
c110: 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20 20  rror message.   
c120: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63   */.    static c
c130: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
c140: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
c150: 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63  O(2);.    static
c160: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
c170: 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a  t endCode[] = {.
c180: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67        { OP_IfNeg
c190: 2c 20 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20  ,       1, 0,   
c1a0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30       0},    /* 0
c1b0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53   */.      { OP_S
c1c0: 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33  tring8,     0, 3
c1d0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
c1e0: 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 1 */.      { 
c1f0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
c200: 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c  3, 1,        0},
c210: 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74  .    };..    int
c220: 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69   isQuick = (sqli
c230: 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74  te3Tolower(zLeft
c240: 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20  [0])=='q');..   
c250: 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d   /* If the PRAGM
c260: 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66  A command was of
c270: 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d   the form "PRAGM
c280: 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79  A <db>.integrity
c290: 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20  _check",.    ** 
c2a0: 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20  then iDb is set 
c2b0: 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  to the index of 
c2c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 64 65  the database ide
c2d0: 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e  ntified by <db>.
c2e0: 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20  .    ** In this 
c2f0: 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72  case, the integr
c300: 69 74 79 20 6f 66 20 64 61 74 61 62 61 73 65 20  ity of database 
c310: 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69  iDb only is veri
c320: 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74  fied by.    ** t
c330: 68 65 20 56 44 42 45 20 63 72 65 61 74 65 64 20  he VDBE created 
c340: 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20  below..    **.  
c350: 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20    ** Otherwise, 
c360: 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77  if the command w
c370: 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d  as simply "PRAGM
c380: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
c390: 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50  k" (or.    ** "P
c3a0: 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63  RAGMA quick_chec
c3b0: 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73  k"), then iDb is
c3c0: 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68   set to 0. In th
c3d0: 69 73 20 63 61 73 65 2c 20 73 65 74 20 69 44 62  is case, set iDb
c3e0: 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65  .    ** to -1 he
c3f0: 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20  re, to indicate 
c400: 74 68 61 74 20 74 68 65 20 56 44 42 45 20 73 68  that the VDBE sh
c410: 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68 65 20  ould verify the 
c420: 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a  integrity.    **
c430: 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
c440: 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a   databases.  */.
c450: 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3e      assert( iDb>
c460: 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
c470: 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32  ( iDb==0 || pId2
c480: 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70  ->z );.    if( p
c490: 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20  Id2->z==0 ) iDb 
c4a0: 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  = -1;..    /* In
c4b0: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42  itialize the VDB
c4c0: 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20  E program */.   
c4d0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
c4e0: 36 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  6;.    sqlite3Vd
c4f0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
c500: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
c510: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
c520: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
c530: 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65  , "integrity_che
c540: 63 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ck", SQLITE_STAT
c550: 49 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74  IC);..    /* Set
c560: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72 72   the maximum err
c570: 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20  or count */.    
c580: 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49  mxErr = SQLITE_I
c590: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
c5a0: 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66  RROR_MAX;.    if
c5b0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
c5c0: 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33    sqlite3GetInt3
c5d0: 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72 72  2(zRight, &mxErr
c5e0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78 45  );.      if( mxE
c5f0: 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  rr<=0 ){.       
c600: 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f   mxErr = SQLITE_
c610: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
c620: 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20  ERROR_MAX;.     
c630: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c   }.    }.    sql
c640: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c650: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78  , OP_Integer, mx
c660: 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67  Err, 1);  /* reg
c670: 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72 73  [1] holds errors
c680: 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a   left */..    /*
c690: 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79   Do an integrity
c6a0: 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20 64   check on each d
c6b0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a  atabase file */.
c6c0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
c6d0: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
c6e0: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b      HashElem *x;
c6f0: 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70 54 62  .      Hash *pTb
c700: 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 63 6e  ls;.      int cn
c710: 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69 66  t = 0;..      if
c720: 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26  ( OMIT_TEMPDB &&
c730: 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65   i==1 ) continue
c740: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44 62 3e  ;.      if( iDb>
c750: 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29 20 63  =0 && i!=iDb ) c
c760: 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20  ontinue;..      
c770: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
c780: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
c790: 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d  i);.      addr =
c7a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c7b0: 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
c7c0: 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f  1); /* Halt if o
c7d0: 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a  ut of errors */.
c7e0: 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
c7f0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c  ge(v);.      sql
c800: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c810: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
c820: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c830: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
c840: 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ddr);..      /* 
c850: 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20  Do an integrity 
c860: 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54  check of the B-T
c870: 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  ree.      **.   
c880: 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66     ** Begin by f
c890: 69 6c 6c 69 6e 67 20 72 65 67 69 73 74 65 72 73  illing registers
c8a0: 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74 68 20   2, 3, ... with 
c8b0: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73 20 6e  the root pages n
c8c0: 75 6d 62 65 72 73 0a 20 20 20 20 20 20 2a 2a 20  umbers.      ** 
c8d0: 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73 20 61  for all tables a
c8e0: 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68  nd indices in th
c8f0: 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  e database..    
c900: 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
c910: 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
c920: 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 2c  MutexHeld(db, i,
c930: 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70 54 62   0) );.      pTb
c940: 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d  ls = &db->aDb[i]
c950: 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73  .pSchema->tblHas
c960: 68 3b 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73  h;.      for(x=s
c970: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70  qliteHashFirst(p
c980: 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69  Tbls); x; x=sqli
c990: 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a  teHashNext(x)){.
c9a0: 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70          Table *p
c9b0: 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68  Tab = sqliteHash
c9c0: 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20  Data(x);.       
c9d0: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
c9e0: 20 20 20 20 20 20 69 66 28 20 48 61 73 52 6f 77        if( HasRow
c9f0: 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20  id(pTab) ){.    
ca00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ca10: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
ca20: 74 65 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75  teger, pTab->tnu
ca30: 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20  m, 2+cnt);.     
ca40: 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74       VdbeComment
ca50: 28 28 76 2c 20 22 25 73 22 2c 20 70 54 61 62 2d  ((v, "%s", pTab-
ca60: 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20  >zName));.      
ca70: 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20      cnt++;.     
ca80: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72     }.        for
ca90: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
caa0: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
cab0: 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Idx->pNext){.   
cac0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cad0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
cae0: 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e  nteger, pIdx->tn
caf0: 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20  um, 2+cnt);.    
cb00: 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e        VdbeCommen
cb10: 74 28 28 76 2c 20 22 25 73 22 2c 20 70 49 64 78  t((v, "%s", pIdx
cb20: 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20  ->zName));.     
cb30: 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20       cnt++;.    
cb40: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20      }.      }.. 
cb50: 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
cb60: 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75 6d  e sufficient num
cb70: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
cb80: 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
cb90: 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 50  ated */.      pP
cba0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58  arse->nMem = MAX
cbb0: 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20  ( pParse->nMem, 
cbc0: 63 6e 74 2b 38 20 29 3b 0a 0a 20 20 20 20 20 20  cnt+8 );..      
cbd0: 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65  /* Do the b-tree
cbe0: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
cbf0: 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  s */.      sqlit
cc00: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
cc10: 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20  OP_IntegrityCk, 
cc20: 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20 20  2, cnt, 1);.    
cc30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
cc40: 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69 29 3b  ngeP5(v, (u8)i);
cc50: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
cc60: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
cc70: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32 29  v, OP_IsNull, 2)
cc80: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
cc90: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
cca0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
ccb0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
ccc0: 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69  0,.         sqli
ccd0: 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22  te3MPrintf(db, "
cce0: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
ccf0: 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61  %s ***\n", db->a
cd00: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20  Db[i].zName),.  
cd10: 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d 49         P4_DYNAMI
cd20: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
cd30: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
cd40: 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20 31 29  P_Move, 2, 4, 1)
cd50: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
cd60: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
cd70: 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32 29  Concat, 4, 3, 2)
cd80: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
cd90: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
cda0: 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29  ResultRow, 2, 1)
cdb0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
cdc0: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
cdd0: 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ddr);..      /* 
cde0: 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68  Make sure all th
cdf0: 65 20 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f  e indices are co
ce00: 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72 65 63  nstructed correc
ce10: 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  tly..      */.  
ce20: 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65      for(x=sqlite
ce30: 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29  HashFirst(pTbls)
ce40: 3b 20 78 20 26 26 20 21 69 73 51 75 69 63 6b 3b  ; x && !isQuick;
ce50: 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   x=sqliteHashNex
ce60: 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54  t(x)){.        T
ce70: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
ce80: 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a  iteHashData(x);.
ce90: 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70          Index *p
cea0: 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20 20 20  Idx, *pPk;.     
ceb0: 20 20 20 49 6e 64 65 78 20 2a 70 50 72 69 6f 72     Index *pPrior
cec0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 6e   = 0;.        in
ced0: 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20 20 20  t loopTop;.     
cee0: 20 20 20 69 6e 74 20 69 44 61 74 61 43 75 72 2c     int iDataCur,
cef0: 20 69 49 64 78 43 75 72 3b 0a 20 20 20 20 20 20   iIdxCur;.      
cf00: 20 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b 0a 0a    int r1 = -1;..
cf10: 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62          if( pTab
cf20: 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f  ->pIndex==0 ) co
cf30: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
cf40: 70 50 6b 20 3d 20 48 61 73 52 6f 77 69 64 28 70  pPk = HasRowid(p
cf50: 54 61 62 29 20 3f 20 30 20 3a 20 73 71 6c 69 74  Tab) ? 0 : sqlit
cf60: 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
cf70: 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 20  x(pTab);.       
cf80: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
cf90: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
cfa0: 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20 53  IfPos, 1);  /* S
cfb0: 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20 65 72  top if out of er
cfc0: 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  rors */.        
cfd0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
cfe0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
cff0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d000: 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
d010: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d020: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
d030: 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  r);.        sqli
d040: 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
d050: 72 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  r(pParse);.     
d060: 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61     sqlite3OpenTa
d070: 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70 50  bleAndIndices(pP
d080: 61 72 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f 4f  arse, pTab, OP_O
d090: 70 65 6e 52 65 61 64 2c 0a 20 20 20 20 20 20 20  penRead,.       
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 30              1, 0
d0c0: 2c 20 26 69 44 61 74 61 43 75 72 2c 20 26 69 49  , &iDataCur, &iI
d0d0: 64 78 43 75 72 29 3b 0a 20 20 20 20 20 20 20 20  dxCur);.        
d0e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d0f0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
d100: 20 30 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20   0, 7);.        
d110: 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
d120: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
d130: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
d140: 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
d150: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d160: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
d170: 67 65 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a  ger, 0, 8+j); /*
d180: 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63   index entries c
d190: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20  ounter */.      
d1a0: 20 20 7d 0a 20 20 20 20 20 20 20 20 70 50 61 72    }.        pPar
d1b0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 70  se->nMem = MAX(p
d1c0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a  Parse->nMem, 8+j
d1d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d1e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d1f0: 4f 50 5f 52 65 77 69 6e 64 2c 20 69 44 61 74 61  OP_Rewind, iData
d200: 43 75 72 2c 20 30 29 3b 20 56 64 62 65 43 6f 76  Cur, 0); VdbeCov
d210: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d220: 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69    loopTop = sqli
d230: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d240: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20 31   OP_AddImm, 7, 1
d250: 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 65  );.        /* Ve
d260: 72 69 66 79 20 74 68 61 74 20 61 6c 6c 20 4e 4f  rify that all NO
d270: 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72  T NULL columns r
d280: 65 61 6c 6c 79 20 61 72 65 20 4e 4f 54 20 4e 55  eally are NOT NU
d290: 4c 4c 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f  LL */.        fo
d2a0: 72 28 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e  r(j=0; j<pTab->n
d2b0: 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  Col; j++){.     
d2c0: 20 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 3b       char *zErr;
d2d0: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a  .          int j
d2e0: 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20 20  mp2, jmp3;.     
d2f0: 20 20 20 20 20 69 66 28 20 6a 3d 3d 70 54 61 62       if( j==pTab
d300: 2d 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74 69 6e  ->iPKey ) contin
d310: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ue;.          if
d320: 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e  ( pTab->aCol[j].
d330: 6e 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e  notNull==0 ) con
d340: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20  tinue;.         
d350: 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
d360: 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
d370: 28 76 2c 20 70 54 61 62 2c 20 69 44 61 74 61 43  (v, pTab, iDataC
d380: 75 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20 20  ur, j, 3);.     
d390: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d3a0: 43 68 61 6e 67 65 50 35 28 76 2c 20 4f 50 46 4c  ChangeP5(v, OPFL
d3b0: 41 47 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a 20  AG_TYPEOFARG);. 
d3c0: 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20           jmp2 = 
d3d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d3e0: 31 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c  1(v, OP_NotNull,
d3f0: 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   3); VdbeCoverag
d400: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
d410: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d420: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
d430: 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65  1, -1); /* Decre
d440: 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74  ment error limit
d450: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 45   */.          zE
d460: 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  rr = sqlite3MPri
d470: 6e 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76 61  ntf(db, "NULL va
d480: 6c 75 65 20 69 6e 20 25 73 2e 25 73 22 2c 20 70  lue in %s.%s", p
d490: 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Tab->zName,.    
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
d4c0: 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a  aCol[j].zName);.
d4d0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d4e0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
d4f0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
d500: 20 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59 4e   0, zErr, P4_DYN
d510: 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20  AMIC);.         
d520: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d530: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
d540: 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 3, 1);.     
d550: 20 20 20 20 20 6a 6d 70 33 20 3d 20 73 71 6c 69       jmp3 = sqli
d560: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
d570: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56   OP_IfPos, 1); V
d580: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
d590: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d5a0: 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f  3VdbeAddOp0(v, O
d5b0: 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20  P_Halt);.       
d5c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
d5d0: 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b  mpHere(v, jmp2);
d5e0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d5f0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
d600: 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20  , jmp3);.       
d610: 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61   }.        /* Va
d620: 6c 69 64 61 74 65 20 69 6e 64 65 78 20 65 6e 74  lidate index ent
d630: 72 69 65 73 20 66 6f 72 20 74 68 65 20 63 75 72  ries for the cur
d640: 72 65 6e 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20  rent row */.    
d650: 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
d660: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
d670: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
d680: 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
d690: 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32          int jmp2
d6a0: 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d  , jmp3, jmp4, jm
d6b0: 70 35 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  p5;.          in
d6c0: 74 20 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69 74  t ckUniq = sqlit
d6d0: 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28  e3VdbeMakeLabel(
d6e0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  v);.          if
d6f0: 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f  ( pPk==pIdx ) co
d700: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
d710: 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65    r1 = sqlite3Ge
d720: 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 70  nerateIndexKey(p
d730: 50 61 72 73 65 2c 20 70 49 64 78 2c 20 69 44 61  Parse, pIdx, iDa
d740: 74 61 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a 6d  taCur, 0, 0, &jm
d750: 70 33 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  p3,.            
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d770: 20 20 20 20 20 20 20 20 20 20 20 70 50 72 69 6f             pPrio
d780: 72 2c 20 72 31 29 3b 0a 20 20 20 20 20 20 20 20  r, r1);.        
d790: 20 20 70 50 72 69 6f 72 20 3d 20 70 49 64 78 3b    pPrior = pIdx;
d7a0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d7b0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d7c0: 4f 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20  OP_AddImm, 8+j, 
d7d0: 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e  1);  /* incremen
d7e0: 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f  t entry count */
d7f0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 65  .          /* Ve
d800: 72 69 66 79 20 74 68 61 74 20 61 6e 20 69 6e 64  rify that an ind
d810: 65 78 20 65 6e 74 72 79 20 65 78 69 73 74 73 20  ex entry exists 
d820: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
d830: 74 61 62 6c 65 20 72 6f 77 20 2a 2f 0a 20 20 20  table row */.   
d840: 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71         jmp2 = sq
d850: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49  lite3VdbeAddOp4I
d860: 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20  nt(v, OP_Found, 
d870: 69 49 64 78 43 75 72 2b 6a 2c 20 63 6b 55 6e 69  iIdxCur+j, ckUni
d880: 71 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20  q, r1,.         
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64               pId
d8b0: 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64 62  x->nColumn); Vdb
d8c0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d8d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d8e0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d8f0: 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20  AddImm, 1, -1); 
d900: 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72  /* Decrement err
d910: 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20  or limit */.    
d920: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d930: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
d940: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20  ring8, 0, 3, 0, 
d950: 22 72 6f 77 20 22 2c 20 50 34 5f 53 54 41 54 49  "row ", P4_STATI
d960: 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  C);.          sq
d970: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
d980: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c  v, OP_Concat, 7,
d990: 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   3, 3);.        
d9a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d9b0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
d9c0: 38 2c 20 30 2c 20 34 2c 20 30 2c 20 0a 20 20 20  8, 0, 4, 0, .   
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9e0: 20 20 20 20 20 20 20 20 20 22 20 6d 69 73 73 69           " missi
d9f0: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22 2c  ng from index ",
da00: 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
da10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
da20: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
da30: 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b  oncat, 4, 3, 3);
da40: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 35 20  .          jmp5 
da50: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
da60: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
da70: 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20  8, 0, 4, 0,.    
da80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
daa0: 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54  Idx->zName, P4_T
dab0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
dac0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
dad0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
dae0: 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20  cat, 4, 3, 3);. 
daf0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
db00: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
db10: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31  _ResultRow, 3, 1
db20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
db30: 34 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  4 = sqlite3VdbeA
db40: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
db50: 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72  s, 1); VdbeCover
db60: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
db70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
db80: 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b  Op0(v, OP_Halt);
db90: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
dba0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
dbb0: 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20  , jmp2);.       
dbc0: 20 20 20 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45     /* For UNIQUE
dbd0: 20 69 6e 64 65 78 65 73 2c 20 76 65 72 69 66 79   indexes, verify
dbe0: 20 74 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65   that only one e
dbf0: 6e 74 72 79 20 65 78 69 73 74 73 20 77 69 74 68  ntry exists with
dc00: 20 74 68 65 0a 20 20 20 20 20 20 20 20 20 20 2a   the.          *
dc10: 2a 20 63 75 72 72 65 6e 74 20 6b 65 79 2e 20 20  * current key.  
dc20: 54 68 65 20 65 6e 74 72 79 20 69 73 20 75 6e 69  The entry is uni
dc30: 71 75 65 20 69 66 20 28 31 29 20 61 6e 79 20 63  que if (1) any c
dc40: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20  olumn is NULL.  
dc50: 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 28 32          ** or (2
dc60: 29 20 74 68 65 20 6e 65 78 74 20 65 6e 74 72 79  ) the next entry
dc70: 20 68 61 73 20 61 20 64 69 66 66 65 72 65 6e 74   has a different
dc80: 20 6b 65 79 20 2a 2f 0a 20 20 20 20 20 20 20 20   key */.        
dc90: 20 20 69 66 28 20 49 73 55 6e 69 71 75 65 49 6e    if( IsUniqueIn
dca0: 64 65 78 28 70 49 64 78 29 20 29 7b 0a 20 20 20  dex(pIdx) ){.   
dcb0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 75 6e 69           int uni
dcc0: 71 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62  qOk = sqlite3Vdb
dcd0: 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
dce0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a             int j
dcf0: 6d 70 36 3b 0a 20 20 20 20 20 20 20 20 20 20 20  mp6;.           
dd00: 20 69 6e 74 20 6b 6b 3b 0a 20 20 20 20 20 20 20   int kk;.       
dd10: 20 20 20 20 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b       for(kk=0; k
dd20: 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b  k<pIdx->nKeyCol;
dd30: 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   kk++){.        
dd40: 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d        int iCol =
dd50: 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b   pIdx->aiColumn[
dd60: 6b 6b 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  kk];.           
dd70: 20 20 20 61 73 73 65 72 74 28 20 69 43 6f 6c 3e     assert( iCol>
dd80: 3d 30 20 26 26 20 69 43 6f 6c 3c 70 54 61 62 2d  =0 && iCol<pTab-
dd90: 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20  >nCol );.       
dda0: 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d         if( pTab-
ddb0: 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e  >aCol[iCol].notN
ddc0: 75 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ull ) continue;.
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
dde0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
ddf0: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31  v, OP_IsNull, r1
de00: 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  +kk, uniqOk);.  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65              Vdbe
de20: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
de30: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
de40: 20 20 20 20 20 20 20 6a 6d 70 36 20 3d 20 73 71         jmp6 = sq
de50: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
de60: 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78  v, OP_Next, iIdx
de70: 43 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65  Cur+j); VdbeCove
de80: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
de90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
dea0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74  AddOp2(v, OP_Got
deb0: 6f 2c 20 30 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20  o, 0, uniqOk);. 
dec0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ded0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
dee0: 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20 20  , jmp6);.       
def0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
df00: 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f  AddOp4Int(v, OP_
df10: 49 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a  IdxGT, iIdxCur+j
df20: 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20  , uniqOk, r1,.  
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
df50: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56  Idx->nKeyCol); V
df60: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
df70: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
df80: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
df90: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
dfa0: 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
dfb0: 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
dfd0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
dfe0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
dff0: 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  3, 0,.          
e000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e010: 20 20 20 20 22 6e 6f 6e 2d 75 6e 69 71 75 65 20      "non-unique 
e020: 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20 22  entry in index "
e030: 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
e040: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e050: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e060: 50 5f 47 6f 74 6f 2c 20 30 2c 20 6a 6d 70 35 29  P_Goto, 0, jmp5)
e070: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
e080: 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65  lite3VdbeResolve
e090: 4c 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f 6b 29  Label(v, uniqOk)
e0a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
e0b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e0c0: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
e0d0: 6d 70 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp4);.          
e0e0: 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
e0f0: 72 74 49 64 78 4c 61 62 65 6c 28 70 50 61 72 73  rtIdxLabel(pPars
e100: 65 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20  e, jmp3);.      
e110: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
e120: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e130: 20 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74 61 43   OP_Next, iDataC
e140: 75 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64  ur, loopTop); Vd
e150: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
e160: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e170: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f  beJumpHere(v, lo
e180: 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65  opTop-1);.#ifnde
e190: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
e1a0: 52 45 45 43 4f 55 4e 54 0a 20 20 20 20 20 20 20  REECOUNT.       
e1b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e1c0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
e1d0: 2c 20 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20  , 0, 2, 0, .    
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1f0: 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   "wrong # of ent
e200: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22 2c  ries in index ",
e210: 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
e220: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
e230: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
e240: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
e250: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
e260: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b           if( pPk
e270: 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75  ==pIdx ) continu
e280: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  e;.          add
e290: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  r = sqlite3VdbeC
e2a0: 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20  urrentAddr(v);. 
e2b0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e2c0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e2d0: 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b  _IfPos, 1, addr+
e2e0: 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  2); VdbeCoverage
e2f0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
e300: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
e310: 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
e320: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  0);.          sq
e330: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
e340: 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64  v, OP_Count, iId
e350: 78 43 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20  xCur+j, 3);.    
e360: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e370: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71  eAddOp3(v, OP_Eq
e380: 2c 20 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33  , 8+j, addr+8, 3
e390: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
e3a0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
e3b0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
e3c0: 35 28 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  5(v, SQLITE_NOTN
e3d0: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ULL);.          
e3e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e3f0: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
e400: 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20  1, -1);.        
e410: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e420: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
e430: 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 49 64 78  8, 0, 3, 0, pIdx
e440: 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e  ->zName, P4_TRAN
e450: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20  SIENT);.        
e460: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e470: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
e480: 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20  , 3, 2, 7);.    
e490: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e4a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
e4b0: 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a  sultRow, 7, 1);.
e4c0: 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66          }.#endif
e4d0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
e4e0: 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20  BTREECOUNT */.  
e4f0: 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20      } .    }.   
e500: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
e510: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
e520: 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64  ArraySize(endCod
e530: 65 29 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e  e), endCode, iLn
e540: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
e550: 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64  beChangeP3(v, ad
e560: 64 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20  dr, -mxErr);.   
e570: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
e580: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
e590: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
e5a0: 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 31  angeP4(v, addr+1
e5b0: 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49  , "ok", P4_STATI
e5c0: 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  C);.  }.  break;
e5d0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
e5e0: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
e5f0: 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64  _CHECK */..#ifnd
e600: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
e610: 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  TF16.  /*.  **  
e620: 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67   PRAGMA encoding
e630: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65  .  **   PRAGMA e
e640: 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38  ncoding = "utf-8
e650: 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d  "|"utf-16"|"utf-
e660: 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22  16le"|"utf-16be"
e670: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74  .  **.  ** In it
e680: 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68  s first form, th
e690: 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e  is pragma return
e6a0: 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  s the encoding o
e6b0: 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20  f the main.  ** 
e6c0: 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
e6d0: 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74   database is not
e6e0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74   initialized, it
e6f0: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
e700: 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  now..  **.  ** T
e710: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f  he second form o
e720: 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73  f this pragma is
e730: 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20   a no-op if the 
e740: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
e750: 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20  le.  ** has not 
e760: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69  already been ini
e770: 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69  tialized. In thi
e780: 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74  s case it sets t
e790: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
e7a0: 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69  encoding that wi
e7b0: 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ll be used for t
e7c0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
e7d0: 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66   file if a new f
e7e0: 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61  ile.  ** is crea
e7f0: 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74  ted. If an exist
e800: 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73  ing main databas
e810: 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64  e file is opened
e820: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
e830: 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
e840: 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78  oding for the ex
e850: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
e860: 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20  is used..  ** . 
e870: 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73   ** In all cases
e880: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63   new databases c
e890: 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65  reated using the
e8a0: 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20   ATTACH command 
e8b0: 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64  are.  ** created
e8c0: 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
e8d0: 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
e8e0: 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61  coding as the ma
e8f0: 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a  in database. If.
e900: 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61    ** the main da
e910: 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62  tabase has not b
e920: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
e930: 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77  and/or created w
e940: 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20  hen ATTACH.  ** 
e950: 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69  is executed, thi
e960: 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65  s is done before
e970: 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72   the ATTACH oper
e980: 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ation..  **.  **
e990: 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66   In the second f
e9a0: 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20  orm this pragma 
e9b0: 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e  sets the text en
e9c0: 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65  coding to be use
e9d0: 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61  d in.  ** new da
e9e0: 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65  tabase files cre
e9f0: 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20  ated using this 
ea00: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
ea10: 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a   It is only.  **
ea20: 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b   useful if invok
ea30: 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  ed immediately a
ea40: 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61  fter the main da
ea50: 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20  tabase i.  */.  
ea60: 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43  case PragTyp_ENC
ea70: 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61  ODING: {.    sta
ea80: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
ea90: 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20   EncName {.     
eaa0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20   char *zName;.  
eab0: 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20      u8 enc;.    
eac0: 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  } encnames[] = {
ead0: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c  .      { "UTF8",
eae0: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
eaf0: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
eb00: 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53   { "UTF-8",    S
eb10: 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20  QLITE_UTF8      
eb20: 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
eb30: 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a   element [1] */.
eb40: 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c        { "UTF-16l
eb50: 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  e", SQLITE_UTF16
eb60: 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75  LE     },  /* Mu
eb70: 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32  st be element [2
eb80: 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
eb90: 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f  F-16be", SQLITE_
eba0: 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20  UTF16BE     },  
ebb0: 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
ebc0: 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [3] */.      
ebd0: 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51  { "UTF16le",  SQ
ebe0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20  LITE_UTF16LE    
ebf0: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
ec00: 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55  16be",  SQLITE_U
ec10: 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20  TF16BE     },.  
ec20: 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20      { "UTF-16", 
ec30: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
ec40: 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54       }, /* SQLIT
ec50: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f  E_UTF16NATIVE */
ec60: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 22  .      { "UTF16"
ec70: 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20  ,    0          
ec80: 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51          }, /* SQ
ec90: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
eca0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30   */.      { 0, 0
ecb0: 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f   }.    };.    co
ecc0: 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61  nst struct EncNa
ecd0: 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66  me *pEnc;.    if
ece0: 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20  ( !zRight ){    
ecf0: 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  /* "PRAGMA encod
ed00: 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66  ing" */.      if
ed10: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
ed20: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
ed30: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
ed40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ed50: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
ed60: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
ed70: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
ed80: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
ed90: 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51  , "encoding", SQ
eda0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
edb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
edc0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp2(v, OP_Stri
edd0: 6e 67 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20  ng8, 0, 1);.    
ede0: 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
edf0: 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e  es[SQLITE_UTF8].
ee00: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
ee10: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
ee20: 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54  ( encnames[SQLIT
ee30: 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d  E_UTF16LE].enc==
ee40: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29  SQLITE_UTF16LE )
ee50: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
ee60: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
ee70: 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51  UTF16BE].enc==SQ
ee80: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
ee90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
eea0: 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c  eChangeP4(v, -1,
eeb0: 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50   encnames[ENC(pP
eec0: 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65  arse->db)].zName
eed0: 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
eee0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
eef0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
ef00: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
ef10: 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20    }else{        
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef30: 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  /* "PRAGMA encod
ef40: 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20  ing = XXX" */.  
ef50: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e      /* Only chan
ef60: 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
ef70: 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68  sqlite.enc if th
ef80: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
ef90: 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a  e is not.      *
efa0: 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49  * initialized. I
efb0: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
efc0: 61 73 65 20 65 78 69 73 74 73 2c 20 74 68 65 20  ase exists, the 
efd0: 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76  new sqlite.enc v
efe0: 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69  alue.      ** wi
eff0: 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ll be overwritte
f000: 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d  n when the schem
f010: 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64  a is next loaded
f020: 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74  . If it does not
f030: 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64  .      ** alread
f040: 79 20 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c  y exists, it wil
f050: 6c 20 62 65 20 63 72 65 61 74 65 64 20 74 6f 20  l be created to 
f060: 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f  use the new enco
f070: 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20  ding value..    
f080: 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a    */.      if( .
f090: 20 20 20 20 20 20 20 20 21 28 44 62 48 61 73 50          !(DbHasP
f0a0: 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44  roperty(db, 0, D
f0b0: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29  B_SchemaLoaded))
f0c0: 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48   || .        DbH
f0d0: 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30  asProperty(db, 0
f0e0: 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20  , DB_Empty) .   
f0f0: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f     ){.        fo
f100: 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73  r(pEnc=&encnames
f110: 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  [0]; pEnc->zName
f120: 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20  ; pEnc++){.     
f130: 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69       if( 0==sqli
f140: 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
f150: 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20  t, pEnc->zName) 
f160: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ){.            S
f170: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20  CHEMA_ENC(db) = 
f180: 45 4e 43 28 64 62 29 20 3d 0a 20 20 20 20 20 20  ENC(db) =.      
f190: 20 20 20 20 20 20 20 20 20 20 70 45 6e 63 2d 3e            pEnc->
f1a0: 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20  enc ? pEnc->enc 
f1b0: 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  : SQLITE_UTF16NA
f1c0: 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20  TIVE;.          
f1d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
f1e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
f1f0: 20 20 20 20 20 20 20 69 66 28 20 21 70 45 6e 63         if( !pEnc
f200: 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20  ->zName ){.     
f210: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
f220: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e  rMsg(pParse, "un
f230: 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69  supported encodi
f240: 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29  ng: %s", zRight)
f250: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
f260: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
f270: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
f280: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
f290: 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  16 */..#ifndef S
f2a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
f2b0: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
f2c0: 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  S.  /*.  **   PR
f2d0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
f2e0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20  schema_version. 
f2f0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
f300: 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76  tabase.]schema_v
f310: 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65  ersion = <intege
f320: 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
f330: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
f340: 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20  ]user_version.  
f350: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
f360: 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73  abase.]user_vers
f370: 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  ion = <integer>.
f380: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
f390: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 66 72  MA [database.]fr
f3a0: 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c  eelist_count = <
f3b0: 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
f3c0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
f3d0: 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69  abase.]applicati
f3e0: 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41  on_id.  **   PRA
f3f0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61  GMA [database.]a
f400: 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20  pplication_id = 
f410: 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
f420: 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73   ** The pragma's
f430: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
f440: 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  and user_version
f450: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 65 74   are used to set
f460: 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65   or get.  ** the
f470: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63   value of the sc
f480: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64  hema-version and
f490: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72   user-version, r
f4a0: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74  espectively. Bot
f4b0: 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  h.  ** the schem
f4c0: 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68  a-version and th
f4d0: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61  e user-version a
f4e0: 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64  re 32-bit signed
f4f0: 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73   integers.  ** s
f500: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
f510: 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20  abase header..  
f520: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65  **.  ** The sche
f530: 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75  ma-cookie is usu
f540: 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75  ally only manipu
f550: 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79  lated internally
f560: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20   by SQLite. It. 
f570: 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74   ** is increment
f580: 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65  ed by SQLite whe
f590: 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
f5a0: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64  se schema is mod
f5b0: 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63  ified (by.  ** c
f5c0: 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70  reating or dropp
f5d0: 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69  ing a table or i
f5e0: 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d  ndex). The schem
f5f0: 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65  a version is use
f600: 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65  d by.  ** SQLite
f610: 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65   each time a que
f620: 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74  ry is executed t
f630: 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
f640: 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65  e internal cache
f650: 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68  .  ** of the sch
f660: 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f  ema used when co
f670: 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20  mpiling the SQL 
f680: 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68  query matches th
f690: 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a  e schema of.  **
f6a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 67   the database ag
f6b0: 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20  ainst which the 
f6c0: 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69  compiled query i
f6d0: 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75  s actually execu
f6e0: 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72  ted..  ** Subver
f6f0: 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e  ting this mechan
f700: 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52  ism by using "PR
f710: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
f720: 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20  ion" to modify. 
f730: 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
f740: 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74  ersion is potent
f750: 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20  ially dangerous 
f760: 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20  and may lead to 
f770: 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61  program.  ** cra
f780: 73 68 65 73 20 6f 72 20 64 61 74 61 62 61 73 65  shes or database
f790: 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65   corruption. Use
f7a0: 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20   with caution!. 
f7b0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65   **.  ** The use
f7c0: 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74  r-version is not
f7d0: 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
f7e0: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d   by SQLite. It m
f7f0: 61 79 20 62 65 20 75 73 65 64 20 62 79 0a 20 20  ay be used by.  
f800: 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ** applications 
f810: 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e  for any purpose.
f820: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
f830: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
f840: 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f  E: {.    int iCo
f850: 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e  okie = pPragma->
f860: 69 41 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20  iArg;  /* Which 
f870: 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f  cookie to read o
f880: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73  r write */.    s
f890: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
f8a0: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
f8b0: 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 28   if( zRight && (
f8c0: 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c  pPragma->mPragFl
f8d0: 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65  ag & PragFlag_Re
f8e0: 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20  adOnly)==0 ){.  
f8f0: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65      /* Write the
f900: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69   specified cooki
f910: 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  e value */.     
f920: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
f930: 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b  beOpList setCook
f940: 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
f950: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
f960: 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d  n,    0,  1,  0}
f970: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
f980: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
f990: 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c  r,        0,  1,
f9a0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
f9b0: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65  .        { OP_Se
f9c0: 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  tCookie,      0,
f9d0: 20 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20    0,  1},    /* 
f9e0: 32 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20  2 */.      };.  
f9f0: 20 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73      int addr = s
fa00: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
fa10: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
fa20: 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74  (setCookie), set
fa30: 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20  Cookie, 0);.    
fa40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
fa50: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69  ngeP1(v, addr, i
fa60: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
fa70: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
fa80: 2c 20 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65  , addr+1, sqlite
fa90: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
faa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fab0: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
fac0: 72 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+2, iDb);.     
fad0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
fae0: 67 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20  geP2(v, addr+2, 
faf0: 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65  iCookie);.    }e
fb00: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65  lse{.      /* Re
fb10: 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ad the specified
fb20: 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f   cookie value */
fb30: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
fb40: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72  nst VdbeOpList r
fb50: 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a  eadCookie[] = {.
fb60: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
fb70: 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c  nsaction,     0,
fb80: 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    0,  0},    /* 
fb90: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  0 */.        { O
fba0: 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20  P_ReadCookie,   
fbb0: 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
fbc0: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
fbd0: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
fbe0: 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20  ,       1,  1,  
fbf0: 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  0}.      };.    
fc00: 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c    int addr = sql
fc10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
fc20: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72  t(v, ArraySize(r
fc30: 65 61 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64  eadCookie), read
fc40: 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20  Cookie, 0);.    
fc50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
fc60: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69  ngeP1(v, addr, i
fc70: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
fc80: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
fc90: 2c 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a  , addr+1, iDb);.
fca0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fcb0: 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64  eChangeP3(v, add
fcc0: 72 2b 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20  r+1, iCookie);. 
fcd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fce0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
fcf0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
fd00: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
fd10: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
fd20: 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f  , zLeft, SQLITE_
fd30: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
fd40: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
fd50: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
fd60: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
fd70: 49 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  ION_PRAGMAS */..
fd80: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
fd90: 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
fda0: 4e 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a  N_DIAGS.  /*.  *
fdb0: 2a 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69  *   PRAGMA compi
fdc0: 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a  le_options.  **.
fdd0: 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20    ** Return the 
fde0: 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d  names of all com
fdf0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
fe00: 73 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 62  s used in this b
fe10: 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f  uild,.  ** one o
fe20: 70 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20  ption per row.. 
fe30: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
fe40: 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  yp_COMPILE_OPTIO
fe50: 4e 53 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20  NS: {.    int i 
fe60: 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  = 0;.    const c
fe70: 68 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 73  har *zOpt;.    s
fe80: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
fe90: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
fea0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31  pParse->nMem = 1
feb0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
fec0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
fed0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
fee0: 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22  "compile_option"
fef0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
ff00: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f  ;.    while( (zO
ff10: 70 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d  pt = sqlite3_com
ff20: 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69  pileoption_get(i
ff30: 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ++))!=0 ){.     
ff40: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ff50: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
ff60: 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74 2c  , 0, 1, 0, zOpt,
ff70: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
ff80: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
ff90: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
ffa0: 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   1);.    }.  }. 
ffb0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
ffc0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  * SQLITE_OMIT_CO
ffd0: 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
ffe0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
fff0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
10000 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
10010 20 5b 64 61 74 61 62 61 73 65 2e 5d 77 61 6c 5f   [database.]wal_
10020 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73  checkpoint = pas
10030 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72  sive|full|restar
10040 74 7c 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a 0a  t|truncate.  **.
10050 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20    ** Checkpoint 
10060 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
10070 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
10080 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54  p_WAL_CHECKPOINT
10090 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20  : {.    int iBt 
100a0 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53  = (pId2->z?iDb:S
100b0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
100c0 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f  ED);.    int eMo
100d0 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
100e0 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a  KPOINT_PASSIVE;.
100f0 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
10100 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
10110 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
10120 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b  t, "full")==0 ){
10130 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
10140 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
10150 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d  NT_FULL;.      }
10160 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
10170 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
10180 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b  "restart")==0 ){
10190 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
101a0 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
101b0 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20  NT_RESTART;.    
101c0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
101d0 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
101e0 74 2c 20 22 74 72 75 6e 63 61 74 65 22 29 3d 3d  t, "truncate")==
101f0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
10200 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
10210 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 3b  KPOINT_TRUNCATE;
10220 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
10230 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
10240 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a  tNumCols(v, 3);.
10250 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
10260 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 3;.    sqlite
10270 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
10280 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
10290 4d 45 2c 20 22 62 75 73 79 22 2c 20 53 51 4c 49  ME, "busy", SQLI
102a0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
102b0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
102c0 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
102d0 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c  AME_NAME, "log",
102e0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
102f0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10300 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
10310 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
10320 63 68 65 63 6b 70 6f 69 6e 74 65 64 22 2c 20 53  checkpointed", S
10330 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a  QLITE_STATIC);..
10340 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10350 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65 63  ddOp3(v, OP_Chec
10360 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f  kpoint, iBt, eMo
10370 64 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  de, 1);.    sqli
10380 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10390 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
103a0 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 3);.  }.  brea
103b0 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  k;..  /*.  **   
103c0 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63  PRAGMA wal_autoc
103d0 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20  heckpoint.  **  
103e0 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f   PRAGMA wal_auto
103f0 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20  checkpoint = N. 
10400 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75   **.  ** Configu
10410 72 65 20 61 20 64 61 74 61 62 61 73 65 20 63 6f  re a database co
10420 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f  nnection to auto
10430 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b 70  matically checkp
10440 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73 65 0a  oint a database.
10450 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75 6d    ** after accum
10460 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65 73  ulating N frames
10470 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20   in the log. Or 
10480 71 75 65 72 79 20 66 6f 72 20 74 68 65 20 63 75  query for the cu
10490 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a  rrent value.  **
104a0 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61   of N..  */.  ca
104b0 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41  se PragTyp_WAL_A
104c0 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b  UTOCHECKPOINT: {
104d0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
104e0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
104f0 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f  _wal_autocheckpo
10500 69 6e 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41  int(db, sqlite3A
10510 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
10520 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
10530 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
10540 22 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f  "wal_autocheckpo
10550 69 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62  int", .       db
10560 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d  ->xWalCallback==
10570 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
10580 74 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20  tHook ? .       
10590 20 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54      SQLITE_PTR_T
105a0 4f 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72  O_INT(db->pWalAr
105b0 67 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62  g) : 0);.  }.  b
105c0 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
105d0 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
105e0 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20  shrink_memory.  
105f0 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  **.  ** IMPLEMEN
10600 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34  TATION-OF: R-234
10610 34 35 2d 34 36 31 30 39 20 54 68 69 73 20 70 72  45-46109 This pr
10620 61 67 6d 61 20 63 61 75 73 65 73 20 74 68 65 20  agma causes the 
10630 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f  database.  ** co
10640 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63  nnection on whic
10650 68 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20  h it is invoked 
10660 74 6f 20 66 72 65 65 20 75 70 20 61 73 20 6d 75  to free up as mu
10670 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a  ch memory as it.
10680 20 20 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c    ** can, by cal
10690 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f  ling sqlite3_db_
106a0 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29  release_memory()
106b0 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
106c0 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d  agTyp_SHRINK_MEM
106d0 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  ORY: {.    sqlit
106e0 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
106f0 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72  mory(db);.    br
10700 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
10710 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73   **   PRAGMA bus
10720 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20  y_timeout.  **  
10730 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d   PRAGMA busy_tim
10740 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  eout = N.  **.  
10750 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f  ** Call sqlite3_
10760 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
10770 20 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65   N).  Return the
10780 20 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74   current timeout
10790 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f   value.  ** if o
107a0 6e 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e  ne is set.  If n
107b0 6f 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f  o busy handler o
107c0 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75  r a different bu
107d0 73 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65  sy handler is se
107e0 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73  t.  ** then 0 is
107f0 20 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74   returned.  Sett
10800 69 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d  ing the busy_tim
10810 65 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67  eout to 0 or neg
10820 61 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62  ative.  ** disab
10830 6c 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e  les the timeout.
10840 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50  .  */.  /*case P
10850 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
10860 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b  OUT*/ default: {
10870 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
10880 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d  agma->ePragTyp==
10890 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
108a0 45 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20  EOUT );.    if( 
108b0 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
108c0 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
108d0 65 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33  eout(db, sqlite3
108e0 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
108f0 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
10900 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
10910 20 22 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d   "timeout",  db-
10920 3e 62 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20  >busyTimeout);. 
10930 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
10940 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
10950 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  A soft_heap_limi
10960 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
10970 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20  soft_heap_limit 
10980 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d  = N.  **.  ** IM
10990 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
109a0 20 52 2d 32 36 33 34 33 2d 34 35 39 33 30 20 54   R-26343-45930 T
109b0 68 69 73 20 70 72 61 67 6d 61 20 69 6e 76 6f 6b  his pragma invok
109c0 65 73 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  es the.  ** sqli
109d0 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
109e0 6d 69 74 36 34 28 29 20 69 6e 74 65 72 66 61 63  mit64() interfac
109f0 65 20 77 69 74 68 20 74 68 65 20 61 72 67 75 6d  e with the argum
10a00 65 6e 74 20 4e 2c 20 69 66 20 4e 20 69 73 0a 20  ent N, if N is. 
10a10 20 2a 2a 20 73 70 65 63 69 66 69 65 64 20 61 6e   ** specified an
10a20 64 20 69 73 20 61 20 6e 6f 6e 2d 6e 65 67 61 74  d is a non-negat
10a30 69 76 65 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a  ive integer..  *
10a40 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
10a50 2d 4f 46 3a 20 52 2d 36 34 34 35 31 2d 30 37 31  -OF: R-64451-071
10a60 36 33 20 54 68 65 20 73 6f 66 74 5f 68 65 61 70  63 The soft_heap
10a70 5f 6c 69 6d 69 74 20 70 72 61 67 6d 61 20 61 6c  _limit pragma al
10a80 77 61 79 73 0a 20 20 2a 2a 20 72 65 74 75 72 6e  ways.  ** return
10a90 73 20 74 68 65 20 73 61 6d 65 20 69 6e 74 65 67  s the same integ
10aa0 65 72 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  er that would be
10ab0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
10ac0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f  .  ** sqlite3_so
10ad0 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
10ae0 2d 31 29 20 43 2d 6c 61 6e 67 75 61 67 65 20 66  -1) C-language f
10af0 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20  unction..  */.  
10b00 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 4f 46  case PragTyp_SOF
10b10 54 5f 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a  T_HEAP_LIMIT: {.
10b20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
10b30 34 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  4 N;.    if( zRi
10b40 67 68 74 20 26 26 20 73 71 6c 69 74 65 33 44 65  ght && sqlite3De
10b50 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67  cOrHexToI64(zRig
10b60 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f  ht, &N)==SQLITE_
10b70 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  OK ){.      sqli
10b80 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
10b90 6d 69 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d 0a  mit64(N);.    }.
10ba0 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
10bb0 49 6e 74 28 70 50 61 72 73 65 2c 20 22 73 6f 66  Int(pParse, "sof
10bc0 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20  t_heap_limit",  
10bd0 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
10be0 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a  p_limit64(-1));.
10bf0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
10c00 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
10c10 4d 41 20 74 68 72 65 61 64 73 0a 20 20 2a 2a 20  MA threads.  ** 
10c20 20 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73    PRAGMA threads
10c30 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
10c40 6f 6e 66 69 67 75 72 65 20 74 68 65 20 6d 61 78  onfigure the max
10c50 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 77  imum number of w
10c60 6f 72 6b 65 72 20 74 68 72 65 61 64 73 2e 20 20  orker threads.  
10c70 52 65 74 75 72 6e 20 74 68 65 20 6e 65 77 0a 20  Return the new. 
10c80 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68 69   ** maximum, whi
10c90 63 68 20 6d 69 67 68 74 20 62 65 20 6c 65 73 73  ch might be less
10ca0 20 74 68 61 6e 20 72 65 71 75 65 73 74 65 64 2e   than requested.
10cb0 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
10cc0 67 54 79 70 5f 54 48 52 45 41 44 53 3a 20 7b 0a  gTyp_THREADS: {.
10cd0 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
10ce0 34 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  4 N;.    if( zRi
10cf0 67 68 74 0a 20 20 20 20 20 26 26 20 73 71 6c 69  ght.     && sqli
10d00 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
10d10 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51  (zRight, &N)==SQ
10d20 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26 20  LITE_OK.     && 
10d30 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  N>=0.    ){.    
10d40 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28    sqlite3_limit(
10d50 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54  db, SQLITE_LIMIT
10d60 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
10d70 20 28 69 6e 74 29 28 4e 26 30 78 37 66 66 66 66   (int)(N&0x7ffff
10d80 66 66 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  fff));.    }.   
10d90 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
10da0 28 70 50 61 72 73 65 2c 20 22 74 68 72 65 61 64  (pParse, "thread
10db0 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s",.            
10dc0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
10dd0 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45  limit(db, SQLITE
10de0 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
10df0 52 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20  READS, -1));.   
10e00 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
10e10 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
10e20 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
10e30 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
10e40 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20   /*.  ** Report 
10e50 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
10e60 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66  e of file logs f
10e70 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  or all databases
10e80 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
10e90 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53  gTyp_LOCK_STATUS
10ea0 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
10eb0 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
10ec0 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20   azLockName[] = 
10ed0 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65  {.      "unlocke
10ee0 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72  d", "shared", "r
10ef0 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69  eserved", "pendi
10f00 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22  ng", "exclusive"
10f10 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
10f20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  i;.    sqlite3Vd
10f30 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
10f40 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  2);.    pParse->
10f50 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71  nMem = 2;.    sq
10f60 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
10f70 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
10f80 45 5f 4e 41 4d 45 2c 20 22 64 61 74 61 62 61 73  E_NAME, "databas
10f90 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
10fa0 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
10fb0 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
10fc0 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
10fd0 2c 20 22 73 74 61 74 75 73 22 2c 20 53 51 4c 49  , "status", SQLI
10fe0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
10ff0 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
11000 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
11010 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20  Btree *pBt;.    
11020 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
11030 74 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22  tate = "unknown"
11040 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20  ;.      int j;. 
11050 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
11060 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20 63  [i].zName==0 ) c
11070 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
11080 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
11090 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
110a0 30 2c 20 31 2c 20 30 2c 20 64 62 2d 3e 61 44 62  0, 1, 0, db->aDb
110b0 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54  [i].zName, P4_ST
110c0 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 42 74  ATIC);.      pBt
110d0 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42   = db->aDb[i].pB
110e0 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70 42 74  t;.      if( pBt
110f0 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 42 74  ==0 || sqlite3Bt
11100 72 65 65 50 61 67 65 72 28 70 42 74 29 3d 3d 30  reePager(pBt)==0
11110 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 74 61   ){.        zSta
11120 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a 20  te = "closed";. 
11130 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
11140 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
11150 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d 3e  rol(db, i ? db->
11160 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30  aDb[i].zName : 0
11170 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11190 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46          SQLITE_F
111a0 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c 20  CNTL_LOCKSTATE, 
111b0 26 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  &j)==SQLITE_OK )
111c0 7b 0a 20 20 20 20 20 20 20 20 20 7a 53 74 61 74  {.         zStat
111d0 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a  e = azLockName[j
111e0 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  ];.      }.     
111f0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11200 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
11210 2c 20 30 2c 20 32 2c 20 30 2c 20 7a 53 74 61 74  , 0, 2, 0, zStat
11220 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  e, P4_STATIC);. 
11230 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11240 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
11250 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20  ultRow, 1, 2);. 
11260 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
11270 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64    }.#endif..#ifd
11280 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ef SQLITE_HAS_CO
11290 44 45 43 0a 20 20 63 61 73 65 20 50 72 61 67 54  DEC.  case PragT
112a0 79 70 5f 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66  yp_KEY: {.    if
112b0 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74  ( zRight ) sqlit
112c0 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  e3_key_v2(db, zD
112d0 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74  b, zRight, sqlit
112e0 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
112f0 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  t));.    break;.
11300 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54    }.  case PragT
11310 79 70 5f 52 45 4b 45 59 3a 20 7b 0a 20 20 20 20  yp_REKEY: {.    
11320 69 66 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c  if( zRight ) sql
11330 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62  ite3_rekey_v2(db
11340 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73  , zDb, zRight, s
11350 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
11360 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65  Right));.    bre
11370 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50  ak;.  }.  case P
11380 72 61 67 54 79 70 5f 48 45 58 4b 45 59 3a 20 7b  ragTyp_HEXKEY: {
11390 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
113a0 29 7b 0a 20 20 20 20 20 20 75 38 20 69 42 79 74  ){.      u8 iByt
113b0 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a  e;.      int i;.
113c0 20 20 20 20 20 20 63 68 61 72 20 7a 4b 65 79 5b        char zKey[
113d0 34 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  40];.      for(i
113e0 3d 30 2c 20 69 42 79 74 65 3d 30 3b 20 69 3c 73  =0, iByte=0; i<s
113f0 69 7a 65 6f 66 28 7a 4b 65 79 29 2a 32 20 26 26  izeof(zKey)*2 &&
11400 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
11410 28 7a 52 69 67 68 74 5b 69 5d 29 3b 20 69 2b 2b  (zRight[i]); i++
11420 29 7b 0a 20 20 20 20 20 20 20 20 69 42 79 74 65  ){.        iByte
11430 20 3d 20 28 69 42 79 74 65 3c 3c 34 29 20 2b 20   = (iByte<<4) + 
11440 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
11450 7a 52 69 67 68 74 5b 69 5d 29 3b 0a 20 20 20 20  zRight[i]);.    
11460 20 20 20 20 69 66 28 20 28 69 26 31 29 21 3d 30      if( (i&1)!=0
11470 20 29 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20 69   ) zKey[i/2] = i
11480 42 79 74 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Byte;.      }.  
11490 20 20 20 20 69 66 28 20 28 7a 4c 65 66 74 5b 33      if( (zLeft[3
114a0 5d 20 26 20 30 78 66 29 3d 3d 30 78 62 20 29 7b  ] & 0xf)==0xb ){
114b0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
114c0 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  _key_v2(db, zDb,
114d0 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20   zKey, i/2);.   
114e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
114f0 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f    sqlite3_rekey_
11500 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79  v2(db, zDb, zKey
11510 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 0a  , i/2);.      }.
11520 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
11530 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20  .  }.#endif.#if 
11540 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
11550 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66  AS_CODEC) || def
11560 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
11570 4c 45 5f 43 45 52 4f 44 29 0a 20 20 63 61 73 65  LE_CEROD).  case
11580 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41 54   PragTyp_ACTIVAT
11590 45 5f 45 58 54 45 4e 53 49 4f 4e 53 3a 20 69 66  E_EXTENSIONS: if
115a0 28 20 7a 52 69 67 68 74 20 29 7b 0a 23 69 66 64  ( zRight ){.#ifd
115b0 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ef SQLITE_HAS_CO
115c0 44 45 43 0a 20 20 20 20 69 66 28 20 73 71 6c 69  DEC.    if( sqli
115d0 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67  te3StrNICmp(zRig
115e0 68 74 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d 3d  ht, "see-", 4)==
115f0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
11600 65 33 5f 61 63 74 69 76 61 74 65 5f 73 65 65 28  e3_activate_see(
11610 26 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20 20  &zRight[4]);.   
11620 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66   }.#endif.#ifdef
11630 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
11640 45 52 4f 44 0a 20 20 20 20 69 66 28 20 73 71 6c  EROD.    if( sql
11650 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69  ite3StrNICmp(zRi
11660 67 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20 36  ght, "cerod-", 6
11670 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )==0 ){.      sq
11680 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f 63  lite3_activate_c
11690 65 72 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d 29  erod(&zRight[6])
116a0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
116b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
116c0 69 66 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64 20 6f  if..  } /* End o
116d0 66 20 74 68 65 20 50 52 41 47 4d 41 20 73 77 69  f the PRAGMA swi
116e0 74 63 68 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f  tch */..pragma_o
116f0 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 44 62 46  ut:.  sqlite3DbF
11700 72 65 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b 0a  ree(db, zLeft);.
11710 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
11720 64 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a  db, zRight);.}..
11730 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11740 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.