/ Hex Artifact Content
Login

Artifact 2a81f312cdb78bf0672a0484478ca3c1083028e9:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20  or ON or NORMAL 
04c0: 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20  and 2 for FULL. 
04d0: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e   Return 1 for an
04e0: 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e   empty or .** un
04f0: 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e  recognized strin
0500: 67 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65  g argument.  The
0510: 20 46 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20   FULL option is 
0520: 64 69 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66  disallowed.** if
0530: 20 74 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61   the omitFull pa
0540: 72 61 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a  rameter it 1..**
0550: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
0560: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
0570: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
0580: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
0590: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
05a0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
05b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
05c0: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
05d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
05e0: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
05f0: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
0600: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
0610: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
0620: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
0630: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
0640: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
0650: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
0660: 2f 0a 73 74 61 74 69 63 20 75 38 20 67 65 74 53  /.static u8 getS
0670: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
0680: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d   char *z, int om
0690: 69 74 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29  itFull, u8 dflt)
06a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
06c0: 2a 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34  * 123456789 1234
06d0: 35 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69  56789 */.  stati
06e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65  c const char zTe
06f0: 78 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73  xt[] = "onoffals
0700: 65 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20  eyestruefull";. 
0710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0720: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0730: 20 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c   1, 2, 4, 9, 12,
0740: 20 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63   16};.  static c
0750: 6f 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b  onst u8 iLength[
0760: 5d 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c  ] = {2, 2, 3, 5,
0770: 20 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61   3, 4, 4};.  sta
0780: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61  tic const u8 iVa
0790: 6c 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20  lue[] =  {1, 0, 
07a0: 30 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a  0, 0, 1, 1, 2};.
07b0: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66    int i, n;.  if
07c0: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
07d0: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
07e0: 72 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74  rn (u8)sqlite3At
07f0: 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  oi(z);.  }.  n =
0800: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
0810: 28 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  (z);.  for(i=0; 
0820: 69 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e  i<ArraySize(iLen
0830: 67 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69  gth)-omitFull; i
0840: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65  ++){.    if( iLe
0850: 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71  ngth[i]==n && sq
0860: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a  lite3StrNICmp(&z
0870: 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d  Text[iOffset[i]]
0880: 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ,z,n)==0 ){.    
0890: 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b    return iValue[
08a0: 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  i];.    }.  }.  
08b0: 72 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a  return dflt;.}..
08c0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
08d0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
08e0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
08f0: 6c 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74  lue..*/.u8 sqlit
0900: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
0910: 73 74 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64  st char *z, u8 d
0920: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
0930: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
0940: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
0950: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
0960: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
0970: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
0980: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
0990: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
09a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
09b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
09c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
09d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
09e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
09f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
0a00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
0a10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
0a20: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0a30: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
0a40: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0a50: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0a60: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
0a70: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
0a80: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
0a90: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
0aa0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
0ab0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0ac0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
0ad0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
0ae0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
0af0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
0b00: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0b10: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
0b20: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
0b30: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0b40: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
0b50: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
0b60: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
0b70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
0b80: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0b90: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
0ba0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
0bb0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
0bc0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
0bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
0be0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
0bf0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
0c00: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
0c10: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
0c20: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
0c30: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
0c40: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
0c50: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
0c60: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
0c70: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
0c80: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
0c90: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0ca0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
0cb0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
0cc0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
0cd0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
0ce0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0cf0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
0d00: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
0d10: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
0d20: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
0d30: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
0d40: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d50: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
0d60: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
0d70: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
0d80: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
0d90: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
0da0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
0db0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
0dc0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
0dd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
0de0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
0df0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
0e00: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
0e10: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
0e20: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
0e30: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
0e40: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
0e50: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
0e60: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
0e70: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
0e80: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
0e90: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
0ea0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
0eb0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
0ec0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
0ed0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
0ee0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
0ef0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
0f00: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
0f10: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
0f20: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
0f30: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
0f40: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
0f50: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
0f60: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
0f70: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
0f80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
0f90: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
0fa0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
0fb0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
0fc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
0fd0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
0fe0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
0ff0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
1000: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
1010: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
1020: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
1030: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
1040: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
1050: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1060: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
1070: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
1080: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
1090: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
10a0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
10b0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
10c0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
10d0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
10e0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
10f0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
1100: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
1110: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
1120: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
1130: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
1140: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
1150: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
1160: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
1170: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
1180: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
1190: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11a0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
11b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
11c0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
11d0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
11e0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
11f0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1200: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1210: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
1220: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1230: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
1240: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
1250: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
1260: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1270: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
1280: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
1290: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
12a0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
12b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12c0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
12d0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
12e0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
12f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
1300: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
1310: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
1320: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
1330: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
1340: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
1350: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
1360: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
1370: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
1380: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
1390: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
13a0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
13b0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
13c0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
13d0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
13e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
13f0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
1400: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
1410: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
1420: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
1430: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1440: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
1450: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
1460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1470: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
1480: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
1490: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72   */../*.** Gener
14a0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
14b0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
14c0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
14d0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
14e0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
14f0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
1500: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
1510: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
1520: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
1530: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
1540: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
1550: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
1560: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
1570: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
1580: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
1590: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
15a0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
15b0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
15c0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
15d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
15e0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
15f0: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
1600: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
1610: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
1620: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
1630: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
1640: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
1650: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
1660: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
1670: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
1680: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
1690: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
16a0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
16b0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
16c0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
16d0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
16e0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
16f0: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
1700: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
1710: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
1720: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1730: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
1740: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
1750: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
1760: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
1770: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
1780: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
1790: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
17a0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
17b0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
17c0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
17d0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
17e0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
17f0: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
1800: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
1810: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1820: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
1830: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
1840: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
1850: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
1860: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
1870: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
1880: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
1890: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
18a0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
18b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
18c0: 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  (pDb->safety_lev
18d0: 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48  el & PAGER_SYNCH
18e0: 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44  RONOUS_MASK)==pD
18f0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
1900: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e  );.    while( (n
1910: 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20  --) > 0 ){.     
1920: 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b   if( pDb->pBt ){
1930: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1940: 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c 61  BtreeSetPagerFla
1950: 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20  gs(pDb->pBt,.   
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
1970: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
1980: 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50  | (db->flags & P
1990: 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29  AGER_FLAGS_MASK)
19a0: 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   );.      }.    
19b0: 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20    pDb++;.    }. 
19c0: 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66   }.}.#else.# def
19d0: 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46  ine setAllPagerF
19e0: 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f  lags(X)  /* no-o
19f0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  p */.#endif.../*
1a00: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d  .** Return a hum
1a10: 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65  an-readable name
1a20: 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e   for a constrain
1a30: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74  t resolution act
1a40: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ion..*/.#ifndef 
1a50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
1a60: 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63  IGN_KEY.static c
1a70: 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f  onst char *actio
1a80: 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29  nName(u8 action)
1a90: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1aa0: 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28  zName;.  switch(
1ab0: 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63   action ){.    c
1ac0: 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20  ase OE_SetNull: 
1ad0: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55   zName = "SET NU
1ae0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  LL";        brea
1af0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  k;.    case OE_S
1b00: 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d  etDflt:  zName =
1b10: 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20   "SET DEFAULT"; 
1b20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
1b30: 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20  ase OE_Cascade: 
1b40: 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44   zName = "CASCAD
1b50: 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  E";         brea
1b60: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52  k;.    case OE_R
1b70: 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d  estrict: zName =
1b80: 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20   "RESTRICT";    
1b90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
1ba0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
1bb0: 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54   zName = "NO ACT
1bc0: 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20  ION";  .        
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
1be0: 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45  sert( action==OE
1bf0: 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a  _None ); break;.
1c00: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61    }.  return zNa
1c10: 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  me;.}.#endif.../
1c20: 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65  *.** Parameter e
1c30: 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65  Mode must be one
1c40: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
1c50: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f  URNALMODE_XXX co
1c60: 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e  nstants.** defin
1c70: 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54  ed in pager.h. T
1c80: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
1c90: 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61  urns the associa
1ca0: 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a  ted lowercase.**
1cb0: 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61   journal-mode na
1cc0: 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  me..*/.const cha
1cd0: 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
1ce0: 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d  lModename(int eM
1cf0: 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63  ode){.  static c
1d00: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f  har * const azMo
1d10: 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  deName[] = {.   
1d20: 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73   "delete", "pers
1d30: 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72  ist", "off", "tr
1d40: 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79  uncate", "memory
1d50: 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
1d60: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c  _OMIT_WAL.     ,
1d70: 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20   "wal".#endif.  
1d80: 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  };.  assert( PAG
1d90: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
1da0: 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73  ELETE==0 );.  as
1db0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
1dc0: 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d  NALMODE_PERSIST=
1dd0: 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
1de0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
1df0: 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73  E_OFF==2 );.  as
1e00: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
1e10: 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
1e20: 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==3 );.  assert(
1e30: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
1e40: 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a  DE_MEMORY==4 );.
1e50: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
1e60: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d  JOURNALMODE_WAL=
1e70: 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =5 );.  assert( 
1e80: 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64  eMode>=0 && eMod
1e90: 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d  e<=ArraySize(azM
1ea0: 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69  odeName) );..  i
1eb0: 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53  f( eMode==ArrayS
1ec0: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
1ed0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
1ee0: 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b  turn azModeName[
1ef0: 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  eMode];.}../*.**
1f00: 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d   Process a pragm
1f10: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a  a statement.  .*
1f20: 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65  *.** Pragmas are
1f30: 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a   of this form:.*
1f40: 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41  *.**      PRAGMA
1f50: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b   [database.]id [
1f60: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
1f70: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
1f80: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
1f90: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
1fa0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
1fb0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
1fc0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
1fd0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
1fe0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
1ff0: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
2000: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
2010: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
2020: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
2030: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
2040: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
2050: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
2060: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
2070: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
2080: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
2090: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
20a0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
20b0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
20c0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
20d0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
20e0: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
20f0: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
2100: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
2110: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
2120: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
2130: 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20  e.]id field */. 
2140: 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20   Token *pId2,   
2150: 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70       /* Second p
2160: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
2170: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
2180: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
2190: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
21a0: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
21b0: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
21c0: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
21d0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
21e0: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
21f0: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
2200: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
2210: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
2220: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
2230: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
2240: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
2250: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
2260: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
2270: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
2280: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
2290: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
22a0: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
22b0: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
22c0: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
22d0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
22e0: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
22f0: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
2300: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
2310: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
2320: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
2330: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
2340: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
2350: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
2360: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
2370: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
2380: 69 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a  id = 0;       /*
2390: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
23a0: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
23b0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
23c0: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
23d0: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
23e0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
23f0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
2400: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
2410: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
2420: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
2430: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2450: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
2460: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
2470: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
2480: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
2490: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
24a0: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
24b0: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
24c0: 20 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e   struct sPragmaN
24d0: 61 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a  ames *pPragma;..
24e0: 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74    if( v==0 ) ret
24f0: 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  urn;.  sqlite3Vd
2500: 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29  beRunOnlyOnce(v)
2510: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  ;.  pParse->nMem
2520: 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65   = 2;..  /* Inte
2530: 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62  rpret the [datab
2540: 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68  ase.] part of th
2550: 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  e pragma stateme
2560: 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20  nt. iDb is the. 
2570: 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ** index of the
2580: 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70   database this p
2590: 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61  ragma is being a
25a0: 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e  pplied to in db.
25b0: 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20  aDb[]. */.  iDb 
25c0: 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  = sqlite3TwoPart
25d0: 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64  Name(pParse, pId
25e0: 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a  1, pId2, &pId);.
25f0: 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65    if( iDb<0 ) re
2600: 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64  turn;.  pDb = &d
2610: 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20  b->aDb[iDb];..  
2620: 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64  /* If the temp d
2630: 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e  atabase has been
2640: 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65   explicitly name
2650: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
2660: 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d   .  ** pragma, m
2670: 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f  ake sure it is o
2680: 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28  pen. .  */.  if(
2690: 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74   iDb==1 && sqlit
26a0: 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
26b0: 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  se(pParse) ){.  
26c0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
26d0: 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33   zLeft = sqlite3
26e0: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
26f0: 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a  , pId);.  if( !z
2700: 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20  Left ) return;. 
2710: 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29   if( minusFlag )
2720: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
2730: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2740: 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29  , "-%T", pValue)
2750: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  ;.  }else{.    z
2760: 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e  Right = sqlite3N
2770: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
2780: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20   pValue);.  }.. 
2790: 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b   assert( pId2 );
27a0: 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e  .  zDb = pId2->n
27b0: 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20  >0 ? pDb->zName 
27c0: 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  : 0;.  if( sqlit
27d0: 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72  e3AuthCheck(pPar
27e0: 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d  se, SQLITE_PRAGM
27f0: 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  A, zLeft, zRight
2800: 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f  , zDb) ){.    go
2810: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2820: 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e   }..  /* Send an
2830: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2840: 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f  AGMA file-contro
2850: 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  l to the underly
2860: 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e  ing VFS.  ** con
2870: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20  nection.  If it 
2880: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
2890: 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74  K, then assume t
28a0: 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a  hat the VFS.  **
28b0: 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61   handled the pra
28c0: 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65  gma and generate
28d0: 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65   a no-op prepare
28e0: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a  d statement..  *
28f0: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
2900: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33  ATION-OF: R-1223
2910: 38 2d 35 35 31 32 30 20 57 68 65 6e 65 76 65 72  8-55120 Whenever
2920: 20 61 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d   a PRAGMA statem
2930: 65 6e 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20  ent is parsed,. 
2940: 20 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43   ** an SQLITE_FC
2950: 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20  NTL_PRAGMA file 
2960: 63 6f 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20  control is sent 
2970: 74 6f 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69  to the open sqli
2980: 74 65 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62  te3_file.  ** ob
2990: 6a 65 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69  ject correspondi
29a0: 6e 67 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ng to the databa
29b0: 73 65 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68  se file to which
29c0: 20 74 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a   the pragma.  **
29d0: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72   statement refer
29e0: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50  s..  **.  ** IMP
29f0: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
2a00: 52 2d 32 39 38 37 35 2d 33 31 36 37 38 20 54 68  R-29875-31678 Th
2a10: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  e argument to th
2a20: 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  e SQLITE_FCNTL_P
2a30: 52 41 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20  RAGMA.  ** file 
2a40: 63 6f 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72  control is an ar
2a50: 72 61 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ray of pointers 
2a60: 74 6f 20 73 74 72 69 6e 67 73 20 28 63 68 61 72  to strings (char
2a70: 2a 2a 29 20 69 6e 20 77 68 69 63 68 20 74 68 65  **) in which the
2a80: 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65  .  ** second ele
2a90: 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61  ment of the arra
2aa0: 79 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  y is the name of
2ab0: 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20   the pragma and 
2ac0: 74 68 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65  the third.  ** e
2ad0: 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72  lement is the ar
2ae0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
2af0: 61 67 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20  agma or NULL if 
2b00: 74 68 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e  the pragma has n
2b10: 6f 0a 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  o.  ** argument.
2b20: 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30  .  */.  aFcntl[0
2b30: 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b  ] = 0;.  aFcntl[
2b40: 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46  1] = zLeft;.  aF
2b50: 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74  cntl[2] = zRight
2b60: 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20  ;.  aFcntl[3] = 
2b70: 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  0;.  db->busyHan
2b80: 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a  dler.nBusy = 0;.
2b90: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
2ba0: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
2bb0: 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
2bc0: 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a  L_PRAGMA, (void*
2bd0: 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20  )aFcntl);.  if( 
2be0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2bf0: 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b  .    if( aFcntl[
2c00: 30 5d 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  0] ){.      int 
2c10: 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  mem = ++pParse->
2c20: 6e 4d 65 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69  nMem;.      sqli
2c30: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
2c40: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
2c50: 6d 65 6d 2c 20 30 2c 20 61 46 63 6e 74 6c 5b 30  mem, 0, aFcntl[0
2c60: 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  ], 0);.      sql
2c70: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
2c80: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
2c90: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
2ca0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
2cb0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 65 73 75 6c  AME_NAME, "resul
2cc0: 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  t", SQLITE_STATI
2cd0: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
2ce0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
2cf0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
2d00: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
2d10: 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b  te3_free(aFcntl[
2d20: 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  0]);.    }.    g
2d30: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
2d40: 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51    }.  if( rc!=SQ
2d50: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b  LITE_NOTFOUND ){
2d60: 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b  .    if( aFcntl[
2d70: 30 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  0] ){.      sqli
2d80: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
2d90: 73 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c  se, "%s", aFcntl
2da0: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  [0]);.      sqli
2db0: 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b  te3_free(aFcntl[
2dc0: 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  0]);.    }.    p
2dd0: 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20  Parse->nErr++;. 
2de0: 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20     pParse->rc = 
2df0: 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61  rc;.    goto pra
2e00: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
2e10: 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72  /* Locate the pr
2e20: 61 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b  agma in the look
2e30: 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77  up table */.  lw
2e40: 72 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41  r = 0;.  upr = A
2e50: 72 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61  rraySize(aPragma
2e60: 4e 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c  Names)-1;.  whil
2e70: 65 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20  e( lwr<=upr ){. 
2e80: 20 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70     mid = (lwr+up
2e90: 72 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73  r)/2;.    rc = s
2ea0: 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a  qlite3_stricmp(z
2eb0: 4c 65 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d  Left, aPragmaNam
2ec0: 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a  es[mid].zName);.
2ed0: 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20      if( rc==0 ) 
2ee0: 62 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72  break;.    if( r
2ef0: 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72  c<0 ){.      upr
2f00: 20 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20   = mid - 1;.    
2f10: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72  }else{.      lwr
2f20: 20 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20   = mid + 1;.    
2f30: 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e  }.  }.  if( lwr>
2f40: 75 70 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  upr ) goto pragm
2f50: 61 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61  a_out;.  pPragma
2f60: 20 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73   = &aPragmaNames
2f70: 5b 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b  [mid];..  /* Mak
2f80: 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62  e sure the datab
2f90: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f  ase schema is lo
2fa0: 61 64 65 64 20 69 66 20 74 68 65 20 70 72 61 67  aded if the prag
2fb0: 6d 61 20 72 65 71 75 69 72 65 73 20 74 68 61 74  ma requires that
2fc0: 20 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67   */.  if( (pPrag
2fd0: 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20  ma->mPragFlag & 
2fe0: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
2ff0: 65 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  ema)!=0 ){.    i
3000: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
3010: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
3020: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
3030: 20 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74    }..  /* Jump t
3040: 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  o the appropriat
3050: 65 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72  e pragma handler
3060: 20 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50   */.  switch( pP
3070: 72 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20  ragma->ePragTyp 
3080: 29 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e  ){.  .#if !defin
3090: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
30a0: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26  AGER_PRAGMAS) &&
30b0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
30c0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
30d0: 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ).  /*.  **  PRA
30e0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64  GMA [database.]d
30f0: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
3100: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
3110: 64 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c  database.]defaul
3120: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20  t_cache_size=N. 
3130: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
3140: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
3150: 74 68 65 20 63 75 72 72 65 6e 74 20 70 65 72 73  the current pers
3160: 69 73 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66  istent setting f
3170: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65  or the.  ** page
3180: 20 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68   cache size.  Th
3190: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
31a0: 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   is the maximum 
31b0: 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70  number of.  ** p
31c0: 61 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65  ages in the page
31d0: 20 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63   cache.  The sec
31e0: 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f  ond form sets bo
31f0: 74 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20  th the current. 
3200: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
3210: 69 7a 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ize value and th
3220: 65 20 70 65 72 73 69 73 74 65 6e 74 20 70 61 67  e persistent pag
3230: 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c  e cache size val
3240: 75 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69  ue.  ** stored i
3250: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
3260: 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f  ile..  **.  ** O
3270: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
3280: 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65   SQLite would se
3290: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61  t the default ca
32a0: 63 68 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20  che size to a.  
32b0: 2a 2a 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62  ** negative numb
32c0: 65 72 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73  er to indicate s
32d0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20  ynchronous=OFF. 
32e0: 20 54 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e   These days, syn
32f0: 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73  chronous.  ** is
3300: 20 61 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65   always on by de
3310: 66 61 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73  fault regardless
3320: 20 6f 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20   of the sign of 
3330: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
3340: 65 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75  e.  ** size.  Bu
3350: 74 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61  t continue to ta
3360: 6b 65 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20  ke the absolute 
3370: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66  value of the def
3380: 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20  ault cache.  ** 
3390: 73 69 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63  size of historic
33a0: 61 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  al compatibility
33b0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
33c0: 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41  agTyp_DEFAULT_CA
33d0: 43 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20  CHE_SIZE: {.    
33e0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
33f0: 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53   iLn = VDBE_OFFS
3400: 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20  ET_LINENO(2);.  
3410: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
3420: 64 62 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63  dbeOpList getCac
3430: 68 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20  heSize[] = {.   
3440: 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
3450: 69 6f 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20  ion, 0, 0,      
3460: 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20    0},           
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3480: 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   0 */.      { OP
3490: 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c  _ReadCookie,  0,
34a0: 20 31 2c 20 20 20 20 20 20 20 20 42 54 52 45 45   1,        BTREE
34b0: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
34c0: 49 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20  IZE},  /* 1 */. 
34d0: 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c       { OP_IfPos,
34e0: 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20         1, 8,    
34f0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
3500: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
3510: 30 2c 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 2,        0},
3520: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74  .      { OP_Subt
3530: 72 61 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20  ract,    1, 2,  
3540: 20 20 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20        1},.      
3550: 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20  { OP_IfPos,     
3560: 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30    1, 8,        0
3570: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e  },.      { OP_In
3580: 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c  teger,     0, 1,
3590: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20          0},     
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b0: 20 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20      /* 6 */.    
35c0: 20 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20    { OP_Noop,    
35d0: 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20      0, 0,       
35e0: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
35f0: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20  ResultRow,   1, 
3600: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  1,        0},.  
3610: 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64    };.    int add
3620: 72 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  r;.    sqlite3Vd
3630: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
3640: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  Db);.    if( !zR
3650: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
3660: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
3670: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
3680: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
3690: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
36a0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68  NAME_NAME, "cach
36b0: 65 5f 73 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f  e_size", SQLITE_
36c0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70  STATIC);.      p
36d0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32  Parse->nMem += 2
36e0: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
36f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
3700: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
3710: 28 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20  (getCacheSize), 
3720: 67 65 74 43 61 63 68 65 53 69 7a 65 2c 69 4c 6e  getCacheSize,iLn
3730: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3740: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
3750: 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
3760: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
3770: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP1(v, addr+1,
3780: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
3790: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
37a0: 28 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49  (v, addr+6, SQLI
37b0: 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  TE_DEFAULT_CACHE
37c0: 5f 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73  _SIZE);.    }els
37d0: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  e{.      int siz
37e0: 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e  e = sqlite3AbsIn
37f0: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
3800: 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20  zRight));.      
3810: 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
3820: 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73  eOperation(pPars
3830: 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20  e, 0, iDb);.    
3840: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
3850: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
3860: 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20  r, size, 1);.   
3870: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
3880: 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f  dOp3(v, OP_SetCo
3890: 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45  okie, iDb, BTREE
38a0: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
38b0: 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61  IZE, 1);.      a
38c0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
38d0: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
38e0: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
38f0: 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
3900: 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69  >cache_size = si
3910: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
3920: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
3930: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62  ze(pDb->pBt, pDb
3940: 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65  ->pSchema->cache
3950: 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20  _size);.    }.  
3960: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
3970: 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f  dif /* !SQLITE_O
3980: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
3990: 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49  S && !SQLITE_OMI
39a0: 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a  T_DEPRECATED */.
39b0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
39c0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
39d0: 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20  PRAGMAS).  /*.  
39e0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
39f0: 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a  base.]page_size.
3a00: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
3a10: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a  tabase.]page_siz
3a20: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
3a30: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
3a40: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
3a50: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
3a60: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70  .  ** database p
3a70: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
3a80: 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  s.  The second f
3a90: 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a  orm sets the.  *
3aa0: 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  * database page 
3ab0: 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65  size value.  The
3ac0: 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20   value can only 
3ad0: 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74  be set if.  ** t
3ae0: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20  he database has 
3af0: 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65  not yet been cre
3b00: 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  ated..  */.  cas
3b10: 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53  e PragTyp_PAGE_S
3b20: 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  IZE: {.    Btree
3b30: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
3b40: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
3b50: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
3b60: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
3b70: 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41   int size = ALWA
3b80: 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65  YS(pBt) ? sqlite
3b90: 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a  3BtreeGetPageSiz
3ba0: 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20  e(pBt) : 0;.    
3bb0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
3bc0: 74 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f  t(pParse, "page_
3bd0: 73 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20  size", size);.  
3be0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
3bf0: 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69  * Malloc may fai
3c00: 6c 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74  l when setting t
3c10: 68 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73  he page-size, as
3c20: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
3c30: 65 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62  ernal.      ** b
3c40: 75 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70  uffer that the p
3c50: 61 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69  ager module resi
3c60: 7a 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65  zes using sqlite
3c70: 33 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20  3_realloc()..   
3c80: 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e     */.      db->
3c90: 6e 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73  nextPagesize = s
3ca0: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
3cb0: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51  t);.      if( SQ
3cc0: 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69  LITE_NOMEM==sqli
3cd0: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53  te3BtreeSetPageS
3ce0: 69 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78  ize(pBt, db->nex
3cf0: 74 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20  tPagesize,-1,0) 
3d00: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d  ){.        db->m
3d10: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
3d20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
3d30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
3d40: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
3d50: 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75   [database.]secu
3d60: 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20  re_delete.  **  
3d70: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
3d80: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d  .]secure_delete=
3d90: 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a  ON/OFF.  **.  **
3da0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
3db0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
3dc0: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
3dd0: 74 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f  the.  ** secure_
3de0: 64 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68  delete flag.  Th
3df0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68  e second form ch
3e00: 61 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65  anges the secure
3e10: 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61  _delete.  ** fla
3e20: 67 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65  g setting and re
3e30: 70 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c  ports thenew val
3e40: 75 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ue..  */.  case 
3e50: 50 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44  PragTyp_SECURE_D
3e60: 45 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72  ELETE: {.    Btr
3e70: 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70  ee *pBt = pDb->p
3e80: 42 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20  Bt;.    int b = 
3e90: 2d 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  -1;.    assert( 
3ea0: 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66  pBt!=0 );.    if
3eb0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
3ec0: 20 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74    b = sqlite3Get
3ed0: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
3ee0: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  0);.    }.    if
3ef0: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20  ( pId2->n==0 && 
3f00: 62 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  b>=0 ){.      in
3f10: 74 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28  t ii;.      for(
3f20: 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
3f30: 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
3f40: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63   sqlite3BtreeSec
3f50: 75 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44  ureDelete(db->aD
3f60: 62 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20  b[ii].pBt, b);. 
3f70: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3f80: 20 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   b = sqlite3Btre
3f90: 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42  eSecureDelete(pB
3fa0: 74 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72  t, b);.    retur
3fb0: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
3fc0: 65 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74  e, "secure_delet
3fd0: 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61  e", b);.    brea
3fe0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
3ff0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
4000: 61 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f  ase.]max_page_co
4010: 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  unt.  **  PRAGMA
4020: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f   [database.]max_
4030: 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a  page_count=N.  *
4040: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
4050: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
4060: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
4070: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d  g for the.  ** m
4080: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
4090: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
40a0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
40b0: 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66  e .  ** second f
40c0: 6f 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20  orm attempts to 
40d0: 63 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74  change this sett
40e0: 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20  ing.  Both.  ** 
40f0: 66 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65  forms return the
4100: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
4110: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
4120: 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
4130: 66 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68  f N is used.  Th
4140: 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  is is undocument
4150: 65 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a  ed and might.  *
4160: 2a 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f  * change.  The o
4170: 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74  nly purpose is t
4180: 6f 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73  o provide an eas
4190: 79 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20  y way to test.  
41a0: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62  ** the sqlite3Ab
41b0: 73 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f  sInt32() functio
41c0: 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52  n..  **.  **  PR
41d0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
41e0: 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a  page_count.  **.
41f0: 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20    ** Return the 
4200: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
4210: 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  in the specified
4220: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a   database..  */.
4230: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50    case PragTyp_P
4240: 41 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20  AGE_COUNT: {.   
4250: 20 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73   int iReg;.    s
4260: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
4270: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
4280: 44 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20  Db);.    iReg = 
4290: 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a  ++pParse->nMem;.
42a0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
42b0: 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29  olower(zLeft[0])
42c0: 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73  =='p' ){.      s
42d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
42e0: 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  (v, OP_Pagecount
42f0: 2c 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20  , iDb, iReg);.  
4300: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
4310: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
4320: 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c  (v, OP_MaxPgcnt,
4330: 20 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20   iDb, iReg, .   
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4350: 20 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49       sqlite3AbsI
4360: 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69  nt32(sqlite3Atoi
4370: 28 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20  (zRight)));.    
4380: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
4390: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
43a0: 73 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31  sultRow, iReg, 1
43b0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
43c0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
43d0: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
43e0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
43f0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
4400: 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f  , zLeft, SQLITE_
4410: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
4420: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
4430: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
4440: 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67  atabase.]locking
4450: 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47  _mode.  **  PRAG
4460: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f  MA [database.]lo
4470: 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f  cking_mode = (no
4480: 72 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a  rmal|exclusive).
4490: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
44a0: 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45  Typ_LOCKING_MODE
44b0: 3a 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  : {.    const ch
44c0: 61 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d  ar *zRet = "norm
44d0: 61 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f  al";.    int eMo
44e0: 64 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d  de = getLockingM
44f0: 6f 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20  ode(zRight);..  
4500: 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30    if( pId2->n==0
4510: 20 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52   && eMode==PAGER
4520: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45  _LOCKINGMODE_QUE
4530: 52 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53  RY ){.      /* S
4540: 69 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f  imple "PRAGMA lo
4550: 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61  cking_mode;" sta
4560: 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20  tement. This is 
4570: 61 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20  a query for.    
4580: 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
4590: 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   default locking
45a0: 20 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79   mode (which may
45b0: 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f   be different to
45c0: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f  .      ** the lo
45d0: 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68  cking-mode of th
45e0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29  e main database)
45f0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
4600: 20 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c   eMode = db->dfl
4610: 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d  tLockMode;.    }
4620: 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65  else{.      Page
4630: 72 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20  r *pPager;.     
4640: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
4650: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ){.        /* Th
4660: 69 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  is indicates tha
4670: 74 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61  t no database na
4680: 6d 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64  me was specified
4690: 20 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20   as part.       
46a0: 20 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d   ** of the PRAGM
46b0: 41 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68  A command. In th
46c0: 69 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b  is case the lock
46d0: 69 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65  ing-mode must be
46e0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20  .        ** set 
46f0: 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  on all attached 
4700: 64 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65  databases, as we
4710: 6c 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64  ll as the main d
4720: 62 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20  b file..        
4730: 2a 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c  **.        ** Al
4740: 73 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e  so, the sqlite3.
4750: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72  dfltLockMode var
4760: 69 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20  iable is set so 
4770: 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  that.        ** 
4780: 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79  any subsequently
4790: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
47a0: 73 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65  ses also use the
47b0: 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20   specified.     
47c0: 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f     ** locking mo
47d0: 64 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  de..        */. 
47e0: 20 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20         int ii;. 
47f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44         assert(pD
4800: 62 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b  b==&db->aDb[0]);
4810: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
4820: 32 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  2; ii<db->nDb; i
4830: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
4840: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
4850: 42 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61  BtreePager(db->a
4860: 44 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20  Db[ii].pBt);.   
4870: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
4880: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
4890: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
48a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
48b0: 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64   db->dfltLockMod
48c0: 65 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20  e = (u8)eMode;. 
48d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61       }.      pPa
48e0: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
48f0: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
4900: 29 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  );.      eMode =
4910: 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63   sqlite3PagerLoc
4920: 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c  kingMode(pPager,
4930: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a   eMode);.    }..
4940: 20 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64      assert( eMod
4950: 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  e==PAGER_LOCKING
4960: 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20  MODE_NORMAL.    
4970: 20 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65          || eMode
4980: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
4990: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b  ODE_EXCLUSIVE );
49a0: 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d  .    if( eMode==
49b0: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
49c0: 45 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20  E_EXCLUSIVE ){. 
49d0: 20 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63       zRet = "exc
49e0: 6c 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20  lusive";.    }. 
49f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4a00: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
4a10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
4a20: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
4a30: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c  COLNAME_NAME, "l
4a40: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51  ocking_mode", SQ
4a50: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
4a60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4a70: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
4a80: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74  8, 0, 1, 0, zRet
4a90: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
4aa0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
4ab0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
4ac0: 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1);.    break;. 
4ad0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
4ae0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
4af0: 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20  ]journal_mode.  
4b00: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
4b10: 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f  base.]journal_mo
4b20: 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20  de =.  **       
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
4b40: 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f  delete|persist|o
4b50: 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f  ff|truncate|memo
4b60: 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f  ry|wal|off).  */
4b70: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
4b80: 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a  JOURNAL_MODE: {.
4b90: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20      int eMode;  
4ba0: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
4bb0: 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  the PAGER_JOURNA
4bc0: 4c 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c  LMODE_XXX symbol
4bd0: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b  s */.    int ii;
4be0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
4bf0: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20  op counter */.. 
4c00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4c10: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
4c20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
4c30: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
4c40: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a  COLNAME_NAME, "j
4c50: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51  ournal_mode", SQ
4c60: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20  LITE_STATIC);.. 
4c70: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
4c80: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
4c90: 74 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f  there is no "=MO
4ca0: 44 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20  DE" part of the 
4cb0: 70 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65  pragma, do a que
4cc0: 72 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20  ry for the.     
4cd0: 20 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65   ** current mode
4ce0: 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20   */.      eMode 
4cf0: 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  = PAGER_JOURNALM
4d00: 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d  ODE_QUERY;.    }
4d10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73  else{.      cons
4d20: 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20  t char *zMode;. 
4d30: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c       int n = sql
4d40: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69  ite3Strlen30(zRi
4d50: 67 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  ght);.      for(
4d60: 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20  eMode=0; (zMode 
4d70: 3d 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  = sqlite3Journal
4d80: 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29  Modename(eMode))
4d90: 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20  !=0; eMode++){. 
4da0: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
4db0: 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68  e3StrNICmp(zRigh
4dc0: 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20  t, zMode, n)==0 
4dd0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d  ) break;.      }
4de0: 0a 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64  .      if( !zMod
4df0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e ){.        /* 
4e00: 49 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70  If the "=MODE" p
4e10: 61 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  art does not mat
4e20: 63 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75  ch any known jou
4e30: 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20  rnal mode,.     
4e40: 20 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20     ** then do a 
4e50: 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20  query */.       
4e60: 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a   eMode = PAGER_J
4e70: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
4e80: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4e90: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
4ea0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
4eb0: 5f 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e  _QUERY && pId2->
4ec0: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  n==0 ){.      /*
4ed0: 20 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41   Convert "PRAGMA
4ee0: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69   journal_mode" i
4ef0: 6e 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e  nto "PRAGMA main
4f00: 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a  .journal_mode" *
4f10: 2f 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b  /.      iDb = 0;
4f20: 0a 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d  .      pId2->n =
4f30: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f   1;.    }.    fo
4f40: 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20  r(ii=db->nDb-1; 
4f50: 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20  ii>=0; ii--){.  
4f60: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
4f70: 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d  ii].pBt && (ii==
4f80: 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d  iDb || pId2->n==
4f90: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0) ){.        sq
4fa0: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
4fb0: 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20 20 20  ee(v, ii);.     
4fc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
4fd0: 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e  dOp3(v, OP_Journ
4fe0: 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65  alMode, ii, 1, e
4ff0: 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Mode);.      }. 
5000: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
5010: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5020: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
5030: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
5040: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
5050: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
5060: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
5070: 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  it.  **  PRAGMA 
5080: 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e  [database.]journ
5090: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a  al_size_limit=N.
50a0: 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72    **.  ** Get or
50b0: 20 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69   set the size li
50c0: 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  mit on rollback 
50d0: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20  journal files.. 
50e0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
50f0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f  yp_JOURNAL_SIZE_
5100: 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67  LIMIT: {.    Pag
5110: 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
5120: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
5130: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36  Db->pBt);.    i6
5140: 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20  4 iLimit = -2;. 
5150: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
5160: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65  .      sqlite3De
5170: 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67  cOrHexToI64(zRig
5180: 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20  ht, &iLimit);.  
5190: 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d      if( iLimit<-
51a0: 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b  1 ) iLimit = -1;
51b0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69  .    }.    iLimi
51c0: 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  t = sqlite3Pager
51d0: 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74  JournalSizeLimit
51e0: 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29  (pPager, iLimit)
51f0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  ;.    returnSing
5200: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a  leInt(pParse, "j
5210: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
5220: 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t", iLimit);.   
5230: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e   break;.  }..#en
5240: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
5250: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
5260: 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20   */..  /*.  **  
5270: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
5280: 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20  .]auto_vacuum.  
5290: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
52a0: 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75  base.]auto_vacuu
52b0: 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65  m=N.  **.  ** Ge
52c0: 74 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c  t or set the val
52d0: 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ue of the databa
52e0: 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27  se 'auto-vacuum'
52f0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a   parameter..  **
5300: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e   The value is on
5310: 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20  e of:  0 NONE 1 
5320: 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54  FULL 2 INCREMENT
5330: 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  AL.  */.#ifndef 
5340: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
5350: 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72  VACUUM.  case Pr
5360: 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55  agTyp_AUTO_VACUU
5370: 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  M: {.    Btree *
5380: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
5390: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
53a0: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
53b0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
53c0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
53d0: 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63  Parse, "auto_vac
53e0: 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72  uum", sqlite3Btr
53f0: 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28  eeGetAutoVacuum(
5400: 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  pBt));.    }else
5410: 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75 74  {.      int eAut
5420: 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75  o = getAutoVacuu
5430: 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  m(zRight);.     
5440: 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d   assert( eAuto>=
5450: 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b  0 && eAuto<=2 );
5460: 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41  .      db->nextA
5470: 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75  utovac = (u8)eAu
5480: 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c  to;.      /* Cal
5490: 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28  l SetAutoVacuum(
54a0: 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c  ) to set initial
54b0: 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ize the internal
54c0: 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20   auto and.      
54d0: 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66  ** incr-vacuum f
54e0: 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20 72 65  lags. This is re
54f0: 71 75 69 72 65 64 20 69 6e 20 63 61 73 65 20 74  quired in case t
5500: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20  his connection. 
5510: 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20       ** creates 
5520: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
5530: 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  e. It is importa
5540: 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63 72  nt that it is cr
5550: 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  eated.      ** a
5560: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
5570: 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20   capable db..   
5580: 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d     */.      rc =
5590: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
55a0: 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20  AutoVacuum(pBt, 
55b0: 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66  eAuto);.      if
55c0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
55d0: 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20  && (eAuto==1 || 
55e0: 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20  eAuto==2) ){.   
55f0: 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74       /* When set
5600: 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61  ting the auto_va
5610: 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74  cuum mode to eit
5620: 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20  her "full" or . 
5630: 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65         ** "incre
5640: 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74  mental", write t
5650: 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61  he value of meta
5660: 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62  [6] in the datab
5670: 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  ase.        ** f
5680: 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74  ile. Before writ
5690: 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20  ing to meta[6], 
56a0: 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b  check that meta[
56b0: 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20  3] indicates.   
56c0: 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69       ** that thi
56d0: 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61  s really is an a
56e0: 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62  uto-vacuum capab
56f0: 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  le database..   
5700: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
5710: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
5720: 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53   iLn = VDBE_OFFS
5730: 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20  ET_LINENO(2);.  
5740: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
5750: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65  st VdbeOpList se
5760: 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20 20  tMeta6[] = {.   
5770: 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
5780: 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20  saction,    0,  
5790: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
57a0: 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20            0},   
57b0: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
57c0: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
57d0: 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20 20 20  ie,     0,      
57e0: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 42 54     1,         BT
57f0: 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f 54  REE_LARGEST_ROOT
5800: 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20 20 20  _PAGE},.        
5810: 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20    { OP_If,      
5820: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
5830: 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20    0,            
5840: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32       0},    /* 2
5850: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
5860: 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20  OP_Halt,        
5870: 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f 45     SQLITE_OK, OE
5880: 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20 20 20  _Abort,         
5890: 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a   0},    /* 3 */.
58a0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49            { OP_I
58b0: 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20 20 30  nteger,        0
58c0: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
58e0: 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20      /* 4 */.    
58f0: 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f        { OP_SetCo
5900: 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 20  okie,      0,   
5910: 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e 43 52        BTREE_INCR
5920: 5f 56 41 43 55 55 4d 2c 20 31 7d 2c 20 20 20 20  _VACUUM, 1},    
5930: 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 5 */.        
5940: 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  };.        int i
5950: 41 64 64 72 3b 0a 20 20 20 20 20 20 20 20 69 41  Addr;.        iA
5960: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
5970: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
5980: 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36  raySize(setMeta6
5990: 29 2c 20 73 65 74 4d 65 74 61 36 2c 20 69 4c 6e  ), setMeta6, iLn
59a0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
59b0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
59c0: 2c 20 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20  , iAddr, iDb);. 
59d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
59e0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
59f0: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
5a00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5a10: 43 68 61 6e 67 65 50 32 28 76 2c 20 69 41 64 64  ChangeP2(v, iAdd
5a20: 72 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b 0a 20  r+2, iAddr+4);. 
5a30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5a40: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
5a50: 64 64 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29 3b  ddr+4, eAuto-1);
5a60: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5a70: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5a80: 69 41 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a 20  iAddr+5, iDb);. 
5a90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5aa0: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
5ab0: 44 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  Db);.      }.   
5ac0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
5ad0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20  }.#endif..  /*. 
5ae0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
5af0: 61 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74  abase.]increment
5b00: 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a  al_vacuum(N).  *
5b10: 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70  *.  ** Do N step
5b20: 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c  s of incremental
5b30: 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20   vacuuming on a 
5b40: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23  database..  */.#
5b50: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5b60: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
5b70: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 43  case PragTyp_INC
5b80: 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 3a  REMENTAL_VACUUM:
5b90: 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d 69   {.    int iLimi
5ba0: 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28  t, addr;.    if(
5bb0: 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73   zRight==0 || !s
5bc0: 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a  qlite3GetInt32(z
5bd0: 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20  Right, &iLimit) 
5be0: 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a  || iLimit<=0 ){.
5bf0: 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30        iLimit = 0
5c00: 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d  x7fffffff;.    }
5c10: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69  .    sqlite3Begi
5c20: 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
5c30: 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b  pParse, 0, iDb);
5c40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5c50: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
5c60: 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29  eger, iLimit, 1)
5c70: 3b 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c  ;.    addr = sql
5c80: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
5c90: 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c  , OP_IncrVacuum,
5ca0: 20 69 44 62 29 3b 20 56 64 62 65 43 6f 76 65 72   iDb); VdbeCover
5cb0: 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69  age(v);.    sqli
5cc0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
5cd0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
5ce0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5cf0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
5d00: 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20  ddImm, 1, -1);. 
5d10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
5d20: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp2(v, OP_IfPos
5d30: 2c 20 31 2c 20 61 64 64 72 29 3b 20 56 64 62 65  , 1, addr); Vdbe
5d40: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
5d50: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
5d60: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
5d70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
5d80: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
5d90: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
5da0: 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a  PRAGMAS.  /*.  *
5db0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
5dc0: 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a  ase.]cache_size.
5dd0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
5de0: 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69  tabase.]cache_si
5df0: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
5e00: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
5e10: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
5e20: 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20  t local setting 
5e30: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67  for the.  ** pag
5e40: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68  e cache size. Th
5e50: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
5e60: 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a  ts the local.  *
5e70: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
5e80: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69  e value.  If N i
5e90: 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20  s positive then 
5ea0: 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a  that is the.  **
5eb0: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5ec0: 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20   in the cache.  
5ed0: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
5ee0: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
5ef0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
5f00: 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74  is adjusted so t
5f10: 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73  hat the cache us
5f20: 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a  es -N kibibytes.
5f30: 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a    ** of memory..
5f40: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
5f50: 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  Typ_CACHE_SIZE: 
5f60: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  {.    assert( sq
5f70: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
5f80: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
5f90: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
5fa0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
5fb0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
5fc0: 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a 65  rse, "cache_size
5fd0: 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  ", pDb->pSchema-
5fe0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
5ff0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
6000: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
6010: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
6020: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
6030: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
6040: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
6050: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
6060: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
6070: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
6080: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
6090: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
60a0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
60b0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d 61  A [database.]mma
60c0: 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20  p_size(N).  **. 
60d0: 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20   ** Used to set 
60e0: 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d  mapping size lim
60f0: 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20  it. The mapping 
6100: 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20  size limit is.  
6110: 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74  ** used to limit
6120: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
6130: 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72  ize of all memor
6140: 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73  y mapped regions
6150: 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74   of the.  ** dat
6160: 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74  abase file. If t
6170: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73  his parameter is
6180: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68   set to zero, th
6190: 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e  en memory mappin
61a0: 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73  g.  ** is not us
61b0: 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e  ed at all.  If N
61c0: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
61d0: 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d  en the default m
61e0: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c  emory map.  ** l
61f0: 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20  imit determined 
6200: 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  by sqlite3_confi
6210: 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
6220: 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65  MMAP_SIZE) is se
6230: 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61  t..  ** The para
6240: 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75  meter N is measu
6250: 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20  red in bytes..  
6260: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c  **.  ** This val
6270: 75 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20  ue is advisory. 
6280: 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   The underlying 
6290: 56 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d  VFS is free to m
62a0: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61  emory map.  ** a
62b0: 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d  s little or as m
62c0: 75 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e  uch as it wants.
62d0: 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69    Except, if N i
62e0: 73 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20  s set to 0 then 
62f0: 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c  the.  ** upper l
6300: 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72  ayers will never
6310: 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74   invoke the xFet
6320: 63 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f  ch interfaces to
6330: 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20   the VFS..  */. 
6340: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d   case PragTyp_MM
6350: 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  AP_SIZE: {.    s
6360: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b  qlite3_int64 sz;
6370: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
6380: 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20  MMAP_SIZE>0.    
6390: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
63a0: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
63b0: 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
63c0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
63d0: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
63e0: 20 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72      sqlite3DecOr
63f0: 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c  HexToI64(zRight,
6400: 20 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28   &sz);.      if(
6410: 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c   sz<0 ) sz = sql
6420: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
6430: 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69  .szMmap;.      i
6440: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20  f( pId2->n==0 ) 
6450: 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b  db->szMmap = sz;
6460: 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62  .      for(ii=db
6470: 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20  ->nDb-1; ii>=0; 
6480: 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69  ii--){.        i
6490: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
64a0: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
64b0: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
64c0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
64d0: 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69  e3BtreeSetMmapLi
64e0: 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  mit(db->aDb[ii].
64f0: 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20  pBt, sz);.      
6500: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
6510: 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20  }.    sz = -1;. 
6520: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
6530: 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
6540: 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e   zDb, SQLITE_FCN
6550: 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73  TL_MMAP_SIZE, &s
6560: 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a  z);.#else.    sz
6570: 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 0;.    rc = S
6580: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66  QLITE_OK;.#endif
6590: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
65a0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
65b0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
65c0: 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f 73 69  pParse, "mmap_si
65d0: 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65  ze", sz);.    }e
65e0: 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49  lse if( rc!=SQLI
65f0: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
6600: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72       pParse->nEr
6610: 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73  r++;.      pPars
6620: 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  e->rc = rc;.    
6630: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
6640: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
6650: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a  AGMA temp_store.
6660: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
6670: 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61  mp_store = "defa
6680: 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66  ult"|"memory"|"f
6690: 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ile".  **.  ** R
66a0: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
66b0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
66c0: 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66  the temp_store f
66d0: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
66e0: 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61   ** the local va
66f0: 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b  lue does not mak
6700: 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
6710: 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74   disk file and t
6720: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
6730: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65  value will be re
6740: 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20  stored the next 
6750: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
6760: 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a  e is opened..  *
6770: 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74  *.  ** Note that
6780: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
6790: 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79 20  for the library 
67a0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
67b0: 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65  ions to.  ** ove
67c0: 72 72 69 64 65 20 74 68 69 73 20 73 65 74 74 69  rride this setti
67d0: 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  ng.  */.  case P
67e0: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
67f0: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  E: {.    if( !zR
6800: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
6810: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
6820: 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72  arse, "temp_stor
6830: 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  e", db->temp_sto
6840: 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  re);.    }else{.
6850: 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70        changeTemp
6860: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20  Storage(pParse, 
6870: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20  zRight);.    }. 
6880: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6890: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
68a0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
68b0: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
68c0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
68d0: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
68e0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
68f0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
6900: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
6910: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
6920: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6930: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
6940: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
6950: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
6960: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
6970: 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  be used for temp
6980: 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a  orary files..  *
6990: 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e  * Setting to a n
69a0: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
69b0: 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ts to the defaul
69c0: 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  t temporary dire
69d0: 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20  ctory search..  
69e0: 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20  ** If temporary 
69f0: 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61  directory is cha
6a00: 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c  nged, then inval
6a10: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
6a20: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
6a30: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
6a40: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
6a50: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
6a60: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
6a70: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
6a80: 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20  ectory ){.      
6a90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
6aa0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
6ab0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
6ac0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
6ad0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
6ae0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 74   .            "t
6af0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6b00: 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ory", SQLITE_STA
6b10: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
6b20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
6b30: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
6b40: 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f  , 1, 0, sqlite3_
6b50: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20  temp_directory, 
6b60: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
6b70: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
6b80: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
6b90: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
6ba0: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
6bb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
6bc0: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
6bd0: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
6be0: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
6bf0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
6c00: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
6c10: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
6c20: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
6c30: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
6c40: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
6c50: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
6c60: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
6c70: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
6c80: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
6c90: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
6ca0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
6cb0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
6cc0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
6cd0: 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50   if( SQLITE_TEMP
6ce0: 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20  _STORE==0.      
6cf0: 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50   || (SQLITE_TEMP
6d00: 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d  _STORE==1 && db-
6d10: 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a  >temp_store<=1).
6d20: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
6d30: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20  E_TEMP_STORE==2 
6d40: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
6d50: 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20  e==1).      ){. 
6d60: 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74         invalidat
6d70: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
6d80: 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rse);.      }.  
6d90: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
6da0: 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69  (sqlite3_temp_di
6db0: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
6dc0: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
6dd0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
6de0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
6df0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
6e00: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
6e10: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
6e20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65        sqlite3_te
6e30: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  mp_directory = 0
6e40: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
6e50: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
6e60: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
6e70: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
6e80: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20   SQLITE_OS_WIN. 
6e90: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
6ea0: 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  A data_store_dir
6eb0: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
6ec0: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
6ed0: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
6ee0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
6ef0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
6f00: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
6f10: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  l value of the d
6f20: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
6f30: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
6f40: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
6f50: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
6f60: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
6f70: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
6f80: 62 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a  base files that.
6f90: 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66    ** were specif
6fa0: 69 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74  ied with a relat
6fb0: 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53  ive pathname.  S
6fc0: 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c  etting to a null
6fd0: 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a   string reverts.
6fe0: 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61    ** to the defa
6ff0: 75 6c 74 20 64 61 74 61 62 61 73 65 20 64 69 72  ult database dir
7000: 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f  ectory, which fo
7010: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
7020: 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 0a   specified with.
7030: 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20    ** a relative 
7040: 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62  path will probab
7050: 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ly be based on t
7060: 68 65 20 63 75 72 72 65 6e 74 20 64 69 72 65 63  he current direc
7070: 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a  tory for the.  *
7080: 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61  * process.  Data
7090: 62 61 73 65 20 66 69 6c 65 20 73 70 65 63 69 66  base file specif
70a0: 69 65 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f  ied with an abso
70b0: 6c 75 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f  lute path are no
70c0: 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20  t impacted.  ** 
70d0: 62 79 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c  by this setting,
70e0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69   regardless of i
70f0: 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20  ts value..  **. 
7100: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7110: 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49  yp_DATA_STORE_DI
7120: 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69  RECTORY: {.    i
7130: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
7140: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
7150: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29  data_directory )
7160: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
7170: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
7180: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  v, 1);.        s
7190: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
71a0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
71b0: 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20  ME_NAME, .      
71c0: 20 20 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72        "data_stor
71d0: 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51  e_directory", SQ
71e0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
71f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7200: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
7210: 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
7220: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
7230: 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20  ectory, 0);.    
7240: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7250: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
7260: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
7270: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
7280: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7290: 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69  OMIT_WSD.      i
72a0: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
72b0: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b          int res;
72c0: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
72d0: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
72e0: 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20  ->pVfs, zRight, 
72f0: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45  SQLITE_ACCESS_RE
7300: 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a  ADWRITE, &res);.
7310: 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
7320: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
7330: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
7340: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
7350: 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20  (pParse, "not a 
7360: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
7370: 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ry");.          
7380: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
7390: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
73a0: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
73b0: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61  _free(sqlite3_da
73c0: 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  ta_directory);. 
73d0: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
73e0: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
73f0: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7400: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
7410: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
7420: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
7430: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
7440: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
7450: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
7460: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7470: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
7480: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
7490: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
74a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
74b0: 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20  NG_STYLE.  /*.  
74c0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
74d0: 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78  abase.]lock_prox
74e0: 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52  y_file.  **   PR
74f0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
7500: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20  lock_proxy_file 
7510: 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b  = ":auto:"|"lock
7520: 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a  _file_path".  **
7530: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
7540: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  set the value of
7550: 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f   the lock_proxy_
7560: 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  file flag.  Chan
7570: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61  ging.  ** the va
7580: 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69  lue sets a speci
7590: 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20 75  fic file to be u
75a0: 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65  sed for database
75b0: 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20   access locks.. 
75c0: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
75d0: 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f  PragTyp_LOCK_PRO
75e0: 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69  XY_FILE: {.    i
75f0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
7600: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
7610: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
7620: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
7630: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f  .      char *pro
7640: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e  xy_file_path = N
7650: 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ULL;.      sqlit
7660: 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d  e3_file *pFile =
7670: 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
7680: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
7690: 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f   sqlite3OsFileCo
76a0: 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c  ntrolHint(pFile,
76b0: 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b   SQLITE_GET_LOCK
76c0: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76e0: 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69         &proxy_fi
76f0: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20  le_path);.      
7700: 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f 78 79  .      if( proxy
7710: 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20  _file_path ){.  
7720: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7730: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
7740: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
7750: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
7760: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
7770: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7790: 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f      "lock_proxy_
77a0: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
77b0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
77c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
77d0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
77e0: 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66  0, 1, 0, proxy_f
77f0: 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20  ile_path, 0);.  
7800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7810: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
7820: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
7830: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
7840: 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  e{.      Pager *
7850: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
7860: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
7870: 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  pBt);.      sqli
7880: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
7890: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
78a0: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
78b0: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
78c0: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
78d0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
78e0: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
78f0: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
7900: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
7910: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
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 7a 52 69 67 68 74            zRight
7940: 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  );.      } else 
7950: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
7960: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
7970: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
7980: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
7990: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
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 4e 55 4c 4c 29 3b            NULL);
79c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
79d0: 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f  f( res!=SQLITE_O
79e0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
79f0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
7a00: 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  rse, "failed to 
7a10: 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66  set lock proxy f
7a20: 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67  ile");.        g
7a30: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
7a40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
7a50: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
7a60: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
7a70: 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59  ABLE_LOCKING_STY
7a80: 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20  LE */      .    
7a90: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7aa0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
7ab0: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
7ac0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7ad0: 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  se.]synchronous=
7ae0: 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55  OFF|ON|NORMAL|FU
7af0: 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  LL.  **.  ** Ret
7b00: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
7b10: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
7b20: 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c  e synchronous fl
7b30: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
7b40: 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  ** the local val
7b50: 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  ue does not make
7b60: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
7b70: 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68  disk file and th
7b80: 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76  e.  ** default v
7b90: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
7ba0: 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74  tored the next t
7bb0: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
7bc0: 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e   is.  ** opened.
7bd0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
7be0: 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  gTyp_SYNCHRONOUS
7bf0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
7c00: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
7c10: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
7c20: 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  rse, "synchronou
7c30: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
7c40: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
7c50: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
7c60: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
7c70: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
7c80: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
7c90: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
7ca0: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
7cb0: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
7cc0: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
7cd0: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
7ce0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  lse{.        int
7cf0: 20 69 4c 65 76 65 6c 20 3d 20 28 67 65 74 53 61   iLevel = (getSa
7d00: 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74  fetyLevel(zRight
7d10: 2c 30 2c 31 29 2b 31 29 20 26 20 50 41 47 45 52  ,0,1)+1) & PAGER
7d20: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53  _SYNCHRONOUS_MAS
7d30: 4b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  K;.        if( i
7d40: 4c 65 76 65 6c 3d 3d 30 20 29 20 69 4c 65 76 65  Level==0 ) iLeve
7d50: 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70  l = 1;.        p
7d60: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
7d70: 20 3d 20 69 4c 65 76 65 6c 3b 0a 20 20 20 20 20   = iLevel;.     
7d80: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
7d90: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ags(db);.      }
7da0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
7db0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
7dc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
7dd0: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
7de0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7df0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20  T_FLAG_PRAGMAS. 
7e00: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c   case PragTyp_FL
7e10: 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  AG: {.    if( zR
7e20: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
7e30: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7e40: 28 70 50 61 72 73 65 2c 20 70 50 72 61 67 6d 61  (pParse, pPragma
7e50: 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e 66 6c  ->zName, (db->fl
7e60: 61 67 73 20 26 20 70 50 72 61 67 6d 61 2d 3e 69  ags & pPragma->i
7e70: 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d  Arg)!=0 );.    }
7e80: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
7e90: 6d 61 73 6b 20 3d 20 70 50 72 61 67 6d 61 2d 3e  mask = pPragma->
7ea0: 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73 6b  iArg;    /* Mask
7eb0: 20 6f 66 20 62 69 74 73 20 74 6f 20 73 65 74 20   of bits to set 
7ec0: 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20  or clear. */.   
7ed0: 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
7ee0: 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ommit==0 ){.    
7ef0: 20 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20 6b      /* Foreign k
7f00: 65 79 20 73 75 70 70 6f 72 74 20 6d 61 79 20 6e  ey support may n
7f10: 6f 74 20 62 65 20 65 6e 61 62 6c 65 64 20 6f 72  ot be enabled or
7f20: 20 64 69 73 61 62 6c 65 64 20 77 68 69 6c 65 20   disabled while 
7f30: 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  not.        ** i
7f40: 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f  n auto-commit mo
7f50: 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20  de.  */.        
7f60: 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45  mask &= ~(SQLITE
7f70: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20  _ForeignKeys);. 
7f80: 20 20 20 20 20 7d 0a 23 69 66 20 53 51 4c 49 54       }.#if SQLIT
7f90: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
7fa0: 41 54 49 4f 4e 0a 20 20 20 20 20 20 69 66 28 20  ATION.      if( 
7fb0: 64 62 2d 3e 61 75 74 68 2e 61 75 74 68 4c 65 76  db->auth.authLev
7fc0: 65 6c 3d 3d 55 41 55 54 48 5f 55 73 65 72 20 29  el==UAUTH_User )
7fd0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20  {.        /* Do 
7fe0: 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64  not allow non-ad
7ff0: 6d 69 6e 20 75 73 65 72 73 20 74 6f 20 6d 6f 64  min users to mod
8000: 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20 61  ify the schema a
8010: 72 62 69 74 72 61 72 69 6c 79 20 2a 2f 0a 20 20  rbitrarily */.  
8020: 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28        mask &= ~(
8030: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
8040: 6d 61 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  ma);.      }.#en
8050: 64 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20 73  dif..      if( s
8060: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
8070: 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20  (zRight, 0) ){. 
8080: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
8090: 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20   |= mask;.      
80a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
80b0: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73  b->flags &= ~mas
80c0: 6b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6d  k;.        if( m
80d0: 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65  ask==SQLITE_Defe
80e0: 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65 66 65  rFKs ) db->nDefe
80f0: 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b  rredImmCons = 0;
8100: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
8110: 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65 20 66  /* Many of the f
8120: 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69  lag-pragmas modi
8130: 66 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  fy the code gene
8140: 72 61 74 65 64 20 62 79 20 74 68 65 20 53 51 4c  rated by the SQL
8150: 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69   .      ** compi
8160: 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63  ler (eg. count_c
8170: 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64 64 20  hanges). So add 
8180: 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65 78 70  an opcode to exp
8190: 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a  ire all.      **
81a0: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
81b0: 61 74 65 6d 65 6e 74 73 20 61 66 74 65 72 20 6d  atements after m
81c0: 6f 64 69 66 79 69 6e 67 20 61 20 70 72 61 67 6d  odifying a pragm
81d0: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a  a value..      *
81e0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
81f0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8200: 45 78 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20  Expire, 0, 0);. 
8210: 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72       setAllPager
8220: 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d  Flags(db);.    }
8230: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8240: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
8250: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
8260: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
8270: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
8280: 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  A_PRAGMAS.  /*. 
8290: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61 62   **   PRAGMA tab
82a0: 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29  le_info(<table>)
82b0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
82c0: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66  n a single row f
82d0: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  or each column o
82e0: 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  f the named tabl
82f0: 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  e. The columns o
8300: 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75 72  f.  ** the retur
8310: 6e 65 64 20 64 61 74 61 20 73 65 74 20 61 72 65  ned data set are
8320: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a  :.  **.  ** cid:
8330: 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69          Column i
8340: 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  d (numbered from
8350: 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c 20   left to right, 
8360: 73 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a 20  starting at 0). 
8370: 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20 20   ** name:       
8380: 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a  Column name.  **
8390: 20 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f 6c   type:       Col
83a0: 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  umn declaration 
83b0: 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75  type..  ** notnu
83c0: 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20 27  ll:    True if '
83d0: 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61 72  NOT NULL' is par
83e0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
83f0: 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c  aration.  ** dfl
8400: 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65 66  t_value: The def
8410: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
8420: 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e  he column, if an
8430: 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  y..  */.  case P
8440: 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46  ragTyp_TABLE_INF
8450: 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  O: if( zRight ){
8460: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
8470: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
8480: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
8490: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
84a0: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
84b0: 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a        int i, k;.
84c0: 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64 64 65        int nHidde
84d0: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c  n = 0;.      Col
84e0: 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20  umn *pCol;.     
84f0: 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20 73 71   Index *pPk = sq
8500: 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
8510: 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20  ndex(pTab);.    
8520: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8530: 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20  NumCols(v, 6);. 
8540: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
8550: 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c  m = 6;.      sql
8560: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8570: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
8580: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8590: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
85a0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
85b0: 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45  E, "cid", SQLITE
85c0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
85d0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
85e0: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
85f0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
8600: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8610: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8620: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
8630: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
8640: 2c 20 22 74 79 70 65 22 2c 20 53 51 4c 49 54 45  , "type", SQLITE
8650: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
8660: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8670: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
8680: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75  AME_NAME, "notnu
8690: 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ll", SQLITE_STAT
86a0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
86b0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
86c0: 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 4, COLNAME_N
86d0: 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65  AME, "dflt_value
86e0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
86f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8700: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
8710: 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 5, COLNAME_NAM
8720: 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49 54 45 5f  E, "pk", SQLITE_
8730: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
8740: 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
8750: 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c  umnNames(pParse,
8760: 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f   pTab);.      fo
8770: 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62  r(i=0, pCol=pTab
8780: 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e  ->aCol; i<pTab->
8790: 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b  nCol; i++, pCol+
87a0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
87b0: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70  IsHiddenColumn(p
87c0: 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Col) ){.        
87d0: 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20    nHidden++;.   
87e0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
87f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
8800: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8810: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
8820: 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e 2c 20 31  er, i-nHidden, 1
8830: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8840: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
8850: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
8860: 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65  , 0, pCol->zName
8870: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
8880: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
8890: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
88a0: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
88b0: 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f     pCol->zType ?
88c0: 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22   pCol->zType : "
88d0: 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  ", 0);.        s
88e0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
88f0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
8900: 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f  (pCol->notNull ?
8910: 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a 20 20 20   1 : 0), 4);.   
8920: 20 20 20 20 20 69 66 28 20 70 43 6f 6c 2d 3e 7a       if( pCol->z
8930: 44 66 6c 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Dflt ){.        
8940: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8950: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
8960: 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28 63 68 61  8, 0, 5, 0, (cha
8970: 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20  r*)pCol->zDflt, 
8980: 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  0);.        }els
8990: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e{.          sql
89a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
89b0: 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29  , OP_Null, 0, 5)
89c0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
89d0: 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63      if( (pCol->c
89e0: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
89f0: 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b  G_PRIMKEY)==0 ){
8a00: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
8a10: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
8a20: 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20  if( pPk==0 ){.  
8a30: 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20          k = 1;. 
8a40: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
8a50: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b          for(k=1;
8a60: 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20 26   k<=pTab->nCol &
8a70: 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b  & pPk->aiColumn[
8a80: 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a  k-1]!=i; k++){}.
8a90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8aa0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8ab0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
8ac0: 72 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20 20  r, k, 6);.      
8ad0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8ae0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
8af0: 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20  Row, 1, 6);.    
8b00: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
8b10: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
8b20: 72 61 67 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a  ragTyp_STATS: {.
8b30: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
8b40: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 69  .    HashElem *i
8b50: 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  ;.    v = sqlite
8b60: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
8b70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8b80: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34  eSetNumCols(v, 4
8b90: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
8ba0: 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c  Mem = 4;.    sql
8bb0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8bc0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
8bd0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
8be0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
8bf0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
8c00: 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45   "table", SQLITE
8c10: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
8c20: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
8c30: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
8c40: 45 5f 4e 41 4d 45 2c 20 22 69 6e 64 65 78 22 2c  E_NAME, "index",
8c50: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
8c60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8c70: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
8c80: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
8c90: 77 69 64 74 68 22 2c 20 53 51 4c 49 54 45 5f 53  width", SQLITE_S
8ca0: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
8cb0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
8cc0: 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 3, COLNAME_
8cd0: 4e 41 4d 45 2c 20 22 68 65 69 67 68 74 22 2c 20  NAME, "height", 
8ce0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8cf0: 20 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65      for(i=sqlite
8d00: 48 61 73 68 46 69 72 73 74 28 26 70 44 62 2d 3e  HashFirst(&pDb->
8d10: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
8d20: 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61  ); i; i=sqliteHa
8d30: 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20  shNext(i)){.    
8d40: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
8d50: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69  sqliteHashData(i
8d60: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8d70: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
8d80: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20  _String8, 0, 1, 
8d90: 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20  0, pTab->zName, 
8da0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
8db0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8dc0: 50 5f 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b 0a 20  P_Null, 0, 2);. 
8dd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8de0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
8df0: 65 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  eger,.          
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e10: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
8e20: 45 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 73  EstToInt(pTab->s
8e30: 7a 54 61 62 52 6f 77 29 2c 20 33 29 3b 0a 20 20  zTabRow), 3);.  
8e40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8e50: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
8e60: 67 65 72 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ger, .          
8e70: 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45  (int)sqlite3LogE
8e80: 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 6e 52  stToInt(pTab->nR
8e90: 6f 77 4c 6f 67 45 73 74 29 2c 20 34 29 3b 0a 20  owLogEst), 4);. 
8ea0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8eb0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
8ec0: 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20  ultRow, 1, 4);. 
8ed0: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
8ee0: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
8ef0: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
8f00: 78 74 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  xt){.        sql
8f10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
8f20: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
8f30: 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61   2, 0, pIdx->zNa
8f40: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
8f50: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8f60: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
8f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
8f90: 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  nt)sqlite3LogEst
8fa0: 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64  ToInt(pIdx->szId
8fb0: 78 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20 20  xRow), 3);.     
8fc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8fd0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
8fe0: 65 72 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  er, .           
8ff0: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
9000: 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 61  EstToInt(pIdx->a
9010: 69 52 6f 77 4c 6f 67 45 73 74 5b 30 5d 29 2c 20  iRowLogEst[0]), 
9020: 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  4);.        sqli
9030: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9040: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9050: 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 4);.      }.  
9060: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
9070: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
9080: 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66 28  _INDEX_INFO: if(
9090: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49   zRight ){.    I
90a0: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
90b0: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
90c0: 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46   pIdx = sqlite3F
90d0: 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69  indIndex(db, zRi
90e0: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
90f0: 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20  f( pIdx ){.     
9100: 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 69 6e   int i;.      in
9110: 74 20 6d 78 3b 0a 20 20 20 20 20 20 69 66 28 20  t mx;.      if( 
9120: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b  pPragma->iArg ){
9130: 0a 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47  .        /* PRAG
9140: 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 28  MA index_xinfo (
9150: 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 20 77 69  newer version wi
9160: 74 68 20 6d 6f 72 65 20 72 6f 77 73 20 61 6e 64  th more rows and
9170: 20 63 6f 6c 75 6d 6e 73 29 20 2a 2f 0a 20 20 20   columns) */.   
9180: 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e       mx = pIdx->
9190: 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20 20 20  nColumn;.       
91a0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
91b0: 36 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  6;.      }else{.
91c0: 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47 4d          /* PRAGM
91d0: 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20 28 6c 65  A index_info (le
91e0: 67 61 63 79 20 76 65 72 73 69 6f 6e 29 20 2a 2f  gacy version) */
91f0: 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49  .        mx = pI
9200: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20  dx->nKeyCol;.   
9210: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
9220: 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a 20  m = 3;.      }. 
9230: 20 20 20 20 20 70 54 61 62 20 3d 20 70 49 64 78       pTab = pIdx
9240: 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20  ->pTable;.      
9250: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
9260: 6d 43 6f 6c 73 28 76 2c 20 70 50 61 72 73 65 2d  mCols(v, pParse-
9270: 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71  >nMem);.      sq
9280: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
9290: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
92a0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
92b0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
92c0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
92d0: 4d 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51 4c  ME, "seqno", SQL
92e0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
92f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9300: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
9310: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69  OLNAME_NAME, "ci
9320: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
9330: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
9340: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9350: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
9360: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
9370: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9380: 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69    if( pPragma->i
9390: 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 73  Arg ){.        s
93a0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
93b0: 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41  Name(v, 3, COLNA
93c0: 4d 45 5f 4e 41 4d 45 2c 20 22 64 65 73 63 22 2c  ME_NAME, "desc",
93d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
93e0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
93f0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9400: 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 4, COLNAME_NAM
9410: 45 2c 20 22 63 6f 6c 6c 22 2c 20 53 51 4c 49 54  E, "coll", SQLIT
9420: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
9430: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9440: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43  tColName(v, 5, C
9450: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6b 65  OLNAME_NAME, "ke
9460: 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  y", SQLITE_STATI
9470: 43 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  C);.      }.    
9480: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6d 78 3b    for(i=0; i<mx;
9490: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
94a0: 31 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e  16 cnum = pIdx->
94b0: 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20  aiColumn[i];.   
94c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
94d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
94e0: 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20  eger, i, 1);.   
94f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9500: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
9510: 65 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a  eger, cnum, 2);.
9520: 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 75 6d          if( cnum
9530: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
9540: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9550: 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c  2(v, OP_Null, 0,
9560: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c   3);.        }el
9570: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  se{.          sq
9580: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
9590: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
95a0: 2c 20 33 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43  , 3, 0, pTab->aC
95b0: 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20  ol[cnum].zName, 
95c0: 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
95d0: 20 20 20 20 20 20 69 66 28 20 70 50 72 61 67 6d        if( pPragm
95e0: 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20  a->iArg ){.     
95f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9600: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
9610: 65 67 65 72 2c 20 70 49 64 78 2d 3e 61 53 6f 72  eger, pIdx->aSor
9620: 74 4f 72 64 65 72 5b 69 5d 2c 20 34 29 3b 0a 20  tOrder[i], 4);. 
9630: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9640: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
9650: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20  _String8, 0, 5, 
9660: 30 2c 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b  0, pIdx->azColl[
9670: 69 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  i], 0);.        
9680: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9690: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
96a0: 72 2c 20 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43  r, i<pIdx->nKeyC
96b0: 6f 6c 2c 20 36 29 3b 0a 20 20 20 20 20 20 20 20  ol, 6);.        
96c0: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
96d0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
96e0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
96f0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20  pParse->nMem);. 
9700: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
9710: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
9720: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
9730: 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74  LIST: if( zRight
9740: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
9750: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
9760: 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b  pTab;.    int i;
9770: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
9780: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
9790: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
97a0: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
97b0: 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
97c0: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
97d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
97e0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
97f0: 35 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  5);.      pParse
9800: 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20 20 20 20  ->nMem = 5;.    
9810: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
9820: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
9830: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
9840: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9850: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
9860: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
9870: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
9880: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9890: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
98a0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
98b0: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
98c0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
98d0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
98e0: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
98f0: 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c  _NAME, "unique",
9900: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9910: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9920: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
9930: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
9940: 20 22 6f 72 69 67 69 6e 22 2c 20 53 51 4c 49 54   "origin", SQLIT
9950: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
9960: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9970: 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c  olName(v, 4, COL
9980: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 61 72 74  NAME_NAME, "part
9990: 69 61 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ial", SQLITE_STA
99a0: 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  TIC);.      for(
99b0: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
99c0: 78 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70 49  x, i=0; pIdx; pI
99d0: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
99e0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  i++){.        co
99f0: 6e 73 74 20 63 68 61 72 20 2a 61 7a 4f 72 69 67  nst char *azOrig
9a00: 69 6e 5b 5d 20 3d 20 7b 20 22 63 22 2c 20 22 75  in[] = { "c", "u
9a10: 22 2c 20 22 70 6b 22 20 7d 3b 0a 20 20 20 20 20  ", "pk" };.     
9a20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9a30: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
9a40: 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20  er, i, 1);.     
9a50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9a60: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
9a70: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64  g8, 0, 2, 0, pId
9a80: 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  x->zName, 0);.  
9a90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9aa0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
9ab0: 74 65 67 65 72 2c 20 49 73 55 6e 69 71 75 65 49  teger, IsUniqueI
9ac0: 6e 64 65 78 28 70 49 64 78 29 2c 20 33 29 3b 0a  ndex(pIdx), 3);.
9ad0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9ae0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
9af0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30  String8, 0, 4, 0
9b00: 2c 20 61 7a 4f 72 69 67 69 6e 5b 70 49 64 78 2d  , azOrigin[pIdx-
9b10: 3e 69 64 78 54 79 70 65 5d 2c 20 30 29 3b 0a 20  >idxType], 0);. 
9b20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9b30: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
9b40: 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 70 50  nteger, pIdx->pP
9b50: 61 72 74 49 64 78 57 68 65 72 65 21 3d 30 2c 20  artIdxWhere!=0, 
9b60: 35 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  5);.        sqli
9b70: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9b80: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9b90: 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 5);.      }.  
9ba0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
9bb0: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
9bc0: 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54 3a 20  _DATABASE_LIST: 
9bd0: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
9be0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
9bf0: 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20  umCols(v, 3);.  
9c00: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9c10: 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   3;.    sqlite3V
9c20: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
9c30: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
9c40: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
9c50: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
9c60: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
9c70: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
9c80: 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53  _NAME, "name", S
9c90: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
9ca0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9cb0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
9cc0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 69  OLNAME_NAME, "fi
9cd0: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  le", SQLITE_STAT
9ce0: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  IC);.    for(i=0
9cf0: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
9d00: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
9d10: 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29  >aDb[i].pBt==0 )
9d20: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
9d30: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
9d40: 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a  [i].zName!=0 );.
9d50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9d60: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
9d70: 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20  teger, i, 1);.  
9d80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9d90: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
9da0: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 64 62  ng8, 0, 2, 0, db
9db0: 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
9dc0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
9dd0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
9de0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
9df0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 73   0,.           s
9e00: 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46 69  qlite3BtreeGetFi
9e10: 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69  lename(db->aDb[i
9e20: 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20 20 20  ].pBt), 0);.    
9e30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9e40: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9e50: 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20  Row, 1, 3);.    
9e60: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
9e70: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
9e80: 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b  OLLATION_LIST: {
9e90: 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a  .    int i = 0;.
9ea0: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b      HashElem *p;
9eb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9ec0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29  SetNumCols(v, 2)
9ed0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
9ee0: 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69  em = 2;.    sqli
9ef0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
9f00: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
9f10: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
9f20: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9f30: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9f40: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
9f50: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
9f60: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9f70: 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71 6c  );.    for(p=sql
9f80: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
9f90: 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b 20  ->aCollSeq); p; 
9fa0: 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  p=sqliteHashNext
9fb0: 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c  (p)){.      Coll
9fc0: 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f  Seq *pColl = (Co
9fd0: 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61  llSeq *)sqliteHa
9fe0: 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20 20  shData(p);.     
9ff0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a000: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
a010: 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20 20 20 20  , i++, 1);.     
a020: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a030: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
a040: 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 6c  , 0, 2, 0, pColl
a050: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
a060: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a070: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
a080: 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20  tRow, 1, 2);.   
a090: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
a0a0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
a0b0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
a0c0: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
a0d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
a0e0: 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20  EIGN_KEY.  case 
a0f0: 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f  PragTyp_FOREIGN_
a100: 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52  KEY_LIST: if( zR
a110: 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79  ight ){.    FKey
a120: 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65   *pFK;.    Table
a130: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62   *pTab;.    pTab
a140: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
a150: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
a160: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
a170: 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  ab ){.      v = 
a180: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
a190: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 46  Parse);.      pF
a1a0: 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b  K = pTab->pFKey;
a1b0: 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29  .      if( pFK )
a1c0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 20  {.        int i 
a1d0: 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20 73 71  = 0; .        sq
a1e0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
a1f0: 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20 20 20 20  ols(v, 8);.     
a200: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
a210: 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  = 8;.        sql
a220: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
a230: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
a240: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
a250: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
a260: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
a270: 41 4d 45 2c 20 22 69 64 22 2c 20 53 51 4c 49 54  AME, "id", SQLIT
a280: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
a290: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a2a0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
a2b0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65  OLNAME_NAME, "se
a2c0: 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  q", SQLITE_STATI
a2d0: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
a2e0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
a2f0: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
a300: 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53  NAME, "table", S
a310: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
a320: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a330: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
a340: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
a350: 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54 45 5f   "from", SQLITE_
a360: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
a370: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
a380: 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c  olName(v, 4, COL
a390: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f 22 2c  NAME_NAME, "to",
a3a0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
a3b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a3c0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
a3d0: 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 5, COLNAME_NAM
a3e0: 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c 20  E, "on_update", 
a3f0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
a400: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a410: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
a420: 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   6, COLNAME_NAME
a430: 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 20 53  , "on_delete", S
a440: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
a450: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a460: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
a470: 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  7, COLNAME_NAME,
a480: 20 22 6d 61 74 63 68 22 2c 20 53 51 4c 49 54 45   "match", SQLITE
a490: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
a4a0: 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20    while(pFK){.  
a4b0: 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20          int j;. 
a4c0: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30           for(j=0
a4d0: 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a  ; j<pFK->nCol; j
a4e0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
a4f0: 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d 20 70 46   char *zCol = pF
a500: 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 3b  K->aCol[j].zCol;
a510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61  .            cha
a520: 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d 20 28  r *zOnDelete = (
a530: 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d  char *)actionNam
a540: 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30  e(pFK->aAction[0
a550: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
a560: 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61 74 65 20  char *zOnUpdate 
a570: 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e  = (char *)action
a580: 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f  Name(pFK->aActio
a590: 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  n[1]);.         
a5a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a5b0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
a5c0: 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20  er, i, 1);.     
a5d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a5e0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
a5f0: 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29 3b 0a 20  nteger, j, 2);. 
a600: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
a610: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
a620: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
a630: 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 30  , 0, pFK->zTo, 0
a640: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
a650: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
a660: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
a670: 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20 20 20  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 70 54 61 62 2d 3e 61 43 6f         pTab->aCo
a6a0: 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69  l[pFK->aCol[j].i
a6b0: 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b  From].zName, 0);
a6c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
a6d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
a6e0: 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74 72 69  , zCol ? OP_Stri
a6f0: 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c 20 30  ng8 : OP_Null, 0
a700: 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20 30 29  , 5, 0, zCol, 0)
a710: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
a720: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
a730: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
a740: 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70 64 61 74  , 6, 0, zOnUpdat
a750: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e, 0);.         
a760: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a770: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
a780: 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20 7a 4f 6e  g8, 0, 7, 0, zOn
a790: 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20 20 20 20  Delete, 0);.    
a7a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a7b0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
a7c0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 38 2c 20 30  String8, 0, 8, 0
a7d0: 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a 20 20  , "NONE", 0);.  
a7e0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a7f0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
a800: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
a810: 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  8);.          }.
a820: 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20            ++i;. 
a830: 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d 20 70           pFK = p
a840: 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a 20  FK->pNextFrom;. 
a850: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
a860: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
a870: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ak;.#endif /* !d
a880: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
a890: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
a8a0: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
a8b0: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
a8c0: 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  KEY.#ifndef SQLI
a8d0: 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
a8e0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
a8f0: 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b  OREIGN_KEY_CHECK
a900: 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46  : {.    FKey *pF
a910: 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
a920: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
a930: 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
a940: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
a950: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69 6c           /* Chil
a960: 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 20  d table contain 
a970: 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65 79  "REFERENCES" key
a980: 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62 6c  word */.    Tabl
a990: 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20 20  e *pParent;     
a9a0: 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61 62     /* Parent tab
a9b0: 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20 70 6f  le that child po
a9c0: 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20 49  ints to */.    I
a9d0: 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20  ndex *pIdx;     
a9e0: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
a9f0: 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62  n the parent tab
aa00: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  le */.    int i;
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa20: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
aa30: 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 6e  :  Foreign key n
aa40: 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20 2a  umber for pTab *
aa50: 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20 20  /.    int j;    
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aa70: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
aa80: 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72 65  ield of the fore
aa90: 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20 48  ign key */.    H
aaa0: 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20 20  ashElem *k;     
aab0: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
aac0: 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61 62  unter:  Next tab
aad0: 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a  le in schema */.
aae0: 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20 20      int x;      
aaf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65             /* re
ab00: 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a 2f  sult variable */
ab10: 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
ab20: 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 33  lt;         /* 3
ab30: 20 72 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   registers to ho
ab40: 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77 20  ld a result row 
ab50: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b 65  */.    int regKe
ab60: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  y;            /*
ab70: 20 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f 6c   Register to hol
ab80: 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b 69  d key for checki
ab90: 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20 20  ng the FK */.   
aba0: 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20 20   int regRow;    
abb0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
abc0: 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72  ters to hold a r
abd0: 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f 0a  ow from pTab */.
abe0: 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70 3b      int addrTop;
abf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
ac00: 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65 63  p of a loop chec
ac10: 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79  king foreign key
ac20: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  s */.    int add
ac30: 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  rOk;            
ac40: 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66 20  /* Jump here if 
ac50: 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a 2f  the key is OK */
ac60: 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 73  .    int *aiCols
ac70: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63  ;           /* c
ac80: 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20 63  hild to parent c
ac90: 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a 2f  olumn mapping */
aca0: 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74 20  ..    regResult 
acb0: 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31  = pParse->nMem+1
acc0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
acd0: 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67  em += 4;.    reg
ace0: 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Key = ++pParse->
acf0: 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77  nMem;.    regRow
ad00: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
ad10: 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  m;.    v = sqlit
ad20: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
ad30: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
ad40: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
ad50: 34 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  4);.    sqlite3V
ad60: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
ad70: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
ad80: 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54  , "table", SQLIT
ad90: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
ada0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
adb0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
adc0: 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77 69 64 22  ME_NAME, "rowid"
add0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
ade0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
adf0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
ae00: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
ae10: 22 70 61 72 65 6e 74 22 2c 20 53 51 4c 49 54 45  "parent", SQLITE
ae20: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
ae30: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
ae40: 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d  ame(v, 3, COLNAM
ae50: 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64 22 2c 20  E_NAME, "fkid", 
ae60: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
ae70: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
ae80: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
ae90: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b 20  se, iDb);.    k 
aea0: 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  = sqliteHashFirs
aeb0: 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t(&db->aDb[iDb].
aec0: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
aed0: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 6b 20  );.    while( k 
aee0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  ){.      if( zRi
aef0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ght ){.        p
af00: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63  Tab = sqlite3Loc
af10: 61 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c  ateTable(pParse,
af20: 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29   0, zRight, zDb)
af30: 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b  ;.        k = 0;
af40: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
af50: 20 20 20 20 20 20 70 54 61 62 20 3d 20 28 54 61        pTab = (Ta
af60: 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68 44  ble*)sqliteHashD
af70: 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20 20 20  ata(k);.        
af80: 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 4e 65  k = sqliteHashNe
af90: 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  xt(k);.      }. 
afa0: 20 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d 30       if( pTab==0
afb0: 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79 3d   || pTab->pFKey=
afc0: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
afd0: 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c       sqlite3Tabl
afe0: 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44  eLock(pParse, iD
aff0: 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30  b, pTab->tnum, 0
b000: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a  , pTab->zName);.
b010: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
b020: 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61 72  nCol+regRow>pPar
b030: 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72 73  se->nMem ) pPars
b040: 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d 3e  e->nMem = pTab->
b050: 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a 20  nCol + regRow;. 
b060: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
b070: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c  Table(pParse, 0,
b080: 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f   iDb, pTab, OP_O
b090: 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20  penRead);.      
b0a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b0b0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
b0c0: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 30   0, regResult, 0
b0d0: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20  , pTab->zName,. 
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0f0: 20 20 20 20 20 20 20 50 34 5f 54 52 41 4e 53 49         P4_TRANSI
b100: 45 4e 54 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  ENT);.      for(
b110: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
b120: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
b130: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
b140: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
b150: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69  rent = sqlite3Fi
b160: 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d  ndTable(db, pFK-
b170: 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20  >zTo, zDb);.    
b180: 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d      if( pParent=
b190: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
b1a0: 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b         pIdx = 0;
b1b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b1c0: 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65  TableLock(pParse
b1d0: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e  , iDb, pParent->
b1e0: 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74  tnum, 0, pParent
b1f0: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
b200: 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c    x = sqlite3FkL
b210: 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73  ocateIndex(pPars
b220: 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c  e, pParent, pFK,
b230: 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20   &pIdx, 0);.    
b240: 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a      if( x==0 ){.
b250: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
b260: 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  dx==0 ){.       
b270: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
b280: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c  Table(pParse, i,
b290: 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f   iDb, pParent, O
b2a0: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
b2b0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
b2c0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b2d0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
b2e0: 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20 70  P_OpenRead, i, p
b2f0: 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b  Idx->tnum, iDb);
b300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
b310: 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65 79  ite3VdbeSetP4Key
b320: 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64  Info(pParse, pId
b330: 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  x);.          }.
b340: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
b350: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a           k = 0;.
b360: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
b370: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
b380: 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
b390: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20   pParse->nErr>0 
b3a0: 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20  || pFK==0 );.   
b3b0: 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72 65     if( pFK ) bre
b3c0: 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50  ak;.      if( pP
b3d0: 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70  arse->nTab<i ) p
b3e0: 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b  Parse->nTab = i;
b3f0: 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d  .      addrTop =
b400: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b410: 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c  p1(v, OP_Rewind,
b420: 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   0); VdbeCoverag
b430: 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  e(v);.      for(
b440: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
b450: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
b460: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
b470: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
b480: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69  rent = sqlite3Fi
b490: 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d  ndTable(db, pFK-
b4a0: 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20  >zTo, zDb);.    
b4b0: 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20      pIdx = 0;.  
b4c0: 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20 30        aiCols = 0
b4d0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
b4e0: 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  arent ){.       
b4f0: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
b500: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
b510: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
b520: 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73  , &pIdx, &aiCols
b530: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  );.          ass
b540: 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20  ert( x==0 );.   
b550: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
b560: 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56  ddrOk = sqlite3V
b570: 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b  dbeMakeLabel(v);
b580: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
b590: 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30 20  rent && pIdx==0 
b5a0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
b5b0: 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f   iKey = pFK->aCo
b5c0: 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20  l[0].iFrom;.    
b5d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69 4b        assert( iK
b5e0: 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70 54  ey>=0 && iKey<pT
b5f0: 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20  ab->nCol );.    
b600: 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 21 3d        if( iKey!=
b610: 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20  pTab->iPKey ){. 
b620: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b630: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
b640: 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b  OP_Column, 0, iK
b650: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
b660: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b670: 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c  ColumnDefault(v,
b680: 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65 67   pTab, iKey, reg
b690: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
b6a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b6b0: 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op2(v, OP_IsNull
b6c0: 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b  , regRow, addrOk
b6d0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
b6e0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
b6f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b700: 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49 6e  2(v, OP_MustBeIn
b710: 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20 20 20  t, regRow, .    
b720: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b730: 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
b740: 72 28 76 29 2b 33 29 3b 20 56 64 62 65 43 6f 76  r(v)+3); VdbeCov
b750: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
b760: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b770: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b780: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
b790: 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77 29  owid, 0, regRow)
b7a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
b7b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b7c0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
b7d0: 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30 2c  NotExists, i, 0,
b7e0: 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65 43 6f   regRow); VdbeCo
b7f0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
b800: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b810: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74  AddOp2(v, OP_Got
b820: 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  o, 0, addrOk);. 
b830: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b840: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
b850: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
b860: 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20  ntAddr(v)-2);.  
b870: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
b880: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20         for(j=0; 
b890: 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b  j<pFK->nCol; j++
b8a0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
b8b0: 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
b8c0: 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76  tColumnOfTable(v
b8d0: 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20  , pTab, 0,.     
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8f0: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20         aiCols ? 
b900: 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d  aiCols[j] : pFK-
b910: 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20  >aCol[j].iFrom, 
b920: 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20  regRow+j);.     
b930: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b940: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
b950: 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c  sNull, regRow+j,
b960: 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f   addrOk); VdbeCo
b970: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
b980: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
b990: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b9b0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
b9c0: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20   OP_MakeRecord, 
b9d0: 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f  regRow, pFK->nCo
b9e0: 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20 20  l, regKey,.     
b9f0: 20 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 73 71 6c 69 74 65 33           sqlite3
ba10: 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
ba20: 28 76 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e  (v,pIdx), pFK->n
ba30: 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Col);.          
ba40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ba50: 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75  Op4Int(v, OP_Fou
ba60: 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72  nd, i, addrOk, r
ba70: 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20  egKey, 0);.     
ba80: 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
ba90: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
baa0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
bab0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bac0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f  eAddOp2(v, OP_Ro
bad0: 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c  wid, 0, regResul
bae0: 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  t+1);.        sq
baf0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
bb00: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
bb10: 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c 20 30  , regResult+2, 0
bb20: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b               pFK
bb40: 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52 41 4e 53 49  ->zTo, P4_TRANSI
bb50: 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 73 71  ENT);.        sq
bb60: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
bb70: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
bb80: 2d 31 2c 20 72 65 67 52 65 73 75 6c 74 2b 33 29  -1, regResult+3)
bb90: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
bba0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
bbb0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65 67  P_ResultRow, reg
bbc0: 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20  Result, 4);.    
bbd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
bbe0: 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61  esolveLabel(v, a
bbf0: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
bc00: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
bc10: 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20  , aiCols);.     
bc20: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
bc30: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
bc40: 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54 6f  _Next, 0, addrTo
bc50: 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61  p+1); VdbeCovera
bc60: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c  ge(v);.      sql
bc70: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
bc80: 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20 20  (v, addrTop);.  
bc90: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
bca0: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
bcb0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
bcc0: 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64  TRIGGER) */.#end
bcd0: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
bce0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
bcf0: 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e  GN_KEY) */..#ifn
bd00: 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61 73  def NDEBUG.  cas
bd10: 65 20 50 72 61 67 54 79 70 5f 50 41 52 53 45 52  e PragTyp_PARSER
bd20: 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69 66  _TRACE: {.    if
bd30: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
bd40: 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74    if( sqlite3Get
bd50: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
bd60: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0) ){.        sq
bd70: 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
bd80: 28 73 74 64 65 72 72 2c 20 22 70 61 72 73 65 72  (stderr, "parser
bd90: 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  : ");.      }els
bda0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
bdb0: 65 33 50 61 72 73 65 72 54 72 61 63 65 28 30 2c  e3ParserTrace(0,
bdc0: 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   0);.      }.   
bdd0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
bde0: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69  #endif..  /* Rei
bdf0: 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20  nstall the LIKE 
be00: 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f  and GLOB functio
be10: 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e 74  ns.  The variant
be20: 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73   of LIKE.  ** us
be30: 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65 20  ed will be case 
be40: 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f 74  sensitive or not
be50: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68   depending on th
be60: 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63 61  e RHS..  */.  ca
be70: 73 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f  se PragTyp_CASE_
be80: 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a 20  SENSITIVE_LIKE: 
be90: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
bea0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
beb0: 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
bec0: 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69 74  ctions(db, sqlit
bed0: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
bee0: 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d 0a  ght, 0));.    }.
bef0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69    }.  break;..#i
bf00: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 54  fndef SQLITE_INT
bf10: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
bf20: 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65 20  OR_MAX.# define 
bf30: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
bf40: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
bf50: 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66   100.#endif..#if
bf60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
bf70: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
bf80: 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71 75  .  /* Pragma "qu
bf90: 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 72 65  ick_check" is re
bfa0: 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  duced version of
bfb0: 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74 79   .  ** integrity
bfc0: 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64 20  _check designed 
bfd0: 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20 64  to detect most d
bfe0: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
bff0: 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74 20  on.  ** without 
c000: 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65 72  most of the over
c010: 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20 69  head of a full i
c020: 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a  ntegrity-check..
c030: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
c040: 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  Typ_INTEGRITY_CH
c050: 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  ECK: {.    int i
c060: 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72 72  , j, addr, mxErr
c070: 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20 74  ;..    /* Code t
c080: 68 61 74 20 61 70 70 65 61 72 73 20 61 74 20 74  hat appears at t
c090: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
c0a0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e 20 20  tegrity check.  
c0b0: 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20 20  If no error.    
c0c0: 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61 76 65  ** messages have
c0d0: 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65 64 2c   been generated,
c0e0: 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74 68   output OK.  Oth
c0f0: 65 72 77 69 73 65 20 6f 75 74 70 75 74 20 74 68  erwise output th
c100: 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72 20 6d  e.    ** error m
c110: 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20 20  essage.    */.  
c120: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
c130: 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46  nt iLn = VDBE_OF
c140: 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a  FSET_LINENO(2);.
c150: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
c160: 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43   VdbeOpList endC
c170: 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ode[] = {.      
c180: 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20 20 20 20  { OP_IfNeg,     
c190: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30    1, 0,        0
c1a0: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
c1b0: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38      { OP_String8
c1c0: 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20 20  ,     0, 3,     
c1d0: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a     0},    /* 1 *
c1e0: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73  /.      { OP_Res
c1f0: 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20  ultRow,   3, 1, 
c200: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d         0},.    }
c210: 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51 75 69  ;..    int isQui
c220: 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c  ck = (sqlite3Tol
c230: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
c240: 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  'q');..    /* If
c250: 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d   the PRAGMA comm
c260: 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65 20 66  and was of the f
c270: 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64 62 3e  orm "PRAGMA <db>
c280: 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
c290: 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20 69  ",.    ** then i
c2a0: 44 62 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  Db is set to the
c2b0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
c2c0: 74 61 62 61 73 65 20 69 64 65 6e 74 69 66 69 65  tabase identifie
c2d0: 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a  d by <db>..    *
c2e0: 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  * In this case, 
c2f0: 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66  the integrity of
c300: 20 64 61 74 61 62 61 73 65 20 69 44 62 20 6f 6e   database iDb on
c310: 6c 79 20 69 73 20 76 65 72 69 66 69 65 64 20 62  ly is verified b
c320: 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44 42  y.    ** the VDB
c330: 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f 77 2e  E created below.
c340: 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f  .    **.    ** O
c350: 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65  therwise, if the
c360: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d   command was sim
c370: 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e 74 65  ply "PRAGMA inte
c380: 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28 6f 72  grity_check" (or
c390: 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d 41 20  .    ** "PRAGMA 
c3a0: 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74  quick_check"), t
c3b0: 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74  hen iDb is set t
c3c0: 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63 61 73  o 0. In this cas
c3d0: 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20 20 2a  e, set iDb.    *
c3e0: 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f  * to -1 here, to
c3f0: 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 74   indicate that t
c400: 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64 20 76  he VDBE should v
c410: 65 72 69 66 79 20 74 68 65 20 69 6e 74 65 67 72  erify the integr
c420: 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c  ity.    ** of al
c430: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
c440: 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73  ases.  */.    as
c450: 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a  sert( iDb>=0 );.
c460: 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
c470: 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b  =0 || pId2->z );
c480: 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 7a  .    if( pId2->z
c490: 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a  ==0 ) iDb = -1;.
c4a0: 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
c4b0: 7a 65 20 74 68 65 20 56 44 42 45 20 70 72 6f 67  ze the VDBE prog
c4c0: 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72 73  ram */.    pPars
c4d0: 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20  e->nMem = 6;.   
c4e0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
c4f0: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
c500: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c510: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
c520: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 74  LNAME_NAME, "int
c530: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 20 53  egrity_check", S
c540: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a  QLITE_STATIC);..
c550: 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 6d      /* Set the m
c560: 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75  aximum error cou
c570: 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20  nt */.    mxErr 
c580: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  = SQLITE_INTEGRI
c590: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
c5a0: 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  AX;.    if( zRig
c5b0: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
c5c0: 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67  te3GetInt32(zRig
c5d0: 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20 20  ht, &mxErr);.   
c5e0: 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30 20     if( mxErr<=0 
c5f0: 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72 72  ){.        mxErr
c600: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
c610: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
c620: 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  MAX;.      }.   
c630: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
c640: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c650: 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20 31  nteger, mxErr, 1
c660: 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f  );  /* reg[1] ho
c670: 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74 20  lds errors left 
c680: 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e  */..    /* Do an
c690: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
c6a0: 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61 73   on each databas
c6b0: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f  e file */.    fo
c6c0: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
c6d0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61  ; i++){.      Ha
c6e0: 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20  shElem *x;.     
c6f0: 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20   Hash *pTbls;.  
c700: 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b      int cnt = 0;
c710: 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49 54  ..      if( OMIT
c720: 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31 20  _TEMPDB && i==1 
c730: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
c740: 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26 20    if( iDb>=0 && 
c750: 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e 75  i!=iDb ) continu
c760: 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e;..      sqlite
c770: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
c780: 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20 20  a(pParse, i);.  
c790: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
c7a0: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
c7b0: 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a  OP_IfPos, 1); /*
c7c0: 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66 20   Halt if out of 
c7d0: 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20  errors */.      
c7e0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
c7f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c800: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
c810: 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
c820: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
c830: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
c840: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20  .      /* Do an 
c850: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
c860: 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20 20  of the B-Tree.  
c870: 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
c880: 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67  Begin by filling
c890: 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33 2c   registers 2, 3,
c8a0: 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72 6f   ... with the ro
c8b0: 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72 73  ot pages numbers
c8c0: 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c  .      ** for al
c8d0: 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  l tables and ind
c8e0: 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ices in the data
c8f0: 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  base..      */. 
c900: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
c910: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
c920: 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29 3b  eld(db, i, 0) );
c930: 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26  .      pTbls = &
c940: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65  db->aDb[i].pSche
c950: 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20  ma->tblHash;.   
c960: 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48     for(x=sqliteH
c970: 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b  ashFirst(pTbls);
c980: 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68   x; x=sqliteHash
c990: 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
c9a0: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
c9b0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
c9c0: 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
c9d0: 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20   *pIdx;.        
c9e0: 69 66 28 20 48 61 73 52 6f 77 69 64 28 70 54 61  if( HasRowid(pTa
c9f0: 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  b) ){.          
ca00: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ca10: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
ca20: 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63   pTab->tnum, 2+c
ca30: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56  nt);.          V
ca40: 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22  dbeComment((v, "
ca50: 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  %s", pTab->zName
ca60: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e  ));.          cn
ca70: 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
ca80: 20 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d         for(pIdx=
ca90: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
caa0: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
cab0: 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20  Next){.         
cac0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cad0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
cae0: 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b  , pIdx->tnum, 2+
caf0: 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  cnt);.          
cb00: 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20  VdbeComment((v, 
cb10: 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  "%s", pIdx->zNam
cb20: 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63  e));.          c
cb30: 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
cb40: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
cb50: 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66 66  * Make sure suff
cb60: 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  icient number of
cb70: 20 72 65 67 69 73 74 65 72 73 20 68 61 76 65 20   registers have 
cb80: 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a  been allocated *
cb90: 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  /.      pParse->
cba0: 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61 72  nMem = MAX( pPar
cbb0: 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20  se->nMem, cnt+8 
cbc0: 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20  );..      /* Do 
cbd0: 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65 67  the b-tree integ
cbe0: 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20  rity checks */. 
cbf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cc00: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74  AddOp3(v, OP_Int
cc10: 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74  egrityCk, 2, cnt
cc20: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
cc30: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
cc40: 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20 20 20  v, (u8)i);.     
cc50: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
cc60: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
cc70: 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65  IsNull, 2); Vdbe
cc80: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
cc90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cca0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
ccb0: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20  g8, 0, 3, 0,.   
ccc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72        sqlite3MPr
ccd0: 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e  intf(db, "*** in
cce0: 20 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a   database %s ***
ccf0: 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  \n", db->aDb[i].
cd00: 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20  zName),.        
cd10: 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20   P4_DYNAMIC);.  
cd20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cd30: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76 65  ddOp3(v, OP_Move
cd40: 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20 20  , 2, 4, 1);.    
cd50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cd60: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
cd70: 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20  , 4, 3, 2);.    
cd80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cd90: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
cda0: 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20  Row, 2, 1);.    
cdb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
cdc0: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
cdd0: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
cde0: 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69  ure all the indi
cdf0: 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63  ces are construc
ce00: 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20  ted correctly.. 
ce10: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f       */.      fo
ce20: 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(x=sqliteHashFi
ce30: 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26 26  rst(pTbls); x &&
ce40: 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c   !isQuick; x=sql
ce50: 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b  iteHashNext(x)){
ce60: 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a  .        Table *
ce70: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
ce80: 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20  hData(x);.      
ce90: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a    Index *pIdx, *
cea0: 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  pPk;.        Ind
ceb0: 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b 0a  ex *pPrior = 0;.
cec0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70          int loop
ced0: 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  Top;.        int
cee0: 20 69 44 61 74 61 43 75 72 2c 20 69 49 64 78 43   iDataCur, iIdxC
cef0: 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ur;.        int 
cf00: 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20  r1 = -1;..      
cf10: 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64    if( pTab->pInd
cf20: 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ex==0 ) continue
cf30: 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d 20  ;.        pPk = 
cf40: 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 3f  HasRowid(pTab) ?
cf50: 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69 6d   0 : sqlite3Prim
cf60: 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62  aryKeyIndex(pTab
cf70: 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72 20  );.        addr 
cf80: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
cf90: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
cfa0: 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66   1);  /* Stop if
cfb0: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
cfc0: 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 43 6f  /.        VdbeCo
cfd0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
cfe0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cff0: 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
d000: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
d010: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
d020: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20  ere(v, addr);.  
d030: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
d040: 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61 72  rCacheClear(pPar
d050: 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  se);.        sql
d060: 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
d070: 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c 20  Indices(pParse, 
d080: 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  pTab, OP_OpenRea
d090: 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d,.             
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0b0: 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69 44 61        1, 0, &iDa
d0c0: 74 61 43 75 72 2c 20 26 69 49 64 78 43 75 72 29  taCur, &iIdxCur)
d0d0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d0e0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d0f0: 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37 29  P_Integer, 0, 7)
d100: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  ;.        for(j=
d110: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
d120: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
d130: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
d140: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  +){.          sq
d150: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d160: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
d170: 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78  , 8+j); /* index
d180: 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72   entries counter
d190: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
d1a0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
d1b0: 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65 2d  em = MAX(pParse-
d1c0: 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20  >nMem, 8+j);.   
d1d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d1e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77  AddOp2(v, OP_Rew
d1f0: 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20 30  ind, iDataCur, 0
d200: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
d210: 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70  v);.        loop
d220: 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Top = sqlite3Vdb
d230: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
d240: 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20  dImm, 7, 1);.   
d250: 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
d260: 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c  hat all NOT NULL
d270: 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20   columns really 
d280: 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a  are NOT NULL */.
d290: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
d2a0: 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a   j<pTab->nCol; j
d2b0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  ++){.          c
d2c0: 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20  har *zErr;.     
d2d0: 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a       int jmp2, j
d2e0: 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mp3;.          i
d2f0: 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65  f( j==pTab->iPKe
d300: 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  y ) continue;.  
d310: 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62          if( pTab
d320: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c  ->aCol[j].notNul
d330: 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  l==0 ) continue;
d340: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d350: 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
d360: 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54  umnOfTable(v, pT
d370: 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a 2c  ab, iDataCur, j,
d380: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
d390: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
d3a0: 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50  P5(v, OPFLAG_TYP
d3b0: 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20 20  EOFARG);.       
d3c0: 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65     jmp2 = sqlite
d3d0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
d3e0: 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56  P_NotNull, 3); V
d3f0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
d400: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d410: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d420: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
d430: 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65  ; /* Decrement e
d440: 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20  rror limit */.  
d450: 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20 73          zErr = s
d460: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
d470: 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  , "NULL value in
d480: 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a   %s.%s", pTab->z
d490: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a      pTab->aCol[j
d4c0: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
d4d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d4e0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d4f0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45  ng8, 0, 3, 0, zE
d500: 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b  rr, P4_DYNAMIC);
d510: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d520: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d530: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c  OP_ResultRow, 3,
d540: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a   1);.          j
d550: 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp3 = sqlite3Vdb
d560: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
d570: 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76  Pos, 1); VdbeCov
d580: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d590: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d5a0: 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp0(v, OP_Halt
d5b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d5c0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
d5d0: 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20  (v, jmp2);.     
d5e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d5f0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 33  JumpHere(v, jmp3
d600: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
d610: 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65       /* Validate
d620: 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 66   index entries f
d630: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  or the current r
d640: 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f  ow */.        fo
d650: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
d660: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
d670: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
d680: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
d690: 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33    int jmp2, jmp3
d6a0: 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20  , jmp4, jmp5;.  
d6b0: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55 6e          int ckUn
d6c0: 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iq = sqlite3Vdbe
d6d0: 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20  MakeLabel(v);.  
d6e0: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d          if( pPk=
d6f0: 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65  =pIdx ) continue
d700: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20 3d  ;.          r1 =
d710: 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
d720: 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c  IndexKey(pParse,
d730: 20 70 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c   pIdx, iDataCur,
d740: 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20   0, 0, &jmp3,.  
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d770: 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29       pPrior, r1)
d780: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 72 69  ;.          pPri
d790: 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20  or = pIdx;.     
d7a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d7b0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
d7c0: 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f  Imm, 8+j, 1);  /
d7d0: 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72  * increment entr
d7e0: 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20  y count */.     
d7f0: 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
d800: 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e 74  hat an index ent
d810: 72 79 20 65 78 69 73 74 73 20 66 6f 72 20 74 68  ry exists for th
d820: 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20  e current table 
d830: 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  row */.         
d840: 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56   jmp2 = sqlite3V
d850: 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
d860: 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75  OP_Found, iIdxCu
d870: 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c  r+j, ckUniq, r1,
d880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
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 70 49 64 78 2d 3e 6e 43 6f         pIdx->nCo
d8b0: 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65 72  lumn); VdbeCover
d8c0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
d8d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d8e0: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
d8f0: 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63  , 1, -1); /* Dec
d900: 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d  rement error lim
d910: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
d920: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d930: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
d940: 20 30 2c 20 33 2c 20 30 2c 20 22 72 6f 77 20 22   0, 3, 0, "row "
d950: 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
d960: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d970: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
d980: 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33 29  Concat, 7, 3, 3)
d990: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d9a0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
d9b0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
d9c0: 34 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20  4, 0, .         
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9e0: 20 20 20 22 20 6d 69 73 73 69 6e 67 20 66 72 6f     " missing fro
d9f0: 6d 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53 54  m index ", P4_ST
da00: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20  ATIC);.         
da10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
da20: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
da30: 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
da40: 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69       jmp5 = sqli
da50: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
da60: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
da70: 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  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 70 49 64 78 2d 3e 7a           pIdx->z
daa0: 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45  Name, P4_TRANSIE
dab0: 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  NT);.          s
dac0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
dad0: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34  (v, OP_Concat, 4
dae0: 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
daf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
db00: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
db10: 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20  tRow, 3, 1);.   
db20: 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73 71         jmp4 = sq
db30: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
db40: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
db50: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
db60: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
db70: 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c  te3VdbeAddOp0(v,
db80: 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20   OP_Halt);.     
db90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
dba0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32  JumpHere(v, jmp2
dbb0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  );.          /* 
dbc0: 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64 65 78  For UNIQUE index
dbd0: 65 73 2c 20 76 65 72 69 66 79 20 74 68 61 74 20  es, verify that 
dbe0: 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20 65  only one entry e
dbf0: 78 69 73 74 73 20 77 69 74 68 20 74 68 65 0a 20  xists with the. 
dc00: 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72 72           ** curr
dc10: 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65 6e  ent key.  The en
dc20: 74 72 79 20 69 73 20 75 6e 69 71 75 65 20 69 66  try is unique if
dc30: 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e 20   (1) any column 
dc40: 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20  is NULL.        
dc50: 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68 65 20    ** or (2) the 
dc60: 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73 20 61  next entry has a
dc70: 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79 20 2a   different key *
dc80: 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  /.          if( 
dc90: 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49  IsUniqueIndex(pI
dca0: 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  dx) ){.         
dcb0: 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d 20     int uniqOk = 
dcc0: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c  sqlite3VdbeMakeL
dcd0: 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20  abel(v);.       
dce0: 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a 20       int jmp6;. 
dcf0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b             int k
dd00: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  k;.            f
dd10: 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78  or(kk=0; kk<pIdx
dd20: 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29  ->nKeyCol; kk++)
dd30: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
dd40: 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64 78 2d  int iCol = pIdx-
dd50: 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20  >aiColumn[kk];. 
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
dd70: 65 72 74 28 20 69 43 6f 6c 3e 3d 30 20 26 26 20  ert( iCol>=0 && 
dd80: 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iCol<pTab->nCol 
dd90: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
dda0: 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b   if( pTab->aCol[
ddb0: 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20 29 20  iCol].notNull ) 
ddc0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
ddd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
dde0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
ddf0: 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c 20 75  IsNull, r1+kk, u
de00: 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  niqOk);.        
de10: 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
de20: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
de30: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
de40: 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65 33 56   jmp6 = sqlite3V
de50: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
de60: 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b 6a 29  Next, iIdxCur+j)
de70: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
de80: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
de90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
dea0: 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20  (v, OP_Goto, 0, 
deb0: 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20  uniqOk);.       
dec0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ded0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 36  JumpHere(v, jmp6
dee0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
def0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
df00: 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47 54 2c  Int(v, OP_IdxGT,
df10: 20 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e 69 71   iIdxCur+j, uniq
df20: 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20  Ok, 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 70 49 64 78 2d 3e 6e           pIdx->n
df50: 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65 43 6f 76  KeyCol); VdbeCov
df60: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
df70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
df80: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
df90: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a  dImm, 1, -1); /*
dfa0: 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72   Decrement error
dfb0: 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20   limit */.      
dfc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
dfd0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
dfe0: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a  ring8, 0, 3, 0,.
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
e010: 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20  on-unique entry 
e020: 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53  in index ", P4_S
e030: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
e040: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e050: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f  ddOp2(v, OP_Goto
e060: 2c 20 30 2c 20 6a 6d 70 35 29 3b 0a 20 20 20 20  , 0, jmp5);.    
e070: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e080: 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28  dbeResolveLabel(
e090: 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20  v, uniqOk);.    
e0a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
e0b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
e0c0: 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a  pHere(v, jmp4);.
e0d0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e0e0: 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
e0f0: 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70  abel(pParse, jmp
e100: 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  3);.        }.  
e110: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e120: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65  eAddOp2(v, OP_Ne
e130: 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c 6f  xt, iDataCur, lo
e140: 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76 65  opTop); VdbeCove
e150: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
e160: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
e170: 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d  Here(v, loopTop-
e180: 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  1);.#ifndef SQLI
e190: 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55  TE_OMIT_BTREECOU
e1a0: 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  NT.        sqlit
e1b0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
e1c0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
e1d0: 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 0, .          
e1e0: 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6f 6e             "wron
e1f0: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
e200: 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53 54  n index ", P4_ST
e210: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 66  ATIC);.        f
e220: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
e230: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
e240: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
e250: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
e260: 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78     if( pPk==pIdx
e270: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
e280: 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
e290: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
e2a0: 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20 20  Addr(v);.       
e2b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e2c0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp2(v, OP_IfPos
e2d0: 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20 56 64  , 1, addr+2); Vd
e2e0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
e2f0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e300: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e310: 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
e320: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e330: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e340: 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72 2b 6a  Count, iIdxCur+j
e350: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
e360: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e370: 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c  3(v, OP_Eq, 8+j,
e380: 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56 64 62   addr+8, 3); Vdb
e390: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
e3a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e3b0: 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 53  dbeChangeP5(v, S
e3c0: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a  QLITE_NOTNULL);.
e3d0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e3e0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e3f0: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
e400: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e410: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
e420: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
e430: 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  3, 0, pIdx->zNam
e440: 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29  e, P4_TRANSIENT)
e450: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e460: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
e470: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32   OP_Concat, 3, 2
e480: 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 7);.          
e490: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e4a0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
e4b0: 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 7, 1);.      
e4c0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
e4d0: 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
e4e0: 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20  OUNT */.      } 
e4f0: 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64 72 20  .    }.    addr 
e500: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
e510: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
e520: 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e  ize(endCode), en
e530: 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20 20  dCode, iLn);.   
e540: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
e550: 67 65 50 33 28 76 2c 20 61 64 64 72 2c 20 2d 6d  geP3(v, addr, -m
e560: 78 45 72 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  xErr);.    sqlit
e570: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
e580: 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 73 71 6c  , addr);.    sql
e590: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
e5a0: 28 76 2c 20 61 64 64 72 2b 31 2c 20 22 6f 6b 22  (v, addr+1, "ok"
e5b0: 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
e5c0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
e5d0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
e5e0: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
e5f0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
e600: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
e610: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
e620: 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20  A encoding.  ** 
e630: 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
e640: 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75 74 66  g = "utf-8"|"utf
e650: 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c  -16"|"utf-16le"|
e660: 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a  "utf-16be".  **.
e670: 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69 72 73    ** In its firs
e680: 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70 72 61  t form, this pra
e690: 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68 65 20  gma returns the 
e6a0: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20  encoding of the 
e6b0: 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61 62 61  main.  ** databa
e6c0: 73 65 2e 20 49 66 20 74 68 65 20 64 61 74 61 62  se. If the datab
e6d0: 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ase is not initi
e6e0: 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20 69 6e  alized, it is in
e6f0: 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20  itialized now.. 
e700: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65 63   **.  ** The sec
e710: 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 69 73  ond form of this
e720: 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e 6f 2d   pragma is a no-
e730: 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e 20 64  op if the main d
e740: 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 2a  atabase file.  *
e750: 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65 61 64  * has not alread
e760: 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  y been initializ
e770: 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
e780: 20 69 74 20 73 65 74 73 20 74 68 65 20 64 65 66   it sets the def
e790: 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f 64 69  ault.  ** encodi
e7a0: 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ng that will be 
e7b0: 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61 69  used for the mai
e7c0: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
e7d0: 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a 20 20  if a new file.  
e7e0: 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e 20 49  ** is created. I
e7f0: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d 61  f an existing ma
e800: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
e810: 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68 65 6e   is opened, then
e820: 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
e830: 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  t text encoding 
e840: 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e 67  for the existing
e850: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73 65   database is use
e860: 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e  d..  ** .  ** In
e870: 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77 20 64   all cases new d
e880: 61 74 61 62 61 73 65 73 20 63 72 65 61 74 65 64  atabases created
e890: 20 75 73 69 6e 67 20 74 68 65 20 41 54 54 41 43   using the ATTAC
e8a0: 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a 20 20  H command are.  
e8b0: 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  ** created to us
e8c0: 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61 75  e the same defau
e8d0: 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  lt text encoding
e8e0: 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   as the main dat
e8f0: 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a 20 74  abase. If.  ** t
e900: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
e910: 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 69 6e   has not been in
e920: 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f 6f 72  itialized and/or
e930: 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 41 54   created when AT
e940: 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65 78 65  TACH.  ** is exe
e950: 63 75 74 65 64 2c 20 74 68 69 73 20 69 73 20 64  cuted, this is d
e960: 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20 41  one before the A
e970: 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f 6e 2e  TTACH operation.
e980: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74 68  .  **.  ** In th
e990: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 68  e second form th
e9a0: 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20 74  is pragma sets t
e9b0: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
e9c0: 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 0a 20   to be used in. 
e9d0: 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61 73 65   ** new database
e9e0: 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 75   files created u
e9f0: 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62 61  sing this databa
ea00: 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20 69 73  se handle. It is
ea10: 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65 66 75   only.  ** usefu
ea20: 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69 6d 6d  l if invoked imm
ea30: 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74  ediately after t
ea40: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
ea50: 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50   i.  */.  case P
ea60: 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e 47 3a  ragTyp_ENCODING:
ea70: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
ea80: 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61  nst struct EncNa
ea90: 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  me {.      char 
eaa0: 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 75 38  *zName;.      u8
eab0: 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e 63 6e   enc;.    } encn
eac0: 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  ames[] = {.     
ead0: 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20 20 53   { "UTF8",     S
eae0: 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20  QLITE_UTF8      
eaf0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
eb00: 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54 45 5f  F-8",    SQLITE_
eb10: 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 20 20  UTF8        },  
eb20: 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
eb30: 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [1] */.      
eb40: 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20 53 51  { "UTF-16le", SQ
eb50: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20  LITE_UTF16LE    
eb60: 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
eb70: 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20  element [2] */. 
eb80: 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 62 65       { "UTF-16be
eb90: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  ", SQLITE_UTF16B
eba0: 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73  E     },  /* Mus
ebb0: 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 33 5d  t be element [3]
ebc0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
ebd0: 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45 5f 55  16le",  SQLITE_U
ebe0: 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20  TF16LE     },.  
ebf0: 20 20 20 20 7b 20 22 55 54 46 31 36 62 65 22 2c      { "UTF16be",
ec00: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
ec10: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
ec20: 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20 20 20  "UTF-16",   0   
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ec40: 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31  , /* SQLITE_UTF1
ec50: 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20  6NATIVE */.     
ec60: 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20 20 30   { "UTF16",    0
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec80: 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55    }, /* SQLITE_U
ec90: 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20  TF16NATIVE */.  
eca0: 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20      { 0, 0 }.   
ecb0: 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20 73 74   };.    const st
ecc0: 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45  ruct EncName *pE
ecd0: 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  nc;.    if( !zRi
ece0: 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22 50 52  ght ){    /* "PR
ecf0: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a  AGMA encoding" *
ed00: 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  /.      if( sqli
ed10: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
ed20: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
ed30: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 73  gma_out;.      s
ed40: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
ed50: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
ed60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
ed70: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
ed80: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 65 6e 63  LNAME_NAME, "enc
ed90: 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54 45 5f 53  oding", SQLITE_S
eda0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
edb0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
edc0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
edd0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73 65  , 1);.      asse
ede0: 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
edf0: 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53  ITE_UTF8].enc==S
ee00: 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20  QLITE_UTF8 );.  
ee10: 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
ee20: 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31  ames[SQLITE_UTF1
ee30: 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  6LE].enc==SQLITE
ee40: 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20 20  _UTF16LE );.    
ee50: 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
ee60: 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 42  es[SQLITE_UTF16B
ee70: 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  E].enc==SQLITE_U
ee80: 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20 20  TF16BE );.      
ee90: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
eea0: 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e 63 6e 61  eP4(v, -1, encna
eeb0: 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e  mes[ENC(pParse->
eec0: 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53  db)].zName, P4_S
eed0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
eee0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
eef0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
ef00: 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 65 6c 73   1, 1);.    }els
ef10: 65 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e{              
ef20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50 52            /* "PR
ef30: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
ef40: 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  XXX" */.      /*
ef50: 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68 65   Only change the
ef60: 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65   value of sqlite
ef70: 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61 74 61  .enc if the data
ef80: 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20 6e  base handle is n
ef90: 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69 74  ot.      ** init
efa0: 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65 20  ialized. If the 
efb0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 65 78  main database ex
efc0: 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73 71  ists, the new sq
efd0: 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20  lite.enc value. 
efe0: 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20       ** will be 
eff0: 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68 65 6e  overwritten when
f000: 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e   the schema is n
f010: 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20 69  ext loaded. If i
f020: 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20  t does not.     
f030: 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69 73   ** already exis
f040: 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 63  ts, it will be c
f050: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
f060: 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20 76  e new encoding v
f070: 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
f080: 20 20 20 20 20 69 66 28 20 0a 20 20 20 20 20 20       if( .      
f090: 20 20 21 28 44 62 48 61 73 50 72 6f 70 65 72 74    !(DbHasPropert
f0a0: 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65  y(db, 0, DB_Sche
f0b0: 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20  maLoaded)) || . 
f0c0: 20 20 20 20 20 20 20 44 62 48 61 73 50 72 6f 70         DbHasProp
f0d0: 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 45  erty(db, 0, DB_E
f0e0: 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b 0a  mpty) .      ){.
f0f0: 20 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e 63          for(pEnc
f100: 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70  =&encnames[0]; p
f110: 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63  Enc->zName; pEnc
f120: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
f130: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
f140: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45 6e  ICmp(zRight, pEn
f150: 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20  c->zName) ){.   
f160: 20 20 20 20 20 20 20 20 20 53 43 48 45 4d 41 5f           SCHEMA_
f170: 45 4e 43 28 64 62 29 20 3d 20 45 4e 43 28 64 62  ENC(db) = ENC(db
f180: 29 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) =.            
f190: 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20      pEnc->enc ? 
f1a0: 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49  pEnc->enc : SQLI
f1b0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a  TE_UTF16NATIVE;.
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
f1d0: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
f1e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
f1f0: 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d   if( !pEnc->zNam
f200: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
f210: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
f220: 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72  Parse, "unsuppor
f230: 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73  ted encoding: %s
f240: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
f250: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
f260: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
f270: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
f280: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
f290: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f2a0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
f2b0: 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  ION_PRAGMAS.  /*
f2c0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
f2d0: 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61  database.]schema
f2e0: 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  _version.  **   
f2f0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
f300: 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
f310: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
f320: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
f330: 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f  [database.]user_
f340: 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50  version.  **   P
f350: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
f360: 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20  ]user_version = 
f370: 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
f380: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
f390: 74 61 62 61 73 65 2e 5d 66 72 65 65 6c 69 73 74  tabase.]freelist
f3a0: 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74 65 67 65  _count = <intege
f3b0: 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
f3c0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
f3d0: 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a  ]application_id.
f3e0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
f3f0: 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61  atabase.]applica
f400: 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67  tion_id = <integ
f410: 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er>.  **.  ** Th
f420: 65 20 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d  e pragma's schem
f430: 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73  a_version and us
f440: 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75  er_version are u
f450: 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65  sed to set or ge
f460: 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  t.  ** the value
f470: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76   of the schema-v
f480: 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d  ersion and user-
f490: 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74  version, respect
f4a0: 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a  ively. Both.  **
f4b0: 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
f4c0: 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72  ion and the user
f4d0: 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d  -version are 32-
f4e0: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
f4f0: 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20  ers.  ** stored 
f500: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
f510: 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a  header..  **.  *
f520: 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  * The schema-coo
f530: 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f  kie is usually o
f540: 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20  nly manipulated 
f550: 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
f560: 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73  Lite. It.  ** is
f570: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
f580: 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20  SQLite whenever 
f590: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
f5a0: 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20  ema is modified 
f5b0: 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e  (by.  ** creatin
f5c0: 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20  g or dropping a 
f5d0: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e  table or index).
f5e0: 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   The schema vers
f5f0: 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20  ion is used by. 
f600: 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20   ** SQLite each 
f610: 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73 20  time a query is 
f620: 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75  executed to ensu
f630: 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  re that the inte
f640: 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20  rnal cache.  ** 
f650: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 75 73  of the schema us
f660: 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
f670: 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79 20  g the SQL query 
f680: 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68 65  matches the sche
f690: 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64  ma of.  ** the d
f6a0: 61 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20  atabase against 
f6b0: 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c  which the compil
f6c0: 65 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75  ed query is actu
f6d0: 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20  ally executed.. 
f6e0: 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74   ** Subverting t
f6f0: 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79  his mechanism by
f700: 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73   using "PRAGMA s
f710: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74  chema_version" t
f720: 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68  o modify.  ** th
f730: 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
f740: 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20   is potentially 
f750: 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61  dangerous and ma
f760: 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61  y lead to progra
f770: 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f  m.  ** crashes o
f780: 72 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  r database corru
f790: 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20  ption. Use with 
f7a0: 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20  caution!.  **.  
f7b0: 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65 72 73  ** The user-vers
f7c0: 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ion is not used 
f7d0: 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
f7e0: 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20  Lite. It may be 
f7f0: 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70  used by.  ** app
f800: 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e  lications for an
f810: 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a  y purpose..  */.
f820: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48    case PragTyp_H
f830: 45 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20  EADER_VALUE: {. 
f840: 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 20 3d     int iCookie =
f850: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20   pPragma->iArg; 
f860: 20 2f 2a 20 57 68 69 63 68 20 63 6f 6f 6b 69 65   /* Which cookie
f870: 20 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74   to read or writ
f880: 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  e */.    sqlite3
f890: 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
f8a0: 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28 20 7a   iDb);.    if( z
f8b0: 52 69 67 68 74 20 26 26 20 28 70 50 72 61 67 6d  Right && (pPragm
f8c0: 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  a->mPragFlag & P
f8d0: 72 61 67 46 6c 61 67 5f 52 65 61 64 4f 6e 6c 79  ragFlag_ReadOnly
f8e0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  )==0 ){.      /*
f8f0: 20 57 72 69 74 65 20 74 68 65 20 73 70 65 63 69   Write the speci
f900: 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75  fied cookie valu
f910: 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  e */.      stati
f920: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
f930: 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d  st setCookie[] =
f940: 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f   {.        { OP_
f950: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
f960: 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  1,  0},    /
f970: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 0 */.        {
f980: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
f990: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
f9a0: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
f9b0: 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69     { OP_SetCooki
f9c0: 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20  e,      0,  0,  
f9d0: 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  1},    /* 2 */. 
f9e0: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
f9f0: 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33  t addr = sqlite3
fa00: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
fa10: 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f   ArraySize(setCo
fa20: 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65  okie), setCookie
fa30: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
fa40: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
fa50: 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20  v, addr, iDb);. 
fa60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fa70: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
fa80: 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28  +1, sqlite3Atoi(
fa90: 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20  zRight));.      
faa0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
fab0: 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c 20 69  eP1(v, addr+2, i
fac0: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
fad0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
fae0: 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b 69  , addr+2, iCooki
faf0: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
fb00: 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65       /* Read the
fb10: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69   specified cooki
fb20: 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  e value */.     
fb30: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
fb40: 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f 6f  beOpList readCoo
fb50: 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  kie[] = {.      
fb60: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
fb70: 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20  on,     0,  0,  
fb80: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
fb90: 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64         { OP_Read
fba0: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
fbb0: 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31   1,  0},    /* 1
fbc0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
fbd0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20 20  _ResultRow,     
fbe0: 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20    1,  1,  0}.   
fbf0: 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20     };.      int 
fc00: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
fc10: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
fc20: 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f  rraySize(readCoo
fc30: 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65  kie), readCookie
fc40: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
fc50: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
fc60: 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20  v, addr, iDb);. 
fc70: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fc80: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
fc90: 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  +1, iDb);.      
fca0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
fcb0: 65 50 33 28 76 2c 20 61 64 64 72 2b 31 2c 20 69  eP3(v, addr+1, i
fcc0: 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73  Cookie);.      s
fcd0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
fce0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
fcf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
fd00: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
fd10: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66  LNAME_NAME, zLef
fd20: 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  t, SQLITE_TRANSI
fd30: 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ENT);.    }.  }.
fd40: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
fd50: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  /* SQLITE_OMIT_S
fd60: 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52  CHEMA_VERSION_PR
fd70: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
fd80: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
fd90: 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
fda0: 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  S.  /*.  **   PR
fdb0: 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74  AGMA compile_opt
fdc0: 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ions.  **.  ** R
fdd0: 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20  eturn the names 
fde0: 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74  of all compile-t
fdf0: 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64  ime options used
fe00: 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a   in this build,.
fe10: 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20    ** one option 
fe20: 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20  per row..  */.  
fe30: 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d  case PragTyp_COM
fe40: 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a  PILE_OPTIONS: {.
fe50: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20      int i = 0;. 
fe60: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
fe70: 4f 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Opt;.    sqlite3
fe80: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
fe90: 2c 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 1);.    pParse
fea0: 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20  ->nMem = 1;.    
feb0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
fec0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
fed0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69  AME_NAME, "compi
fee0: 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49  le_option", SQLI
fef0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
ff00: 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73  while( (zOpt = s
ff10: 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
ff20: 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d  tion_get(i++))!=
ff30: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
ff40: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
ff50: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
ff60: 2c 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20  , 0, zOpt, 0);. 
ff70: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ff80: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
ff90: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
ffa0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
ffb0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
ffc0: 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
ffd0: 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a  PTION_DIAGS */..
ffe0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
fff0: 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a  MIT_WAL.  /*.  *
10000 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
10010 62 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b 70  base.]wal_checkp
10020 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c 66  oint = passive|f
10030 75 6c 6c 7c 72 65 73 74 61 72 74 7c 74 72 75 6e  ull|restart|trun
10040 63 61 74 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43  cate.  **.  ** C
10050 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20 64 61  heckpoint the da
10060 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63  tabase..  */.  c
10070 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f  ase PragTyp_WAL_
10080 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20  CHECKPOINT: {.  
10090 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49 64    int iBt = (pId
100a0 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f  2->z?iDb:SQLITE_
100b0 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a 20  MAX_ATTACHED);. 
100c0 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53     int eMode = S
100d0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
100e0 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69 66  _PASSIVE;.    if
100f0 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
10100 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
10110 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66 75  ICmp(zRight, "fu
10120 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ll")==0 ){.     
10130 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54     eMode = SQLIT
10140 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c  E_CHECKPOINT_FUL
10150 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  L;.      }else i
10160 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
10170 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74 61  p(zRight, "resta
10180 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  rt")==0 ){.     
10190 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54     eMode = SQLIT
101a0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
101b0 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c 73  TART;.      }els
101c0 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
101d0 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 74 72  ICmp(zRight, "tr
101e0 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a 20  uncate")==0 ){. 
101f0 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53         eMode = S
10200 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
10210 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20 20 20  _TRUNCATE;.     
10220 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c   }.    }.    sql
10230 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
10240 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50  ls(v, 3);.    pP
10250 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
10260 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
10270 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
10280 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 62  COLNAME_NAME, "b
10290 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  usy", SQLITE_STA
102a0 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
102b0 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
102c0 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
102d0 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49 54  ME, "log", SQLIT
102e0 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
102f0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
10300 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
10310 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b 70  ME_NAME, "checkp
10320 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45 5f  ointed", SQLITE_
10330 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73 71  STATIC);..    sq
10340 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
10350 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74  v, OP_Checkpoint
10360 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29  , iBt, eMode, 1)
10370 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
10380 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
10390 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a  sultRow, 1, 3);.
103a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
103b0 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
103c0 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f   wal_autocheckpo
103d0 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  int.  **   PRAGM
103e0 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
103f0 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  oint = N.  **.  
10400 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64  ** Configure a d
10410 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
10420 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61  on to automatica
10430 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61  lly checkpoint a
10440 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61   database.  ** a
10450 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e  fter accumulatin
10460 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68  g N frames in th
10470 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20  e log. Or query 
10480 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
10490 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e  value.  ** of N.
104a0 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
104b0 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45  gTyp_WAL_AUTOCHE
104c0 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69  CKPOINT: {.    i
104d0 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
104e0 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61     sqlite3_wal_a
104f0 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62  utocheckpoint(db
10500 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52  , sqlite3Atoi(zR
10510 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ight));.    }.  
10520 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
10530 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f 61  t(pParse, "wal_a
10540 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20  utocheckpoint", 
10550 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c  .       db->xWal
10560 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65  Callback==sqlite
10570 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20  3WalDefaultHook 
10580 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53 51  ? .           SQ
10590 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
105a0 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30  db->pWalArg) : 0
105b0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
105c0 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a  #endif..  /*.  *
105d0 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b  *  PRAGMA shrink
105e0 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a  _memory.  **.  *
105f0 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
10600 2d 4f 46 3a 20 52 2d 32 33 34 34 35 2d 34 36 31  -OF: R-23445-461
10610 30 39 20 54 68 69 73 20 70 72 61 67 6d 61 20 63  09 This pragma c
10620 61 75 73 65 73 20 74 68 65 20 64 61 74 61 62 61  auses the databa
10630 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69  se.  ** connecti
10640 6f 6e 20 6f 6e 20 77 68 69 63 68 20 69 74 20 69  on on which it i
10650 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 66 72 65  s invoked to fre
10660 65 20 75 70 20 61 73 20 6d 75 63 68 20 6d 65 6d  e up as much mem
10670 6f 72 79 20 61 73 20 69 74 0a 20 20 2a 2a 20 63  ory as it.  ** c
10680 61 6e 2c 20 62 79 20 63 61 6c 6c 69 6e 67 20 73  an, by calling s
10690 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
106a0 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a 20 20 2a 2f  e_memory()..  */
106b0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
106c0 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b  SHRINK_MEMORY: {
106d0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
106e0 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 64  release_memory(d
106f0 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  b);.    break;. 
10700 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
10710 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65  PRAGMA busy_time
10720 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  out.  **   PRAGM
10730 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d  A busy_timeout =
10740 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c   N.  **.  ** Cal
10750 6c 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74  l sqlite3_busy_t
10760 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20  imeout(db, N).  
10770 52 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65  Return the curre
10780 6e 74 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65  nt timeout value
10790 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20  .  ** if one is 
107a0 73 65 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79  set.  If no busy
107b0 20 68 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69   handler or a di
107c0 66 66 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e  fferent busy han
107d0 64 6c 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a  dler is set.  **
107e0 20 74 68 65 6e 20 30 20 69 73 20 72 65 74 75 72   then 0 is retur
107f0 6e 65 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68  ned.  Setting th
10800 65 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74  e busy_timeout t
10810 6f 20 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a  o 0 or negative.
10820 20 20 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68    ** disables th
10830 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a  e timeout..  */.
10840 20 20 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70    /*case PragTyp
10850 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20  _BUSY_TIMEOUT*/ 
10860 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61  default: {.    a
10870 73 73 65 72 74 28 20 70 50 72 61 67 6d 61 2d 3e  ssert( pPragma->
10880 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79  ePragTyp==PragTy
10890 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29  p_BUSY_TIMEOUT )
108a0 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
108b0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
108c0 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
108d0 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
108e0 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
108f0 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
10900 6e 74 28 70 50 61 72 73 65 2c 20 22 74 69 6d 65  nt(pParse, "time
10910 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54  out",  db->busyT
10920 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65  imeout);.    bre
10930 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
10940 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
10950 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a  _heap_limit.  **
10960 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68     PRAGMA soft_h
10970 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20  eap_limit = N.  
10980 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  **.  ** IMPLEMEN
10990 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33  TATION-OF: R-263
109a0 34 33 2d 34 35 39 33 30 20 54 68 69 73 20 70 72  43-45930 This pr
109b0 61 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74 68 65  agma invokes the
109c0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f  .  ** sqlite3_so
109d0 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
109e0 29 20 69 6e 74 65 72 66 61 63 65 20 77 69 74 68  ) interface with
109f0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 4e 2c   the argument N,
10a00 20 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20 73 70   if N is.  ** sp
10a10 65 63 69 66 69 65 64 20 61 6e 64 20 69 73 20 61  ecified and is a
10a20 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   non-negative in
10a30 74 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c  teger..  ** IMPL
10a40 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
10a50 2d 36 34 34 35 31 2d 30 37 31 36 33 20 54 68 65  -64451-07163 The
10a60 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
10a70 20 70 72 61 67 6d 61 20 61 6c 77 61 79 73 0a 20   pragma always. 
10a80 20 2a 2a 20 72 65 74 75 72 6e 73 20 74 68 65 20   ** returns the 
10a90 73 61 6d 65 20 69 6e 74 65 67 65 72 20 74 68 61  same integer tha
10aa0 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72  t would be retur
10ab0 6e 65 64 20 62 79 20 74 68 65 0a 20 20 2a 2a 20  ned by the.  ** 
10ac0 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
10ad0 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20 43 2d  p_limit64(-1) C-
10ae0 6c 61 6e 67 75 61 67 65 20 66 75 6e 63 74 69 6f  language functio
10af0 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  n..  */.  case P
10b00 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
10b10 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71  _LIMIT: {.    sq
10b20 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20  lite3_int64 N;. 
10b30 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26     if( zRight &&
10b40 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
10b50 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e  ToI64(zRight, &N
10b60 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )==SQLITE_OK ){.
10b70 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f        sqlite3_so
10b80 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
10b90 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  N);.    }.    re
10ba0 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
10bb0 61 72 73 65 2c 20 22 73 6f 66 74 5f 68 65 61 70  arse, "soft_heap
10bc0 5f 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65  _limit",  sqlite
10bd0 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
10be0 74 36 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72  t64(-1));.    br
10bf0 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
10c00 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72   **   PRAGMA thr
10c10 65 61 64 73 0a 20 20 2a 2a 20 20 20 50 52 41 47  eads.  **   PRAG
10c20 4d 41 20 74 68 72 65 61 64 73 20 3d 20 4e 0a 20  MA threads = N. 
10c30 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75   **.  ** Configu
10c40 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  re the maximum n
10c50 75 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65 72 20  umber of worker 
10c60 74 68 72 65 61 64 73 2e 20 20 52 65 74 75 72 6e  threads.  Return
10c70 20 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20 6d 61   the new.  ** ma
10c80 78 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d 69 67  ximum, which mig
10c90 68 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  ht be less than 
10ca0 72 65 71 75 65 73 74 65 64 2e 0a 20 20 2a 2f 0a  requested..  */.
10cb0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54    case PragTyp_T
10cc0 48 52 45 41 44 53 3a 20 7b 0a 20 20 20 20 73 71  HREADS: {.    sq
10cd0 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20  lite3_int64 N;. 
10ce0 20 20 20 69 66 28 20 7a 52 69 67 68 74 0a 20 20     if( zRight.  
10cf0 20 20 20 26 26 20 73 71 6c 69 74 65 33 44 65 63     && sqlite3Dec
10d00 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
10d10 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f  t, &N)==SQLITE_O
10d20 4b 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30 0a 20  K.     && N>=0. 
10d30 20 20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69     ){.      sqli
10d40 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51  te3_limit(db, SQ
10d50 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
10d60 52 5f 54 48 52 45 41 44 53 2c 20 28 69 6e 74 29  R_THREADS, (int)
10d70 28 4e 26 30 78 37 66 66 66 66 66 66 66 29 29 3b  (N&0x7fffffff));
10d80 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
10d90 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
10da0 65 2c 20 22 74 68 72 65 61 64 73 22 2c 0a 20 20  e, "threads",.  
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dc0 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28    sqlite3_limit(
10dd0 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54  db, SQLITE_LIMIT
10de0 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
10df0 20 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b   -1));.    break
10e00 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e  ;.  }..#if defin
10e10 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
10e20 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
10e30 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20  TE_TEST).  /*.  
10e40 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75  ** Report the cu
10e50 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66  rrent state of f
10e60 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c  ile logs for all
10e70 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a   databases.  */.
10e80 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c    case PragTyp_L
10e90 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20  OCK_STATUS: {.  
10ea0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
10eb0 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63  har *const azLoc
10ec0 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  kName[] = {.    
10ed0 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73    "unlocked", "s
10ee0 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65  hared", "reserve
10ef0 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22  d", "pending", "
10f00 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d  exclusive".    }
10f10 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
10f20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
10f30 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20  umCols(v, 2);.  
10f40 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
10f50 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   2;.    sqlite3V
10f60 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
10f70 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
10f80 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20 53 51  , "database", SQ
10f90 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
10fa0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
10fb0 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
10fc0 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61  LNAME_NAME, "sta
10fd0 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  tus", SQLITE_STA
10fe0 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  TIC);.    for(i=
10ff0 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
11000 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20  +){.      Btree 
11010 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73  *pBt;.      cons
11020 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d  t char *zState =
11030 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20   "unknown";.    
11040 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69    int j;.      i
11050 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  f( db->aDb[i].zN
11060 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ame==0 ) continu
11070 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
11080 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
11090 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20  _String8, 0, 1, 
110a0 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  0, db->aDb[i].zN
110b0 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  ame, P4_STATIC);
110c0 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d  .      pBt = db-
110d0 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20  >aDb[i].pBt;.   
110e0 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c     if( pBt==0 ||
110f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
11100 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20  er(pBt)==0 ){.  
11110 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22        zState = "
11120 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d  closed";.      }
11130 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
11140 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
11150 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d  , i ? db->aDb[i]
11160 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20  .zName : 0, .   
11170 20 20 20 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 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c    SQLITE_FCNTL_L
111a0 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53  OCKSTATE, &j)==S
111b0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
111c0 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a       zState = az
111d0 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20  LockName[j];.   
111e0 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
111f0 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
11200 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
11210 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f  , 0, zState, P4_
11220 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
11230 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
11240 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
11250 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 2);.    }. 
11260 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
11270 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
11280 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
11290 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59  case PragTyp_KEY
112a0 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
112b0 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79  ht ) sqlite3_key
112c0 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69  _v2(db, zDb, zRi
112d0 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  ght, sqlite3Strl
112e0 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20  en30(zRight));. 
112f0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
11300 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b  case PragTyp_REK
11310 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
11320 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72  ight ) sqlite3_r
11330 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
11340 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33   zRight, sqlite3
11350 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
11360 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
11370 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  }.  case PragTyp
11380 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69  _HEXKEY: {.    i
11390 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
113a0 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20     u8 iByte;.   
113b0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
113c0 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20  char zKey[40];. 
113d0 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42       for(i=0, iB
113e0 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  yte=0; i<sizeof(
113f0 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74  zKey)*2 && sqlit
11400 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67 68  e3Isxdigit(zRigh
11410 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  t[i]); i++){.   
11420 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69 42       iByte = (iB
11430 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65  yte<<4) + sqlite
11440 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74  3HexToInt(zRight
11450 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  [i]);.        if
11460 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65  ( (i&1)!=0 ) zKe
11470 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a  y[i/2] = iByte;.
11480 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
11490 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78  ( (zLeft[3] & 0x
114a0 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20  f)==0xb ){.     
114b0 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76     sqlite3_key_v
114c0 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c  2(db, zDb, zKey,
114d0 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c   i/2);.      }el
114e0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
114f0 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c  te3_rekey_v2(db,
11500 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
11510 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
11520 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
11530 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
11540 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  d(SQLITE_HAS_COD
11550 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  EC) || defined(S
11560 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52  QLITE_ENABLE_CER
11570 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67 54  OD).  case PragT
11580 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45  yp_ACTIVATE_EXTE
11590 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67  NSIONS: if( zRig
115a0 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  ht ){.#ifdef SQL
115b0 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
115c0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
115d0 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73  NICmp(zRight, "s
115e0 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20  ee-", 4)==0 ){. 
115f0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74       sqlite3_act
11600 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68  ivate_see(&zRigh
11610 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[4]);.    }.#en
11620 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
11630 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20  E_ENABLE_CEROD. 
11640 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
11650 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
11660 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29  cerod-", 6)==0 )
11670 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
11680 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26  activate_cerod(&
11690 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20  zRight[6]);.    
116a0 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
116b0 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
116c0 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20  } /* End of the 
116d0 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f  PRAGMA switch */
116e0 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20  ..pragma_out:.  
116f0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
11700 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69  , zLeft);.  sqli
11710 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52  te3DbFree(db, zR
11720 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66  ight);.}..#endif
11730 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
11740 50 52 41 47 4d 41 20 2a 2f 0a                    PRAGMA */.