/ Hex Artifact Content
Login

Artifact 3965ae4e82bed39fb97ce04c5fe18c9bc3ee6a88:


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 70 44 62  lse{.        pDb
7cf0: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
7d00: 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28   getSafetyLevel(
7d10: 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20  zRight,0,1)+1;. 
7d20: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67         setAllPag
7d30: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
7d40: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
7d50: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
7d60: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
7d70: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
7d80: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7d90: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
7da0: 41 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  AS.  case PragTy
7db0: 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66  p_FLAG: {.    if
7dc0: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
7dd0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
7de0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 70 50 72  eInt(pParse, pPr
7df0: 61 67 6d 61 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62  agma->zName, (db
7e00: 2d 3e 66 6c 61 67 73 20 26 20 70 50 72 61 67 6d  ->flags & pPragm
7e10: 61 2d 3e 69 41 72 67 29 21 3d 30 20 29 3b 0a 20  a->iArg)!=0 );. 
7e20: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7e30: 69 6e 74 20 6d 61 73 6b 20 3d 20 70 50 72 61 67  int mask = pPrag
7e40: 6d 61 2d 3e 69 41 72 67 3b 20 20 20 20 2f 2a 20  ma->iArg;    /* 
7e50: 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20  Mask of bits to 
7e60: 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f  set or clear. */
7e70: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
7e80: 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a  utoCommit==0 ){.
7e90: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69          /* Forei
7ea0: 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d  gn key support m
7eb0: 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65  ay not be enable
7ec0: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68  d or disabled wh
7ed0: 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20  ile not.        
7ee0: 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69  ** in auto-commi
7ef0: 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20  t mode.  */.    
7f00: 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51      mask &= ~(SQ
7f10: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
7f20: 29 3b 0a 20 20 20 20 20 20 7d 0a 23 69 66 20 53  );.      }.#if S
7f30: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
7f40: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 20 20 20 20  NTICATION.      
7f50: 69 66 28 20 64 62 2d 3e 61 75 74 68 2e 61 75 74  if( db->auth.aut
7f60: 68 4c 65 76 65 6c 3d 3d 55 41 55 54 48 5f 55 73  hLevel==UAUTH_Us
7f70: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  er ){.        /*
7f80: 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f   Do not allow no
7f90: 6e 2d 61 64 6d 69 6e 20 75 73 65 72 73 20 74 6f  n-admin users to
7fa0: 20 6d 6f 64 69 66 79 20 74 68 65 20 73 63 68 65   modify the sche
7fb0: 6d 61 20 61 72 62 69 74 72 61 72 69 6c 79 20 2a  ma arbitrarily *
7fc0: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
7fd0: 3d 20 7e 28 53 51 4c 49 54 45 5f 57 72 69 74 65  = ~(SQLITE_Write
7fe0: 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 7d  Schema);.      }
7ff0: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 69  .#endif..      i
8000: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
8010: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20  lean(zRight, 0) 
8020: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  ){.        db->f
8030: 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20  lags |= mask;.  
8040: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8050: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
8060: 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 69  ~mask;.        i
8070: 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f  f( mask==SQLITE_
8080: 44 65 66 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e  DeferFKs ) db->n
8090: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
80a0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  = 0;.      }..  
80b0: 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74      /* Many of t
80c0: 68 65 20 66 6c 61 67 2d 70 72 61 67 6d 61 73 20  he flag-pragmas 
80d0: 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64 65 20  modify the code 
80e0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
80f0: 20 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63   SQL .      ** c
8100: 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75  ompiler (eg. cou
8110: 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20  nt_changes). So 
8120: 61 64 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f  add an opcode to
8130: 20 65 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20   expire all.    
8140: 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51    ** compiled SQ
8150: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 66 74  L statements aft
8160: 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 70  er modifying a p
8170: 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20  ragma value..   
8180: 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
8190: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
81a0: 20 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c 20 30   OP_Expire, 0, 0
81b0: 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50  );.      setAllP
81c0: 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20  agerFlags(db);. 
81d0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
81e0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
81f0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
8200: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
8210: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
8220: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20  CHEMA_PRAGMAS.  
8230: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
8240: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62   table_info(<tab
8250: 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  le>).  **.  ** R
8260: 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72  eturn a single r
8270: 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ow for each colu
8280: 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20  mn of the named 
8290: 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d  table. The colum
82a0: 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72  ns of.  ** the r
82b0: 65 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74  eturned data set
82c0: 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20   are:.  **.  ** 
82d0: 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75  cid:        Colu
82e0: 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20  mn id (numbered 
82f0: 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
8300: 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20  ht, starting at 
8310: 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20  0).  ** name:   
8320: 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a      Column name.
8330: 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20    ** type:      
8340: 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   Column declarat
8350: 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e  ion type..  ** n
8360: 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20  otnull:    True 
8370: 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73  if 'NOT NULL' is
8380: 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20   part of column 
8390: 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a  declaration.  **
83a0: 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65   dflt_value: The
83b0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
83c0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69  or the column, i
83d0: 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  f any..  */.  ca
83e0: 73 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45  se PragTyp_TABLE
83f0: 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68  _INFO: if( zRigh
8400: 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a  t ){.    Table *
8410: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
8420: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
8430: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
8440: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
8450: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c   ){.      int i,
8460: 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48   k;.      int nH
8470: 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20  idden = 0;.     
8480: 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20   Column *pCol;. 
8490: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20       Index *pPk 
84a0: 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79  = sqlite3Primary
84b0: 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a  KeyIndex(pTab);.
84c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
84d0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36  eSetNumCols(v, 6
84e0: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
84f0: 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20  >nMem = 6;.     
8500: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
8510: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
8520: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
8530: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
8540: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
8550: 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51  _NAME, "cid", SQ
8560: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8570: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8580: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
8590: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
85a0: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
85b0: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
85c0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
85d0: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
85e0: 4e 41 4d 45 2c 20 22 74 79 70 65 22 2c 20 53 51  NAME, "type", SQ
85f0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8600: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8610: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
8620: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
8630: 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f  otnull", SQLITE_
8640: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
8650: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8660: 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41  Name(v, 4, COLNA
8670: 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76  ME_NAME, "dflt_v
8680: 61 6c 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  alue", SQLITE_ST
8690: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
86a0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
86b0: 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45  me(v, 5, COLNAME
86c0: 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c  _NAME, "pk", SQL
86d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
86e0: 20 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65     sqlite3ViewGe
86f0: 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61  tColumnNames(pPa
8700: 72 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20  rse, pTab);.    
8710: 20 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d    for(i=0, pCol=
8720: 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54  pTab->aCol; i<pT
8730: 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70  ab->nCol; i++, p
8740: 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  Col++){.        
8750: 69 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  if( IsHiddenColu
8760: 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20  mn(pCol) ){.    
8770: 20 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b        nHidden++;
8780: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69  .          conti
8790: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  nue;.        }. 
87a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
87b0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
87c0: 6e 74 65 67 65 72 2c 20 69 2d 6e 48 69 64 64 65  nteger, i-nHidde
87d0: 6e 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  n, 1);.        s
87e0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
87f0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
8800: 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a  0, 2, 0, pCol->z
8810: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
8820: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8830: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
8840: 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20  8, 0, 3, 0,.    
8850: 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79         pCol->zTy
8860: 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65  pe ? pCol->zType
8870: 20 3a 20 22 22 2c 20 30 29 3b 0a 20 20 20 20 20   : "", 0);.     
8880: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8890: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
88a0: 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75  er, (pCol->notNu
88b0: 6c 6c 20 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b  ll ? 1 : 0), 4);
88c0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 43 6f  .        if( pCo
88d0: 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20  l->zDflt ){.    
88e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
88f0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
8900: 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20  ring8, 0, 5, 0, 
8910: 28 63 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66  (char*)pCol->zDf
8920: 6c 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  lt, 0);.        
8930: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
8940: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8950: 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30  p2(v, OP_Null, 0
8960: 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 5);.        }.
8970: 20 20 20 20 20 20 20 20 69 66 28 20 28 70 43 6f          if( (pCo
8980: 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  l->colFlags & CO
8990: 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d  LFLAG_PRIMKEY)==
89a0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
89b0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 0;.        }e
89c0: 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29  lse if( pPk==0 )
89d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
89e0: 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
89f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
8a00: 6b 3d 31 3b 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43  k=1; k<=pTab->nC
8a10: 6f 6c 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c  ol && pPk->aiCol
8a20: 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b  umn[k-1]!=i; k++
8a30: 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ){}.        }.  
8a40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8a50: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
8a60: 74 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20 20  teger, k, 6);.  
8a70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8a80: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
8a90: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a  sultRow, 1, 6);.
8aa0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
8ab0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
8ac0: 73 65 20 50 72 61 67 54 79 70 5f 53 54 41 54 53  se PragTyp_STATS
8ad0: 3a 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  : {.    Index *p
8ae0: 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c 65  Idx;.    HashEle
8af0: 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73 71  m *i;.    v = sq
8b00: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
8b10: 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  rse);.    sqlite
8b20: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
8b30: 76 2c 20 34 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 4);.    pPars
8b40: 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20  e->nMem = 4;.   
8b50: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
8b60: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
8b70: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
8b80: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
8b90: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
8ba0: 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51  AME, "table", SQ
8bb0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8bc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8bd0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
8be0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 64  LNAME_NAME, "ind
8bf0: 65 78 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ex", SQLITE_STAT
8c00: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
8c10: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
8c20: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
8c30: 45 2c 20 22 77 69 64 74 68 22 2c 20 53 51 4c 49  E, "width", SQLI
8c40: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8c50: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8c60: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
8c70: 41 4d 45 5f 4e 41 4d 45 2c 20 22 68 65 69 67 68  AME_NAME, "heigh
8c80: 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  t", SQLITE_STATI
8c90: 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73 71  C);.    for(i=sq
8ca0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 70  liteHashFirst(&p
8cb0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62 6c  Db->pSchema->tbl
8cc0: 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c 69  Hash); i; i=sqli
8cd0: 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a  teHashNext(i)){.
8ce0: 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
8cf0: 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
8d00: 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73 71 6c  ta(i);.      sql
8d10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
8d20: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
8d30: 20 31 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61   1, 0, pTab->zNa
8d40: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  me, 0);.      sq
8d50: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8d60: 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 32  v, OP_Null, 0, 2
8d70: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8d80: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8d90: 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20 20  _Integer,.      
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8db0: 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65       (int)sqlite
8dc0: 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61  3LogEstToInt(pTa
8dd0: 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 20 33 29  b->szTabRow), 3)
8de0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8df0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8e00: 49 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20 20  Integer, .      
8e10: 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33      (int)sqlite3
8e20: 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61 62  LogEstToInt(pTab
8e30: 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29 2c 20 34  ->nRowLogEst), 4
8e40: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8e50: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8e60: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34  _ResultRow, 1, 4
8e70: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64  );.      for(pId
8e80: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
8e90: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
8ea0: 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20  >pNext){.       
8eb0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8ec0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
8ed0: 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d  , 0, 2, 0, pIdx-
8ee0: 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  >zName, 0);.    
8ef0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8f00: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
8f10: 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f30: 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f    (int)sqlite3Lo
8f40: 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e  gEstToInt(pIdx->
8f50: 73 7a 49 64 78 52 6f 77 29 2c 20 33 29 3b 0a 20  szIdxRow), 3);. 
8f60: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
8f70: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
8f80: 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20 20 20  nteger, .       
8f90: 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65       (int)sqlite
8fa0: 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 49 64  3LogEstToInt(pId
8fb0: 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 30  x->aiRowLogEst[0
8fc0: 5d 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  ]), 4);.        
8fd0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8fe0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
8ff0: 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20  w, 1, 4);.      
9000: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
9010: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
9020: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a  gTyp_INDEX_INFO:
9030: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
9040: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
9050: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
9060: 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69  .    pIdx = sqli
9070: 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c  te3FindIndex(db,
9080: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
9090: 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20     if( pIdx ){. 
90a0: 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
90b0: 20 20 69 6e 74 20 6d 78 3b 0a 20 20 20 20 20 20    int mx;.      
90c0: 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69 41 72  if( pPragma->iAr
90d0: 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  g ){.        /* 
90e0: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e  PRAGMA index_xin
90f0: 66 6f 20 28 6e 65 77 65 72 20 76 65 72 73 69 6f  fo (newer versio
9100: 6e 20 77 69 74 68 20 6d 6f 72 65 20 72 6f 77 73  n with more rows
9110: 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 29 20 2a 2f   and columns) */
9120: 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49  .        mx = pI
9130: 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20  dx->nColumn;.   
9140: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
9150: 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 7d 65 6c  m = 6;.      }el
9160: 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 50  se{.        /* P
9170: 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f  RAGMA index_info
9180: 20 28 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e   (legacy version
9190: 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20  ) */.        mx 
91a0: 3d 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b  = pIdx->nKeyCol;
91b0: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
91c0: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20  >nMem = 3;.     
91d0: 20 7d 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20   }.      pTab = 
91e0: 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20  pIdx->pTable;.  
91f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9200: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 70 50 61  etNumCols(v, pPa
9210: 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20  rse->nMem);.    
9220: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
9230: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
9240: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
9250: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9260: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
9270: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e 6f 22 2c  E_NAME, "seqno",
9280: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9290: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
92a0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
92b0: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
92c0: 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53   "cid", SQLITE_S
92d0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
92e0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
92f0: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
9300: 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20  E_NAME, "name", 
9310: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9320: 20 20 20 20 20 20 69 66 28 20 70 50 72 61 67 6d        if( pPragm
9330: 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20  a->iArg ){.     
9340: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9350: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
9360: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 65  OLNAME_NAME, "de
9370: 73 63 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  sc", SQLITE_STAT
9380: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
9390: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
93a0: 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45  me(v, 4, COLNAME
93b0: 5f 4e 41 4d 45 2c 20 22 63 6f 6c 6c 22 2c 20 53  _NAME, "coll", S
93c0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
93d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
93e0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
93f0: 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  5, COLNAME_NAME,
9400: 20 22 6b 65 79 22 2c 20 53 51 4c 49 54 45 5f 53   "key", SQLITE_S
9410: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 7d 0a  TATIC);.      }.
9420: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
9430: 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  <mx; i++){.     
9440: 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20 70 49     i16 cnum = pI
9450: 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b  dx->aiColumn[i];
9460: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9470: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9480: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
9490: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
94a0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
94b0: 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20  _Integer, cnum, 
94c0: 32 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  2);.        if( 
94d0: 63 6e 75 6d 3c 30 20 29 7b 0a 20 20 20 20 20 20  cnum<0 ){.      
94e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
94f0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c  ddOp2(v, OP_Null
9500: 2c 20 30 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 0, 3);.       
9510: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
9520: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9530: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
9540: 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 54 61 62  8, 0, 3, 0, pTab
9550: 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61  ->aCol[cnum].zNa
9560: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
9570: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  }.        if( pP
9580: 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20  ragma->iArg ){. 
9590: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
95a0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
95b0: 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e  _Integer, pIdx->
95c0: 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 2c 20 34  aSortOrder[i], 4
95d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
95e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
95f0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
9600: 20 35 2c 20 30 2c 20 70 49 64 78 2d 3e 61 7a 43   5, 0, pIdx->azC
9610: 6f 6c 6c 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20  oll[i], 0);.    
9620: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9630: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
9640: 74 65 67 65 72 2c 20 69 3c 70 49 64 78 2d 3e 6e  teger, i<pIdx->n
9650: 4b 65 79 43 6f 6c 2c 20 36 29 3b 0a 20 20 20 20  KeyCol, 6);.    
9660: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
9670: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9680: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9690: 20 31 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d   1, pParse->nMem
96a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
96b0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
96c0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e   case PragTyp_IN
96d0: 44 45 58 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52  DEX_LIST: if( zR
96e0: 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65  ight ){.    Inde
96f0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62  x *pIdx;.    Tab
9700: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e  le *pTab;.    in
9710: 74 20 69 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  t i;.    pTab = 
9720: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
9730: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
9740: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
9750: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
9760: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
9770: 73 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  se);.      sqlit
9780: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
9790: 28 76 2c 20 35 29 3b 0a 20 20 20 20 20 20 70 50  (v, 5);.      pP
97a0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a  arse->nMem = 5;.
97b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
97c0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
97d0: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
97e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
97f0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
9800: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
9810: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9820: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9830: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9840: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
9850: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
9860: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
9870: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9880: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
9890: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71  NAME_NAME, "uniq
98a0: 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ue", SQLITE_STAT
98b0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
98c0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
98d0: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
98e0: 41 4d 45 2c 20 22 6f 72 69 67 69 6e 22 2c 20 53  AME, "origin", S
98f0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
9900: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9910: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c  SetColName(v, 4,
9920: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9930: 70 61 72 74 69 61 6c 22 2c 20 53 51 4c 49 54 45  partial", SQLITE
9940: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
9950: 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70  for(pIdx=pTab->p
9960: 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64 78  Index, i=0; pIdx
9970: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
9980: 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, i++){.      
9990: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a    const char *az
99a0: 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22 63 22  Origin[] = { "c"
99b0: 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b 0a 20  , "u", "pk" };. 
99c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
99d0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
99e0: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
99f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9a00: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
9a10: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
9a20: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pIdx->zName, 0)
9a30: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9a40: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9a50: 50 5f 49 6e 74 65 67 65 72 2c 20 49 73 55 6e 69  P_Integer, IsUni
9a60: 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 2c 20  queIndex(pIdx), 
9a70: 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  3);.        sqli
9a80: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
9a90: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
9aa0: 34 2c 20 30 2c 20 61 7a 4f 72 69 67 69 6e 5b 70  4, 0, azOrigin[p
9ab0: 49 64 78 2d 3e 69 64 78 54 79 70 65 5d 2c 20 30  Idx->idxType], 0
9ac0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9ad0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
9ae0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78  OP_Integer, pIdx
9af0: 2d 3e 70 50 61 72 74 49 64 78 57 68 65 72 65 21  ->pPartIdxWhere!
9b00: 3d 30 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20  =0, 5);.        
9b10: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9b20: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
9b30: 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20 20 20 20  w, 1, 5);.      
9b40: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
9b50: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
9b60: 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49  gTyp_DATABASE_LI
9b70: 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b  ST: {.    int i;
9b80: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9b90: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
9ba0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
9bb0: 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69  em = 3;.    sqli
9bc0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
9bd0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
9be0: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
9bf0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9c00: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9c10: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
9c20: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
9c30: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9c40: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9c50: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
9c60: 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
9c70: 20 22 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f   "file", SQLITE_
9c80: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72  STATIC);.    for
9c90: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
9ca0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
9cb0: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d   db->aDb[i].pBt=
9cc0: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
9cd0: 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
9ce0: 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30  >aDb[i].zName!=0
9cf0: 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
9d00: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9d10: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29  P_Integer, i, 1)
9d20: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9d30: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
9d40: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
9d50: 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
9d60: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  me, 0);.      sq
9d70: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
9d80: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
9d90: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
9da0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
9db0: 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61  etFilename(db->a
9dc0: 44 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a  Db[i].pBt), 0);.
9dd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9de0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
9df0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a  sultRow, 1, 3);.
9e00: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9e10: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
9e20: 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53  yp_COLLATION_LIS
9e30: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d  T: {.    int i =
9e40: 20 30 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d   0;.    HashElem
9e50: 20 2a 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   *p;.    sqlite3
9e60: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
9e70: 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 2);.    pParse
9e80: 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20  ->nMem = 2;.    
9e90: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
9ea0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
9eb0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c  AME_NAME, "seq",
9ec0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9ed0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9ee0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
9ef0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9f00: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
9f10: 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 70  ATIC);.    for(p
9f20: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
9f30: 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b  (&db->aCollSeq);
9f40: 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68   p; p=sqliteHash
9f50: 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20  Next(p)){.      
9f60: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d  CollSeq *pColl =
9f70: 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69   (CollSeq *)sqli
9f80: 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20  teHashData(p);. 
9f90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9fa0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
9fb0: 65 67 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20  eger, i++, 1);. 
9fc0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9fd0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
9fe0: 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70  ing8, 0, 2, 0, p
9ff0: 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b  Coll->zName, 0);
a000: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a010: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
a020: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b  esultRow, 1, 2);
a030: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
a040: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
a050: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
a060: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
a070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a080: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63  _FOREIGN_KEY.  c
a090: 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45  ase PragTyp_FORE
a0a0: 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66  IGN_KEY_LIST: if
a0b0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
a0c0: 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54  FKey *pFK;.    T
a0d0: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
a0e0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
a0f0: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67  ndTable(db, zRig
a100: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
a110: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
a120: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
a130: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
a140: 20 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46    pFK = pTab->pF
a150: 4b 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70  Key;.      if( p
a160: 46 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  FK ){.        in
a170: 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20  t i = 0; .      
a180: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a190: 4e 75 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20  NumCols(v, 8);. 
a1a0: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e         pParse->n
a1b0: 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20  Mem = 8;.       
a1c0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
a1d0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
a1e0: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73   iDb);.        s
a1f0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
a200: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
a210: 4d 45 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53  ME_NAME, "id", S
a220: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
a230: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a240: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
a250: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
a260: 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53   "seq", SQLITE_S
a270: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
a280: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
a290: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
a2a0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65  AME_NAME, "table
a2b0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
a2c0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
a2d0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
a2e0: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
a2f0: 41 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c  AME, "from", SQL
a300: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
a310: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a320: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c  SetColName(v, 4,
a330: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
a340: 74 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  to", SQLITE_STAT
a350: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
a360: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a370: 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45  me(v, 5, COLNAME
a380: 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74  _NAME, "on_updat
a390: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
a3a0: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
a3b0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
a3c0: 65 28 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 6, COLNAME_
a3d0: 4e 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65  NAME, "on_delete
a3e0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
a3f0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
a400: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
a410: 28 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 7, COLNAME_N
a420: 41 4d 45 2c 20 22 6d 61 74 63 68 22 2c 20 53 51  AME, "match", SQ
a430: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
a440: 20 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29        while(pFK)
a450: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
a460: 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  j;.          for
a470: 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f  (j=0; j<pFK->nCo
a480: 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  l; j++){.       
a490: 20 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20       char *zCol 
a4a0: 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a  = pFK->aCol[j].z
a4b0: 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Col;.           
a4c0: 20 63 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65   char *zOnDelete
a4d0: 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f   = (char *)actio
a4e0: 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69  nName(pFK->aActi
a4f0: 6f 6e 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20  on[0]);.        
a500: 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64      char *zOnUpd
a510: 61 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63  ate = (char *)ac
a520: 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41  tionName(pFK->aA
a530: 63 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20  ction[1]);.     
a540: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a550: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
a560: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
a570: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
a580: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
a590: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32  OP_Integer, j, 2
a5a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
a5b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
a5c0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
a5d0: 30 2c 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54  0, 3, 0, pFK->zT
a5e0: 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  o, 0);.         
a5f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a600: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
a610: 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20  g8, 0, 4, 0,.   
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a630: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
a640: 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b  >aCol[pFK->aCol[
a650: 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c  j].iFrom].zName,
a660: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
a670: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a680: 70 34 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f  p4(v, zCol ? OP_
a690: 53 74 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c  String8 : OP_Nul
a6a0: 6c 2c 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c  l, 0, 5, 0, zCol
a6b0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
a6c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a6d0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
a6e0: 38 2c 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55  8, 0, 6, 0, zOnU
a6f0: 70 64 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 20  pdate, 0);.     
a700: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a710: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
a720: 74 72 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c  tring8, 0, 7, 0,
a730: 20 7a 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a   zOnDelete, 0);.
a740: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a750: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
a760: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
a770: 38 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29  8, 0, "NONE", 0)
a780: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
a790: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
a7a0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
a7b0: 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20   1, 8);.        
a7c0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b    }.          ++
a7d0: 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b  i;.          pFK
a7e0: 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f   = pFK->pNextFro
a7f0: 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  m;.        }.   
a800: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
a810: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
a820: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
a830: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
a840: 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  EY) */..#ifndef 
a850: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
a860: 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20  IGN_KEY.#ifndef 
a870: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
a880: 47 45 52 0a 20 20 63 61 73 65 20 50 72 61 67 54  GER.  case PragT
a890: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43  yp_FOREIGN_KEY_C
a8a0: 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79  HECK: {.    FKey
a8b0: 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20   *pFK;          
a8c0: 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20     /* A foreign 
a8d0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  key constraint *
a8e0: 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
a8f0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
a900: 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74  Child table cont
a910: 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22  ain "REFERENCES"
a920: 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20   keyword */.    
a930: 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20  Table *pParent; 
a940: 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
a950: 20 74 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c   table that chil
a960: 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20  d points to */. 
a970: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20     Index *pIdx; 
a980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
a990: 65 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ex in the parent
a9a0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
a9b0: 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
a9c0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
a9d0: 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b  nter:  Foreign k
a9e0: 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54  ey number for pT
a9f0: 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b  ab */.    int j;
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa10: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
aa20: 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20  :  Field of the 
aa30: 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20  foreign key */. 
aa40: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20     HashElem *k; 
aa50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
aa60: 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74  p counter:  Next
aa70: 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61   table in schema
aa80: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20   */.    int x;  
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aaa0: 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c  * result variabl
aab0: 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  e */.    int reg
aac0: 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20  Result;         
aad0: 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73 20 74  /* 3 registers t
aae0: 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20  o hold a result 
aaf0: 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  row */.    int r
ab00: 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  egKey;          
ab10: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
ab20: 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68   hold key for ch
ab30: 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f  ecking the FK */
ab40: 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b  .    int regRow;
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
ab60: 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64  egisters to hold
ab70: 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62   a row from pTab
ab80: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
ab90: 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Top;           /
aba0: 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20  * Top of a loop 
abb0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e  checking foreign
abc0: 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74   keys */.    int
abd0: 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20   addrOk;        
abe0: 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
abf0: 20 69 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f   if the key is O
ac00: 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69  K */.    int *ai
ac10: 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
ac20: 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65  /* child to pare
ac30: 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e  nt column mappin
ac40: 67 20 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73  g */..    regRes
ac50: 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d  ult = pParse->nM
ac60: 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65  em+1;.    pParse
ac70: 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20  ->nMem += 4;.   
ac80: 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72   regKey = ++pPar
ac90: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65  se->nMem;.    re
aca0: 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d  gRow = ++pParse-
acb0: 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73  >nMem;.    v = s
acc0: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
acd0: 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  arse);.    sqlit
ace0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
acf0: 28 76 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 4);.    sqli
ad00: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ad10: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
ad20: 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53  NAME, "table", S
ad30: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
ad40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
ad50: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
ad60: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f  OLNAME_NAME, "ro
ad70: 77 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  wid", SQLITE_STA
ad80: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
ad90: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
ada0: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
adb0: 4d 45 2c 20 22 70 61 72 65 6e 74 22 2c 20 53 51  ME, "parent", SQ
adc0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
add0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
ade0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f  ColName(v, 3, CO
adf0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69  LNAME_NAME, "fki
ae00: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
ae10: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43  C);.    sqlite3C
ae20: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
ae30: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
ae40: 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68    k = sqliteHash
ae50: 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69  First(&db->aDb[i
ae60: 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c  Db].pSchema->tbl
ae70: 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65  Hash);.    while
ae80: 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ( k ){.      if(
ae90: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
aea0: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
aeb0: 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61  3LocateTable(pPa
aec0: 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20  rse, 0, zRight, 
aed0: 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20  zDb);.        k 
aee0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
aef0: 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d  {.        pTab =
af00: 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48   (Table*)sqliteH
af10: 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20  ashData(k);.    
af20: 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61      k = sqliteHa
af30: 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20  shNext(k);.     
af40: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54 61   }.      if( pTa
af50: 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46  b==0 || pTab->pF
af60: 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  Key==0 ) continu
af70: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
af80: 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65  TableLock(pParse
af90: 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75  , iDb, pTab->tnu
afa0: 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  m, 0, pTab->zNam
afb0: 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54  e);.      if( pT
afc0: 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e  ab->nCol+regRow>
afd0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70  pParse->nMem ) p
afe0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54  Parse->nMem = pT
aff0: 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f  ab->nCol + regRo
b000: 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  w;.      sqlite3
b010: 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65  OpenTable(pParse
b020: 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20  , 0, iDb, pTab, 
b030: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
b040: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b050: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
b060: 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c  ng8, 0, regResul
b070: 74 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  t, 0, pTab->zNam
b080: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
b090: 20 20 20 20 20 20 20 20 20 20 20 50 34 5f 54 52             P4_TR
b0a0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
b0b0: 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61  for(i=1, pFK=pTa
b0c0: 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69  b->pFKey; pFK; i
b0d0: 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65  ++, pFK=pFK->pNe
b0e0: 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20  xtFrom){.       
b0f0: 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74   pParent = sqlit
b100: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
b110: 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a  pFK->zTo, zDb);.
b120: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
b130: 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ent==0 ) continu
b140: 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  e;.        pIdx 
b150: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  = 0;.        sql
b160: 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50  ite3TableLock(pP
b170: 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65  arse, iDb, pPare
b180: 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61  nt->tnum, 0, pPa
b190: 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  rent->zName);.  
b1a0: 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65        x = sqlite
b1b0: 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70  3FkLocateIndex(p
b1c0: 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20  Parse, pParent, 
b1d0: 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a  pFK, &pIdx, 0);.
b1e0: 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30          if( x==0
b1f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
b200: 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20  ( pIdx==0 ){.   
b210: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b220: 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65  OpenTable(pParse
b230: 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  , i, iDb, pParen
b240: 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b  t, OP_OpenRead);
b250: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
b260: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
b270: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
b280: 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20  v, OP_OpenRead, 
b290: 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69  i, pIdx->tnum, i
b2a0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Db);.           
b2b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 50   sqlite3VdbeSetP
b2c0: 34 4b 65 79 49 6e 66 6f 28 70 50 61 72 73 65 2c  4KeyInfo(pParse,
b2d0: 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20   pIdx);.        
b2e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
b2f0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d  e{.          k =
b300: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72   0;.          br
b310: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
b320: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
b330: 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72  ert( pParse->nEr
b340: 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b  r>0 || pFK==0 );
b350: 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29  .      if( pFK )
b360: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66   break;.      if
b370: 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69  ( pParse->nTab<i
b380: 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20   ) pParse->nTab 
b390: 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54  = i;.      addrT
b3a0: 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  op = sqlite3Vdbe
b3b0: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77  AddOp1(v, OP_Rew
b3c0: 69 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76  ind, 0); VdbeCov
b3d0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
b3e0: 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61  for(i=1, pFK=pTa
b3f0: 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69  b->pFKey; pFK; i
b400: 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65  ++, pFK=pFK->pNe
b410: 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20  xtFrom){.       
b420: 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74   pParent = sqlit
b430: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
b440: 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a  pFK->zTo, zDb);.
b450: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
b460: 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73  ;.        aiCols
b470: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66   = 0;.        if
b480: 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20  ( pParent ){.   
b490: 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74         x = sqlit
b4a0: 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
b4b0: 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c  pParse, pParent,
b4c0: 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69   pFK, &pIdx, &ai
b4d0: 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20  Cols);.         
b4e0: 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b   assert( x==0 );
b4f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
b500: 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69     addrOk = sqli
b510: 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
b520: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  (v);.        if(
b530: 20 70 50 61 72 65 6e 74 20 26 26 20 70 49 64 78   pParent && pIdx
b540: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
b550: 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d   int iKey = pFK-
b560: 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a  >aCol[0].iFrom;.
b570: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
b580: 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65  ( iKey>=0 && iKe
b590: 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a  y<pTab->nCol );.
b5a0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4b            if( iK
b5b0: 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20  ey!=pTab->iPKey 
b5c0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
b5d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
b5e0: 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30  (v, OP_Column, 0
b5f0: 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b  , iKey, regRow);
b600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
b610: 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c  ite3ColumnDefaul
b620: 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c  t(v, pTab, iKey,
b630: 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20   regRow);.      
b640: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b650: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73  eAddOp2(v, OP_Is
b660: 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64  Null, regRow, ad
b670: 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72  drOk); VdbeCover
b680: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
b690: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b6a0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74  ddOp2(v, OP_Must
b6b0: 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a  BeInt, regRow, .
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b6d0: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
b6e0: 74 41 64 64 72 28 76 29 2b 33 29 3b 20 56 64 62  tAddr(v)+3); Vdb
b6f0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
b700: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
b710: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b720: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b730: 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67  OP_Rowid, 0, reg
b740: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
b750: 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  }.          sqli
b760: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
b770: 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69   OP_NotExists, i
b780: 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 20 56 64  , 0, regRow); Vd
b790: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
b7a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b7b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
b7c0: 5f 47 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b  _Goto, 0, addrOk
b7d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
b7e0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
b7f0: 28 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43  (v, sqlite3VdbeC
b800: 75 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29  urrentAddr(v)-2)
b810: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
b820: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a  .          for(j
b830: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
b840: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
b850: 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f     sqlite3ExprCo
b860: 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
b870: 6c 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20  le(v, pTab, 0,. 
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b890: 20 20 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c             aiCol
b8a0: 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20  s ? aiCols[j] : 
b8b0: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72  pFK->aCol[j].iFr
b8c0: 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20  om, regRow+j);. 
b8d0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b8e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b8f0: 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f  OP_IsNull, regRo
b900: 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64  w+j, addrOk); Vd
b910: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
b920: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
b930: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
b940: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
b950: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b960: 34 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  4(v, OP_MakeReco
b970: 72 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d  rd, regRow, pFK-
b980: 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20  >nCol, regKey,. 
b990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
b9b0: 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
b9c0: 79 53 74 72 28 76 2c 70 49 64 78 29 2c 20 70 46  yStr(v,pIdx), pF
b9d0: 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20  K->nCol);.      
b9e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b9f0: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
ba00: 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f  _Found, i, addrO
ba10: 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20  k, regKey, 0);. 
ba20: 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43             VdbeC
ba30: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ba40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
ba50: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
ba60: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
ba70: 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52  P_Rowid, 0, regR
ba80: 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20  esult+1);.      
ba90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
baa0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
bab0: 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b  8, 0, regResult+
bac0: 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20  2, 0, .         
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bae0: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52   pFK->zTo, P4_TR
baf0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
bb00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
bb10: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
bb20: 72 2c 20 69 2d 31 2c 20 72 65 67 52 65 73 75 6c  r, i-1, regResul
bb30: 74 2b 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71  t+3);.        sq
bb40: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
bb50: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
bb60: 20 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a   regResult, 4);.
bb70: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bb80: 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28  dbeResolveLabel(
bb90: 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20  v, addrOk);.    
bba0: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
bbb0: 65 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20  e(db, aiCols);. 
bbc0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
bbd0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
bbe0: 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64  , OP_Next, 0, ad
bbf0: 64 72 54 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f  drTop+1); VdbeCo
bc00: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
bc10: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
bc20: 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70 29  Here(v, addrTop)
bc30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
bc40: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21  eak;.#endif /* !
bc50: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
bc60: 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a  MIT_TRIGGER) */.
bc70: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
bc80: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
bc90: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a  OREIGN_KEY) */..
bca0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
bcb0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
bcc0: 52 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20  RSER_TRACE: {.  
bcd0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
bce0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
bcf0: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
bd00: 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20  ht, 0) ){.      
bd10: 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54    sqlite3ParserT
bd20: 72 61 63 65 28 73 74 64 65 72 72 2c 20 22 70 61  race(stderr, "pa
bd30: 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20  rser: ");.      
bd40: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
bd50: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
bd60: 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  e(0, 0);.      }
bd70: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
bd80: 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  ak;.#endif..  /*
bd90: 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c   Reinstall the L
bda0: 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e  IKE and GLOB fun
bdb0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72  ctions.  The var
bdc0: 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a  iant of LIKE.  *
bdd0: 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63  * used will be c
bde0: 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72  ase sensitive or
bdf0: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
be00: 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a  n the RHS..  */.
be10: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
be20: 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49  ASE_SENSITIVE_LI
be30: 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  KE: {.    if( zR
be40: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
be50: 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
be60: 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73  eFunctions(db, s
be70: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
be80: 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20  (zRight, 0));.  
be90: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
bea0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
beb0: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
bec0: 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66  _ERROR_MAX.# def
bed0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  ine SQLITE_INTEG
bee0: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
bef0: 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66 0a  _MAX 100.#endif.
bf00: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bf10: 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
bf20: 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61  HECK.  /* Pragma
bf30: 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20 69   "quick_check" i
bf40: 73 20 72 65 64 75 63 65 64 20 76 65 72 73 69 6f  s reduced versio
bf50: 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67  n of .  ** integ
bf60: 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69 67  rity_check desig
bf70: 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d 6f  ned to detect mo
bf80: 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  st database corr
bf90: 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68  uption.  ** with
bfa0: 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65 20  out most of the 
bfb0: 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20 66 75  overhead of a fu
bfc0: 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68 65  ll integrity-che
bfd0: 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ck..  */.  case 
bfe0: 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54  PragTyp_INTEGRIT
bff0: 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69  Y_CHECK: {.    i
c000: 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d  nt i, j, addr, m
c010: 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f  xErr;..    /* Co
c020: 64 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20  de that appears 
c030: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
c040: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
c050: 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a  k.  If no error.
c060: 20 20 20 20 2a 2a 20 6d 65 73 73 61 67 65 73 20      ** messages 
c070: 68 61 76 65 20 62 65 65 6e 20 67 65 6e 65 72 61  have been genera
c080: 74 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20  ted, output OK. 
c090: 20 4f 74 68 65 72 77 69 73 65 20 6f 75 74 70 75   Otherwise outpu
c0a0: 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 72 72  t the.    ** err
c0b0: 6f 72 20 6d 65 73 73 61 67 65 0a 20 20 20 20 2a  or message.    *
c0c0: 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  /.    static con
c0d0: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
c0e0: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
c0f0: 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63  2);.    static c
c100: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
c110: 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20  endCode[] = {.  
c120: 20 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20      { OP_IfNeg, 
c130: 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20        1, 0,     
c140: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a     0},    /* 0 *
c150: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72  /.      { OP_Str
c160: 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20  ing8,     0, 3, 
c170: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
c180: 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   1 */.      { OP
c190: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c  _ResultRow,   3,
c1a0: 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   1,        0},. 
c1b0: 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69     };..    int i
c1c0: 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65  sQuick = (sqlite
c1d0: 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30  3Tolower(zLeft[0
c1e0: 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f  ])=='q');..    /
c1f0: 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d 41 20  * If the PRAGMA 
c200: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74  command was of t
c210: 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20  he form "PRAGMA 
c220: 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63  <db>.integrity_c
c230: 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68  heck",.    ** th
c240: 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f  en iDb is set to
c250: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
c260: 65 20 64 61 74 61 62 61 73 65 20 69 64 65 6e 74  e database ident
c270: 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20  ified by <db>.. 
c280: 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61     ** In this ca
c290: 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74  se, the integrit
c2a0: 79 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44  y of database iD
c2b0: 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69  b only is verifi
c2c0: 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65  ed by.    ** the
c2d0: 20 56 44 42 45 20 63 72 65 61 74 65 64 20 62 65   VDBE created be
c2e0: 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  low..    **.    
c2f0: 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ** Otherwise, if
c300: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73   the command was
c310: 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20   simply "PRAGMA 
c320: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
c330: 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41   (or.    ** "PRA
c340: 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22  GMA quick_check"
c350: 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20 73  ), then iDb is s
c360: 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73  et to 0. In this
c370: 20 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20   case, set iDb. 
c380: 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65     ** to -1 here
c390: 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  , to indicate th
c3a0: 61 74 20 74 68 65 20 56 44 42 45 20 73 68 6f 75  at the VDBE shou
c3b0: 6c 64 20 76 65 72 69 66 79 20 74 68 65 20 69 6e  ld verify the in
c3c0: 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f  tegrity.    ** o
c3d0: 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
c3e0: 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20  atabases.  */.  
c3f0: 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
c400: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
c410: 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e  iDb==0 || pId2->
c420: 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64  z );.    if( pId
c430: 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20  2->z==0 ) iDb = 
c440: 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  -1;..    /* Init
c450: 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20  ialize the VDBE 
c460: 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70  program */.    p
c470: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b  Parse->nMem = 6;
c480: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c490: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
c4a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
c4b0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
c4c0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
c4d0: 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  "integrity_check
c4e0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c4f0: 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 74  );..    /* Set t
c500: 68 65 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72  he maximum error
c510: 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78   count */.    mx
c520: 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54  Err = SQLITE_INT
c530: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
c540: 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28 20  OR_MAX;.    if( 
c550: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
c560: 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
c570: 7a 52 69 67 68 74 2c 20 26 6d 78 45 72 72 29 3b  zRight, &mxErr);
c580: 0a 20 20 20 20 20 20 69 66 28 20 6d 78 45 72 72  .      if( mxErr
c590: 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  <=0 ){.        m
c5a0: 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e  xErr = SQLITE_IN
c5b0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
c5c0: 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d  ROR_MAX;.      }
c5d0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
c5e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c5f0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45 72  OP_Integer, mxEr
c600: 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31  r, 1);  /* reg[1
c610: 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c  ] holds errors l
c620: 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44  eft */..    /* D
c630: 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63  o an integrity c
c640: 68 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61 74  heck on each dat
c650: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
c660: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
c670: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
c680: 20 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20    HashElem *x;. 
c690: 20 20 20 20 20 48 61 73 68 20 2a 70 54 62 6c 73       Hash *pTbls
c6a0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20  ;.      int cnt 
c6b0: 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69 66 28 20  = 0;..      if( 
c6c0: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69  OMIT_TEMPDB && i
c6d0: 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==1 ) continue;.
c6e0: 20 20 20 20 20 20 69 66 28 20 69 44 62 3e 3d 30        if( iDb>=0
c6f0: 20 26 26 20 69 21 3d 69 44 62 20 29 20 63 6f 6e   && i!=iDb ) con
c700: 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73 71  tinue;..      sq
c710: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
c720: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 29  chema(pParse, i)
c730: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
c740: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
c750: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
c760: 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75 74  ; /* Halt if out
c770: 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20   of errors */.  
c780: 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65      VdbeCoverage
c790: 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (v);.      sqlit
c7a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c7b0: 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
c7c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c7d0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
c7e0: 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f  r);..      /* Do
c7f0: 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68   an integrity ch
c800: 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65  eck of the B-Tre
c810: 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  e.      **.     
c820: 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69 6c   ** Begin by fil
c830: 6c 69 6e 67 20 72 65 67 69 73 74 65 72 73 20 32  ling registers 2
c840: 2c 20 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68  , 3, ... with th
c850: 65 20 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d  e root pages num
c860: 62 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f  bers.      ** fo
c870: 72 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64  r all tables and
c880: 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20   indices in the 
c890: 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20  database..      
c8a0: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
c8b0: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
c8c0: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30  texHeld(db, i, 0
c8d0: 29 20 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73  ) );.      pTbls
c8e0: 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70   = &db->aDb[i].p
c8f0: 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b  Schema->tblHash;
c900: 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c  .      for(x=sql
c910: 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62  iteHashFirst(pTb
c920: 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65  ls); x; x=sqlite
c930: 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20  HashNext(x)){.  
c940: 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
c950: 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
c960: 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49  ta(x);.        I
c970: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
c980: 20 20 20 20 69 66 28 20 48 61 73 52 6f 77 69 64      if( HasRowid
c990: 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20  (pTab) ){.      
c9a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c9b0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c9c0: 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c  ger, pTab->tnum,
c9d0: 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20   2+cnt);.       
c9e0: 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28     VdbeComment((
c9f0: 76 2c 20 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a  v, "%s", pTab->z
ca00: 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20  Name));.        
ca10: 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20    cnt++;.       
ca20: 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70   }.        for(p
ca30: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
ca40: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
ca50: 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20  x->pNext){.     
ca60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ca70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
ca80: 65 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d  eger, pIdx->tnum
ca90: 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20  , 2+cnt);.      
caa0: 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28      VdbeComment(
cab0: 28 76 2c 20 22 25 73 22 2c 20 70 49 64 78 2d 3e  (v, "%s", pIdx->
cac0: 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20  zName));.       
cad0: 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20     cnt++;.      
cae0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20    }.      }..   
caf0: 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
cb00: 73 75 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65  sufficient numbe
cb10: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 68  r of registers h
cb20: 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74  ave been allocat
cb30: 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72  ed */.      pPar
cb40: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20  se->nMem = MAX( 
cb50: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e  pParse->nMem, cn
cb60: 74 2b 38 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  t+8 );..      /*
cb70: 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69   Do the b-tree i
cb80: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20  ntegrity checks 
cb90: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
cba0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
cbb0: 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c  _IntegrityCk, 2,
cbc0: 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20 20   cnt, 1);.      
cbd0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
cbe0: 65 50 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20  eP5(v, (u8)i);. 
cbf0: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
cc00: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
cc10: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20   OP_IsNull, 2); 
cc20: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
cc30: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
cc40: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
cc50: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
cc60: 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  .         sqlite
cc70: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a  3MPrintf(db, "**
cc80: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 25 73  * in database %s
cc90: 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62   ***\n", db->aDb
cca0: 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20  [i].zName),.    
ccb0: 20 20 20 20 20 50 34 5f 44 59 4e 41 4d 49 43 29       P4_DYNAMIC)
ccc0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
ccd0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
cce0: 4d 6f 76 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a  Move, 2, 4, 1);.
ccf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cd00: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
cd10: 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a  ncat, 4, 3, 2);.
cd20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cd30: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
cd40: 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a  sultRow, 2, 1);.
cd50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cd60: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
cd70: 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61  r);..      /* Ma
cd80: 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20  ke sure all the 
cd90: 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73  indices are cons
cda0: 74 72 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c  tructed correctl
cdb0: 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  y..      */.    
cdc0: 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61    for(x=sqliteHa
cdd0: 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20  shFirst(pTbls); 
cde0: 78 20 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78  x && !isQuick; x
cdf0: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
ce00: 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62  x)){.        Tab
ce10: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
ce20: 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20  eHashData(x);.  
ce30: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64        Index *pId
ce40: 78 2c 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20  x, *pPk;.       
ce50: 20 49 6e 64 65 78 20 2a 70 50 72 69 6f 72 20 3d   Index *pPrior =
ce60: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   0;.        int 
ce70: 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20 20  loopTop;.       
ce80: 20 69 6e 74 20 69 44 61 74 61 43 75 72 2c 20 69   int iDataCur, i
ce90: 49 64 78 43 75 72 3b 0a 20 20 20 20 20 20 20 20  IdxCur;.        
cea0: 69 6e 74 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20  int r1 = -1;..  
ceb0: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
cec0: 70 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74  pIndex==0 ) cont
ced0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 50  inue;.        pP
cee0: 6b 20 3d 20 48 61 73 52 6f 77 69 64 28 70 54 61  k = HasRowid(pTa
cef0: 62 29 20 3f 20 30 20 3a 20 73 71 6c 69 74 65 33  b) ? 0 : sqlite3
cf00: 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
cf10: 70 54 61 62 29 3b 0a 20 20 20 20 20 20 20 20 61  pTab);.        a
cf20: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
cf30: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
cf40: 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f  Pos, 1);  /* Sto
cf50: 70 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f  p if out of erro
cf60: 72 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64  rs */.        Vd
cf70: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
cf80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cf90: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
cfa0: 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
cfb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
cfc0: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
cfd0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
cfe0: 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
cff0: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20  pParse);.       
d000: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
d010: 65 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72  eAndIndices(pPar
d020: 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65  se, pTab, OP_Ope
d030: 6e 52 65 61 64 2c 0a 20 20 20 20 20 20 20 20 20  nRead,.         
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d050: 20 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20            1, 0, 
d060: 26 69 44 61 74 61 43 75 72 2c 20 26 69 49 64 78  &iDataCur, &iIdx
d070: 43 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Cur);.        sq
d080: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d090: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
d0a0: 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  , 7);.        fo
d0b0: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
d0c0: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
d0d0: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
d0e0: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
d0f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d100: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
d110: 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69  r, 0, 8+j); /* i
d120: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75  ndex entries cou
d130: 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  nter */.        
d140: 7d 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65  }.        pParse
d150: 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61  ->nMem = MAX(pPa
d160: 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b  rse->nMem, 8+j);
d170: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d180: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d190: 5f 52 65 77 69 6e 64 2c 20 69 44 61 74 61 43 75  _Rewind, iDataCu
d1a0: 72 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72  r, 0); VdbeCover
d1b0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
d1c0: 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65  loopTop = sqlite
d1d0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d1e0: 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b  P_AddImm, 7, 1);
d1f0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69  .        /* Veri
d200: 66 79 20 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20  fy that all NOT 
d210: 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61  NULL columns rea
d220: 6c 6c 79 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c  lly are NOT NULL
d230: 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28   */.        for(
d240: 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f  j=0; j<pTab->nCo
d250: 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  l; j++){.       
d260: 20 20 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20     char *zErr;. 
d270: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
d280: 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20  2, jmp3;.       
d290: 20 20 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e     if( j==pTab->
d2a0: 69 50 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75 65  iPKey ) continue
d2b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
d2c0: 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f  pTab->aCol[j].no
d2d0: 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69  tNull==0 ) conti
d2e0: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 73  nue;.          s
d2f0: 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
d300: 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76  tColumnOfTable(v
d310: 2c 20 70 54 61 62 2c 20 69 44 61 74 61 43 75 72  , pTab, iDataCur
d320: 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , j, 3);.       
d330: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
d340: 61 6e 67 65 50 35 28 76 2c 20 4f 50 46 4c 41 47  angeP5(v, OPFLAG
d350: 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a 20 20 20  _TYPEOFARG);.   
d360: 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71         jmp2 = sq
d370: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
d380: 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33  v, OP_NotNull, 3
d390: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
d3a0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
d3b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d3c0: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
d3d0: 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65   -1); /* Decreme
d3e0: 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a  nt error limit *
d3f0: 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 45 72 72  /.          zErr
d400: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
d410: 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75  f(db, "NULL valu
d420: 65 20 69 6e 20 25 73 2e 25 73 22 2c 20 70 54 61  e in %s.%s", pTa
d430: 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  b->zName,.      
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43          pTab->aC
d460: 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  ol[j].zName);.  
d470: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d480: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
d490: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
d4a0: 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d  , zErr, P4_DYNAM
d4b0: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  IC);.          s
d4c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d4d0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
d4e0: 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 3, 1);.       
d4f0: 20 20 20 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65     jmp3 = sqlite
d500: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
d510: 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62  P_IfPos, 1); Vdb
d520: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d530: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d540: 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f  dbeAddOp0(v, OP_
d550: 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20  Halt);.         
d560: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
d570: 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20  Here(v, jmp2);. 
d580: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d590: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
d5a0: 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d  jmp3);.        }
d5b0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69  .        /* Vali
d5c0: 64 61 74 65 20 69 6e 64 65 78 20 65 6e 74 72 69  date index entri
d5d0: 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  es for the curre
d5e0: 6e 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20  nt row */.      
d5f0: 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
d600: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
d610: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
d620: 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
d630: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20        int jmp2, 
d640: 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35  jmp3, jmp4, jmp5
d650: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
d660: 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69 74 65 33  ckUniq = sqlite3
d670: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
d680: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
d690: 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74  pPk==pIdx ) cont
d6a0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
d6b0: 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65  r1 = sqlite3Gene
d6c0: 72 61 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61  rateIndexKey(pPa
d6d0: 72 73 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61  rse, pIdx, iData
d6e0: 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33  Cur, 0, 0, &jmp3
d6f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d710: 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 2c           pPrior,
d720: 20 72 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20   r1);.          
d730: 70 50 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20  pPrior = pIdx;. 
d740: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d750: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d760: 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29  _AddImm, 8+j, 1)
d770: 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20  ;  /* increment 
d780: 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20  entry count */. 
d790: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69           /* Veri
d7a0: 66 79 20 74 68 61 74 20 61 6e 20 69 6e 64 65 78  fy that an index
d7b0: 20 65 6e 74 72 79 20 65 78 69 73 74 73 20 66 6f   entry exists fo
d7c0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  r the current ta
d7d0: 62 6c 65 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20  ble row */.     
d7e0: 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69       jmp2 = sqli
d7f0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
d800: 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49  (v, OP_Found, iI
d810: 64 78 43 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c  dxCur+j, ckUniq,
d820: 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   r1,.           
d830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d840: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
d850: 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43  >nColumn); VdbeC
d860: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
d870: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d880: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
d890: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a  dImm, 1, -1); /*
d8a0: 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72   Decrement error
d8b0: 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20   limit */.      
d8c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d8d0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d8e0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 22 72  ng8, 0, 3, 0, "r
d8f0: 6f 77 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29  ow ", P4_STATIC)
d900: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d910: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
d920: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33   OP_Concat, 7, 3
d930: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
d940: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d950: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
d960: 20 30 2c 20 34 2c 20 30 2c 20 0a 20 20 20 20 20   0, 4, 0, .     
d970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d980: 20 20 20 20 20 20 20 22 20 6d 69 73 73 69 6e 67         " missing
d990: 20 66 72 6f 6d 20 69 6e 64 65 78 20 22 2c 20 50   from index ", P
d9a0: 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
d9b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d9c0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
d9d0: 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20  cat, 4, 3, 3);. 
d9e0: 20 20 20 20 20 20 20 20 20 6a 6d 70 35 20 3d 20           jmp5 = 
d9f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
da00: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
da10: 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20 20   0, 4, 0,.      
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64               pId
da40: 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41  x->zName, P4_TRA
da50: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20  NSIENT);.       
da60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
da70: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
da80: 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 4, 3, 3);.   
da90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
daa0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
dab0: 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b  esultRow, 3, 1);
dac0: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20  .          jmp4 
dad0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
dae0: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
daf0: 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   1); VdbeCoverag
db00: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
db10: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
db20: 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20  0(v, OP_Halt);. 
db30: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
db40: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
db50: 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp2);.         
db60: 20 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69   /* For UNIQUE i
db70: 6e 64 65 78 65 73 2c 20 76 65 72 69 66 79 20 74  ndexes, verify t
db80: 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74  hat only one ent
db90: 72 79 20 65 78 69 73 74 73 20 77 69 74 68 20 74  ry exists with t
dba0: 68 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  he.          ** 
dbb0: 63 75 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68  current key.  Th
dbc0: 65 20 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75  e entry is uniqu
dbd0: 65 20 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c  e if (1) any col
dbe0: 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20  umn is NULL.    
dbf0: 20 20 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20        ** or (2) 
dc00: 74 68 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68  the next entry h
dc10: 61 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b  as a different k
dc20: 65 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ey */.          
dc30: 69 66 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65  if( IsUniqueInde
dc40: 78 28 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20  x(pIdx) ){.     
dc50: 20 20 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f         int uniqO
dc60: 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  k = sqlite3VdbeM
dc70: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
dc80: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
dc90: 36 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  6;.            i
dca0: 6e 74 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20  nt kk;.         
dcb0: 20 20 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c     for(kk=0; kk<
dcc0: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b  pIdx->nKeyCol; k
dcd0: 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  k++){.          
dce0: 20 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70      int iCol = p
dcf0: 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b  Idx->aiColumn[kk
dd00: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ];.             
dd10: 20 61 73 73 65 72 74 28 20 69 43 6f 6c 3e 3d 30   assert( iCol>=0
dd20: 20 26 26 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e   && iCol<pTab->n
dd30: 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Col );.         
dd40: 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61       if( pTab->a
dd50: 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c  Col[iCol].notNul
dd60: 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  l ) continue;.  
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
dd80: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
dd90: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b   OP_IsNull, r1+k
dda0: 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20  k, uniqOk);.    
ddb0: 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f            VdbeCo
ddc0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
ddd0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
dde0: 20 20 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69       jmp6 = sqli
ddf0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
de00: 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75   OP_Next, iIdxCu
de10: 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61  r+j); VdbeCovera
de20: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
de30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
de40: 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c  dOp2(v, OP_Goto,
de50: 20 30 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20   0, uniqOk);.   
de60: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
de70: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
de80: 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp6);.         
de90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
dea0: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64  dOp4Int(v, OP_Id
deb0: 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  xGT, iIdxCur+j, 
dec0: 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20  uniqOk, r1,.    
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64               pId
def0: 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62  x->nKeyCol); Vdb
df00: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
df10: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
df20: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
df30: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
df40: 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65  ; /* Decrement e
df50: 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20  rror limit */.  
df60: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
df70: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
df80: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
df90: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfb0: 20 20 22 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e    "non-unique en
dfc0: 74 72 79 20 69 6e 20 69 6e 64 65 78 20 22 2c 20  try in index ", 
dfd0: 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
dfe0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
dff0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e000: 47 6f 74 6f 2c 20 30 2c 20 6a 6d 70 35 29 3b 0a  Goto, 0, jmp5);.
e010: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e020: 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61  te3VdbeResolveLa
e030: 62 65 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a  bel(v, uniqOk);.
e040: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
e050: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e060: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
e070: 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  4);.          sq
e080: 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
e090: 49 64 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c  IdxLabel(pParse,
e0a0: 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20   jmp3);.        
e0b0: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
e0c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e0d0: 50 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72  P_Next, iDataCur
e0e0: 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65  , loopTop); Vdbe
e0f0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
e100: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e110: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70  JumpHere(v, loop
e120: 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20  Top-1);.#ifndef 
e130: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
e140: 45 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73  ECOUNT.        s
e150: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
e160: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
e170: 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20 20 20  0, 2, 0, .      
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
e190: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
e1a0: 65 73 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50  es in index ", P
e1b0: 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
e1c0: 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78     for(j=0, pIdx
e1d0: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
e1e0: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
e1f0: 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20  pNext, j++){.   
e200: 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d         if( pPk==
e210: 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b  pIdx ) continue;
e220: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20  .          addr 
e230: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
e240: 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20  rentAddr(v);.   
e250: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e260: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
e270: 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29  fPos, 1, addr+2)
e280: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
e290: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
e2a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
e2b0: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
e2c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e2d0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e2e0: 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43   OP_Count, iIdxC
e2f0: 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20  ur+j, 3);.      
e300: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e310: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20  ddOp3(v, OP_Eq, 
e320: 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b  8+j, addr+8, 3);
e330: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
e340: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e350: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
e360: 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  v, SQLITE_NOTNUL
e370: 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  L);.          sq
e380: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
e390: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
e3a0: 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20   -1);.          
e3b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e3c0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
e3d0: 20 30 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e   0, 3, 0, pIdx->
e3e0: 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49  zName, P4_TRANSI
e3f0: 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ENT);.          
e400: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e410: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
e420: 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20  3, 2, 7);.      
e430: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e440: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
e450: 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20  ltRow, 7, 1);.  
e460: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f        }.#endif /
e470: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  * SQLITE_OMIT_BT
e480: 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20  REECOUNT */.    
e490: 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61    } .    }.    a
e4a0: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
e4b0: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
e4c0: 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29  raySize(endCode)
e4d0: 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b  , endCode, iLn);
e4e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
e4f0: 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72  ChangeP3(v, addr
e500: 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73  , -mxErr);.    s
e510: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
e520: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20  re(v, addr);.   
e530: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
e540: 67 65 50 34 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP4(v, addr+1, 
e550: 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49 43 29  "ok", P4_STATIC)
e560: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  ;.  }.  break;.#
e570: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
e580: 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
e590: 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  HECK */..#ifndef
e5a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
e5b0: 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  16.  /*.  **   P
e5c0: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20  RAGMA encoding. 
e5d0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63   **   PRAGMA enc
e5e0: 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c  oding = "utf-8"|
e5f0: 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36  "utf-16"|"utf-16
e600: 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20  le"|"utf-16be". 
e610: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20   **.  ** In its 
e620: 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73  first form, this
e630: 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20   pragma returns 
e640: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  the encoding of 
e650: 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61  the main.  ** da
e660: 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 64  tabase. If the d
e670: 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69  atabase is not i
e680: 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69  nitialized, it i
e690: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f  s initialized no
e6a0: 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  w..  **.  ** The
e6b0: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20   second form of 
e6c0: 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 61  this pragma is a
e6d0: 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61   no-op if the ma
e6e0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
e6f0: 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c  .  ** has not al
e700: 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
e710: 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20  alized. In this 
e720: 63 61 73 65 20 69 74 20 73 65 74 73 20 74 68 65  case it sets the
e730: 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e   default.  ** en
e740: 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c  coding that will
e750: 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
e760: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
e770: 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c  ile if a new fil
e780: 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65  e.  ** is create
e790: 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e  d. If an existin
e7a0: 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  g main database 
e7b0: 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20  file is opened, 
e7c0: 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65  then the.  ** de
e7d0: 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64  fault text encod
e7e0: 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69 73  ing for the exis
e7f0: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 69 73  ting database is
e800: 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a   used..  ** .  *
e810: 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e  * In all cases n
e820: 65 77 20 64 61 74 61 62 61 73 65 73 20 63 72 65  ew databases cre
e830: 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 41  ated using the A
e840: 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72  TTACH command ar
e850: 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74  e.  ** created t
e860: 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  o use the same d
e870: 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f  efault text enco
e880: 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e  ding as the main
e890: 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20   database. If.  
e8a0: 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
e8b0: 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65  base has not bee
e8c0: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e  n initialized an
e8d0: 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68 65  d/or created whe
e8e0: 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73  n ATTACH.  ** is
e8f0: 20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73 20   executed, this 
e900: 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74  is done before t
e910: 68 65 20 41 54 54 41 43 48 20 6f 70 65 72 61 74  he ATTACH operat
e920: 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ion..  **.  ** I
e930: 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  n the second for
e940: 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20 73 65  m this pragma se
e950: 74 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f  ts the text enco
e960: 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20  ding to be used 
e970: 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61  in.  ** new data
e980: 62 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74  base files creat
e990: 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64 61  ed using this da
e9a0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49  tabase handle. I
e9b0: 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75  t is only.  ** u
e9c0: 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64  seful if invoked
e9d0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
e9e0: 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  er the main data
e9f0: 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61  base i.  */.  ca
ea00: 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44  se PragTyp_ENCOD
ea10: 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  ING: {.    stati
ea20: 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45  c const struct E
ea30: 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63  ncName {.      c
ea40: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
ea50: 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20    u8 enc;.    } 
ea60: 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20  encnames[] = {. 
ea70: 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20       { "UTF8",  
ea80: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20     SQLITE_UTF8  
ea90: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
eaa0: 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c   "UTF-8",    SQL
eab0: 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20  ITE_UTF8        
eac0: 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65  },  /* Must be e
ead0: 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20  lement [1] */.  
eae0: 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22      { "UTF-16le"
eaf0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
eb00: 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
eb10: 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20   be element [2] 
eb20: 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  */.      { "UTF-
eb30: 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16be", SQLITE_UT
eb40: 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a  F16BE     },  /*
eb50: 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74   Must be element
eb60: 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20   [3] */.      { 
eb70: 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49  "UTF16le",  SQLI
eb80: 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d  TE_UTF16LE     }
eb90: 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  ,.      { "UTF16
eba0: 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46  be",  SQLITE_UTF
ebb0: 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20  16BE     },.    
ebc0: 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20    { "UTF-16",   
ebd0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
ebe0: 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f     }, /* SQLITE_
ebf0: 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20  UTF16NATIVE */. 
ec00: 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20       { "UTF16", 
ec10: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
ec20: 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
ec30: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
ec40: 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d  /.      { 0, 0 }
ec50: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73  .    };.    cons
ec60: 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65  t struct EncName
ec70: 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20   *pEnc;.    if( 
ec80: 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a  !zRight ){    /*
ec90: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
eca0: 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  g" */.      if( 
ecb0: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
ecc0: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
ecd0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
ece0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
ecf0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
ed00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ed10: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
ed20: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
ed30: 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49  "encoding", SQLI
ed40: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
ed50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ed60: 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op2(v, OP_String
ed70: 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20  8, 0, 1);.      
ed80: 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
ed90: 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e  [SQLITE_UTF8].en
eda0: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  c==SQLITE_UTF8 )
edb0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
edc0: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
edd0: 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51  UTF16LE].enc==SQ
ede0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
edf0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
ee00: 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
ee10: 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49  F16BE].enc==SQLI
ee20: 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
ee30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
ee40: 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 65  hangeP4(v, -1, e
ee50: 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72  ncnames[ENC(pPar
ee60: 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20  se->db)].zName, 
ee70: 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
ee80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ee90: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
eea0: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
eeb0: 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20  }else{          
eec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
eed0: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
eee0: 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20  g = XXX" */.    
eef0: 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65    /* Only change
ef00: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71   the value of sq
ef10: 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20  lite.enc if the 
ef20: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
ef30: 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  is not.      ** 
ef40: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20  initialized. If 
ef50: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
ef60: 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65  e exists, the ne
ef70: 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c  w sqlite.enc val
ef80: 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  ue.      ** will
ef90: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
efa0: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
efb0: 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20  is next loaded. 
efc0: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20  If it does not. 
efd0: 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20       ** already 
efe0: 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20  exists, it will 
eff0: 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  be created to us
f000: 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69  e the new encodi
f010: 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ng value..      
f020: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20  */.      if( .  
f030: 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f        !(DbHasPro
f040: 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f  perty(db, 0, DB_
f050: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c  SchemaLoaded)) |
f060: 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73  | .        DbHas
f070: 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
f080: 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20  DB_Empty) .     
f090: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
f0a0: 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30  pEnc=&encnames[0
f0b0: 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20  ]; pEnc->zName; 
f0c0: 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20  pEnc++){.       
f0d0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
f0e0: 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
f0f0: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b   pEnc->zName) ){
f100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 43 48  .            SCH
f110: 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e  EMA_ENC(db) = EN
f120: 43 28 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20  C(db) =.        
f130: 20 20 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e          pEnc->en
f140: 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20  c ? pEnc->enc : 
f150: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
f160: 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  VE;.            
f170: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
f180: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
f190: 20 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e       if( !pEnc->
f1a0: 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  zName ){.       
f1b0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
f1c0: 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75  sg(pParse, "unsu
f1d0: 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67  pported encoding
f1e0: 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a  : %s", zRight);.
f1f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
f200: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
f210: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
f220: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
f230: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
f240: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
f250: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a  VERSION_PRAGMAS.
f260: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
f270: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63  MA [database.]sc
f280: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a  hema_version.  *
f290: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
f2a0: 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72  base.]schema_ver
f2b0: 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e  sion = <integer>
f2c0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
f2d0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75  GMA [database.]u
f2e0: 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ser_version.  **
f2f0: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
f300: 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f  ase.]user_versio
f310: 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20  n = <integer>.  
f320: 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
f330: 20 5b 64 61 74 61 62 61 73 65 2e 5d 66 72 65 65   [database.]free
f340: 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e  list_count = <in
f350: 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
f360: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
f370: 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ase.]application
f380: 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  _id.  **   PRAGM
f390: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70  A [database.]app
f3a0: 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69  lication_id = <i
f3b0: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
f3c0: 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73  * The pragma's s
f3d0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e  chema_version an
f3e0: 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61  d user_version a
f3f0: 72 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f  re used to set o
f400: 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76  r get.  ** the v
f410: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65  alue of the sche
f420: 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75  ma-version and u
f430: 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73  ser-version, res
f440: 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a  pectively. Both.
f450: 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d    ** the schema-
f460: 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  version and the 
f470: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65  user-version are
f480: 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69   32-bit signed i
f490: 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f  ntegers.  ** sto
f4a0: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
f4b0: 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a  ase header..  **
f4c0: 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61  .  ** The schema
f4d0: 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c  -cookie is usual
f4e0: 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61  ly only manipula
f4f0: 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  ted internally b
f500: 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a  y SQLite. It.  *
f510: 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  * is incremented
f520: 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65   by SQLite whene
f530: 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
f540: 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66   schema is modif
f550: 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65  ied (by.  ** cre
f560: 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e  ating or droppin
f570: 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  g a table or ind
f580: 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20  ex). The schema 
f590: 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20  version is used 
f5a0: 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65  by.  ** SQLite e
f5b0: 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79  ach time a query
f5c0: 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20   is executed to 
f5d0: 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
f5e0: 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20  internal cache. 
f5f0: 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d   ** of the schem
f600: 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70  a used when comp
f610: 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75  iling the SQL qu
f620: 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20  ery matches the 
f630: 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74  schema of.  ** t
f640: 68 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69  he database agai
f650: 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f  nst which the co
f660: 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20  mpiled query is 
f670: 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65  actually execute
f680: 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69  d..  ** Subverti
f690: 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73  ng this mechanis
f6a0: 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47  m by using "PRAG
f6b0: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
f6c0: 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a  n" to modify.  *
f6d0: 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  * the schema-ver
f6e0: 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61  sion is potentia
f6f0: 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e  lly dangerous an
f700: 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72  d may lead to pr
f710: 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68  ogram.  ** crash
f720: 65 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63  es or database c
f730: 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77  orruption. Use w
f740: 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a  ith caution!.  *
f750: 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d  *.  ** The user-
f760: 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75  version is not u
f770: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  sed internally b
f780: 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79  y SQLite. It may
f790: 20 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   be used by.  **
f7a0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f   applications fo
f7b0: 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20  r any purpose.. 
f7c0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
f7d0: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a  yp_HEADER_VALUE:
f7e0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b   {.    int iCook
f7f0: 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41  ie = pPragma->iA
f800: 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20 63 6f  rg;  /* Which co
f810: 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f 72 20  okie to read or 
f820: 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c  write */.    sql
f830: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
f840: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
f850: 66 28 20 7a 52 69 67 68 74 20 26 26 20 28 70 50  f( zRight && (pP
f860: 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67  ragma->mPragFlag
f870: 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64   & PragFlag_Read
f880: 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Only)==0 ){.    
f890: 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73    /* Write the s
f8a0: 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20  pecified cookie 
f8b0: 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73  value */.      s
f8c0: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
f8d0: 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65  OpList setCookie
f8e0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
f8f0: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
f900: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
f910: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
f920: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
f930: 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20          0,  1,  
f940: 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
f950: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43         { OP_SetC
f960: 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
f970: 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20  0,  1},    /* 2 
f980: 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  */.      };.    
f990: 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c    int addr = sql
f9a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
f9b0: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
f9c0: 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f  etCookie), setCo
f9d0: 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  okie, 0);.      
f9e0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
f9f0: 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62  eP1(v, addr, iDb
fa00: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
fa10: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
fa20: 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65 33 41  addr+1, sqlite3A
fa30: 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
fa40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
fa50: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
fa60: 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  2, iDb);.      s
fa70: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
fa80: 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 43  P2(v, addr+2, iC
fa90: 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73  ookie);.    }els
faa0: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64  e{.      /* Read
fab0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
fac0: 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20  ookie value */. 
fad0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
fae0: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61  t VdbeOpList rea
faf0: 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20  dCookie[] = {.  
fb00: 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
fb10: 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20  action,     0,  
fb20: 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20  0,  0},    /* 0 
fb30: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
fb40: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20  ReadCookie,     
fb50: 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
fb60: 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 1 */.        
fb70: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
fb80: 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d        1,  1,  0}
fb90: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
fba0: 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74  int addr = sqlit
fbb0: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
fbc0: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61  v, ArraySize(rea
fbd0: 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f  dCookie), readCo
fbe0: 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  okie, 0);.      
fbf0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
fc00: 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62  eP1(v, addr, iDb
fc10: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
fc20: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
fc30: 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20  addr+1, iDb);.  
fc40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
fc50: 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b  hangeP3(v, addr+
fc60: 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20  1, iCookie);.   
fc70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
fc80: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
fc90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fca0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
fcb0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
fcc0: 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
fcd0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a  ANSIENT);.    }.
fce0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
fcf0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
fd00: 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
fd10: 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  N_PRAGMAS */..#i
fd20: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
fd30: 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
fd40: 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  DIAGS.  /*.  ** 
fd50: 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65    PRAGMA compile
fd60: 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20  _options.  **.  
fd70: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
fd80: 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69  mes of all compi
fd90: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options 
fda0: 75 73 65 64 20 69 6e 20 74 68 69 73 20 62 75 69  used in this bui
fdb0: 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74  ld,.  ** one opt
fdc0: 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a  ion per row..  *
fdd0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
fde0: 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53  _COMPILE_OPTIONS
fdf0: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20  : {.    int i = 
fe00: 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  0;.    const cha
fe10: 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 73 71 6c  r *zOpt;.    sql
fe20: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
fe30: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 70 50  ls(v, 1);.    pP
fe40: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a  arse->nMem = 1;.
fe50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
fe60: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
fe70: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
fe80: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20  ompile_option", 
fe90: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
fea0: 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f 70 74      while( (zOpt
feb0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69   = sqlite3_compi
fec0: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b  leoption_get(i++
fed0: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ))!=0 ){.      s
fee0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
fef0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
ff00: 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74 2c 20 30  0, 1, 0, zOpt, 0
ff10: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ff20: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ff30: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
ff40: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
ff50: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
ff60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
ff70: 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20  ILEOPTION_DIAGS 
ff80: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
ff90: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a  TE_OMIT_WAL.  /*
ffa0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
ffb0: 64 61 74 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68  database.]wal_ch
ffc0: 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73 69  eckpoint = passi
ffd0: 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74 7c  ve|full|restart|
ffe0: 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a 0a 20 20  truncate.  **.  
fff0: 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68  ** Checkpoint th
10000 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  e database..  */
10010 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10020 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20  WAL_CHECKPOINT: 
10030 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d 20  {.    int iBt = 
10040 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c  (pId2->z?iDb:SQL
10050 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
10060 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65  );.    int eMode
10070 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
10080 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20 20  OINT_PASSIVE;.  
10090 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
100a0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
100b0 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
100c0 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20   "full")==0 ){. 
100d0 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53         eMode = S
100e0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
100f0 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c  _FULL;.      }el
10100 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
10110 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 72  rICmp(zRight, "r
10120 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20  estart")==0 ){. 
10130 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53         eMode = S
10140 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
10150 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20 20  _RESTART;.      
10160 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
10170 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
10180 20 22 74 72 75 6e 63 61 74 65 22 29 3d 3d 30 20   "truncate")==0 
10190 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  ){.        eMode
101a0 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
101b0 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20  OINT_TRUNCATE;. 
101c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
101d0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
101e0 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20  umCols(v, 3);.  
101f0 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
10200 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   3;.    sqlite3V
10210 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
10220 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
10230 2c 20 22 62 75 73 79 22 2c 20 53 51 4c 49 54 45  , "busy", SQLITE
10240 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
10250 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
10260 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
10270 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53  E_NAME, "log", S
10280 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
10290 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
102a0 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
102b0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68  OLNAME_NAME, "ch
102c0 65 63 6b 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c  eckpointed", SQL
102d0 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20  ITE_STATIC);..  
102e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
102f0 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70  Op3(v, OP_Checkp
10300 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65  oint, iBt, eMode
10310 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
10320 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10330 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
10340 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  3);.  }.  break;
10350 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
10360 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65  AGMA wal_autoche
10370 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50  ckpoint.  **   P
10380 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68  RAGMA wal_autoch
10390 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a  eckpoint = N.  *
103a0 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65  *.  ** Configure
103b0 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e   a database conn
103c0 65 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61  ection to automa
103d0 74 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69  tically checkpoi
103e0 6e 74 20 61 20 64 61 74 61 62 61 73 65 0a 20 20  nt a database.  
103f0 2a 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75 6c  ** after accumul
10400 61 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20 69  ating N frames i
10410 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75  n the log. Or qu
10420 65 72 79 20 66 6f 72 20 74 68 65 20 63 75 72 72  ery for the curr
10430 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f  ent value.  ** o
10440 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  f N..  */.  case
10450 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54   PragTyp_WAL_AUT
10460 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20  OCHECKPOINT: {. 
10470 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
10480 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77  .      sqlite3_w
10490 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
104a0 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f  t(db, sqlite3Ato
104b0 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
104c0 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
104d0 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 77  leInt(pParse, "w
104e0 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
104f0 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e  t", .       db->
10500 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71  xWalCallback==sq
10510 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
10520 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20  ook ? .         
10530 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f    SQLITE_PTR_TO_
10540 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29  INT(db->pWalArg)
10550 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65   : 0);.  }.  bre
10560 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  ak;.#endif..  /*
10570 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68  .  **  PRAGMA sh
10580 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a  rink_memory.  **
10590 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  .  ** IMPLEMENTA
105a0 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35  TION-OF: R-23445
105b0 2d 34 36 31 30 39 20 54 68 69 73 20 70 72 61 67  -46109 This prag
105c0 6d 61 20 63 61 75 73 65 73 20 74 68 65 20 64 61  ma causes the da
105d0 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e  tabase.  ** conn
105e0 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20  ection on which 
105f0 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f  it is invoked to
10600 20 66 72 65 65 20 75 70 20 61 73 20 6d 75 63 68   free up as much
10610 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20 20   memory as it.  
10620 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69  ** can, by calli
10630 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ng sqlite3_db_re
10640 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a  lease_memory()..
10650 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
10660 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52  Typ_SHRINK_MEMOR
10670 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  Y: {.    sqlite3
10680 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
10690 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61  ry(db);.    brea
106a0 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
106b0 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f  *   PRAGMA busy_
106c0 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50  timeout.  **   P
106d0 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f  RAGMA busy_timeo
106e0 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ut = N.  **.  **
106f0 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75   Call sqlite3_bu
10700 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e  sy_timeout(db, N
10710 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63  ).  Return the c
10720 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76  urrent timeout v
10730 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65  alue.  ** if one
10740 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20   is set.  If no 
10750 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20  busy handler or 
10760 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79  a different busy
10770 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a   handler is set.
10780 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72    ** then 0 is r
10790 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e  eturned.  Settin
107a0 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f  g the busy_timeo
107b0 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74  ut to 0 or negat
107c0 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  ive.  ** disable
107d0 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20  s the timeout.. 
107e0 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61   */.  /*case Pra
107f0 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
10800 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20  T*/ default: {. 
10810 20 20 20 61 73 73 65 72 74 28 20 70 50 72 61 67     assert( pPrag
10820 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50 72  ma->ePragTyp==Pr
10830 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
10840 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  UT );.    if( zR
10850 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
10860 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
10870 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  ut(db, sqlite3At
10880 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
10890 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
108a0 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
108b0 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62  timeout",  db->b
108c0 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20  usyTimeout);.   
108d0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
108e0 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
108f0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a  soft_heap_limit.
10900 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
10910 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20  ft_heap_limit = 
10920 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c  N.  **.  ** IMPL
10930 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
10940 2d 32 36 33 34 33 2d 34 35 39 33 30 20 54 68 69  -26343-45930 Thi
10950 73 20 70 72 61 67 6d 61 20 69 6e 76 6f 6b 65 73  s pragma invokes
10960 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65   the.  ** sqlite
10970 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
10980 74 36 34 28 29 20 69 6e 74 65 72 66 61 63 65 20  t64() interface 
10990 77 69 74 68 20 74 68 65 20 61 72 67 75 6d 65 6e  with the argumen
109a0 74 20 4e 2c 20 69 66 20 4e 20 69 73 0a 20 20 2a  t N, if N is.  *
109b0 2a 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20  * specified and 
109c0 69 73 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  is a non-negativ
109d0 65 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2a 20  e integer..  ** 
109e0 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
109f0 46 3a 20 52 2d 36 34 34 35 31 2d 30 37 31 36 33  F: R-64451-07163
10a00 20 54 68 65 20 73 6f 66 74 5f 68 65 61 70 5f 6c   The soft_heap_l
10a10 69 6d 69 74 20 70 72 61 67 6d 61 20 61 6c 77 61  imit pragma alwa
10a20 79 73 0a 20 20 2a 2a 20 72 65 74 75 72 6e 73 20  ys.  ** returns 
10a30 74 68 65 20 73 61 6d 65 20 69 6e 74 65 67 65 72  the same integer
10a40 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72   that would be r
10a50 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a 20  eturned by the. 
10a60 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74   ** sqlite3_soft
10a70 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31  _heap_limit64(-1
10a80 29 20 43 2d 6c 61 6e 67 75 61 67 65 20 66 75 6e  ) C-language fun
10a90 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61  ction..  */.  ca
10aa0 73 65 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f  se PragTyp_SOFT_
10ab0 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20  HEAP_LIMIT: {.  
10ac0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
10ad0 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  N;.    if( zRigh
10ae0 74 20 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f  t && sqlite3DecO
10af0 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74  rHexToI64(zRight
10b00 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  , &N)==SQLITE_OK
10b10 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
10b20 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
10b30 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20  t64(N);.    }.  
10b40 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
10b50 74 28 70 50 61 72 73 65 2c 20 22 73 6f 66 74 5f  t(pParse, "soft_
10b60 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71  heap_limit",  sq
10b70 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
10b80 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20  limit64(-1));.  
10b90 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
10ba0 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
10bb0 20 74 68 72 65 61 64 73 0a 20 20 2a 2a 20 20 20   threads.  **   
10bc0 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 20 3d  PRAGMA threads =
10bd0 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
10be0 66 69 67 75 72 65 20 74 68 65 20 6d 61 78 69 6d  figure the maxim
10bf0 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72  um number of wor
10c00 6b 65 72 20 74 68 72 65 61 64 73 2e 20 20 52 65  ker threads.  Re
10c10 74 75 72 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a  turn the new.  *
10c20 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68 69 63 68  * maximum, which
10c30 20 6d 69 67 68 74 20 62 65 20 6c 65 73 73 20 74   might be less t
10c40 68 61 6e 20 72 65 71 75 65 73 74 65 64 2e 0a 20  han requested.. 
10c50 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
10c60 79 70 5f 54 48 52 45 41 44 53 3a 20 7b 0a 20 20  yp_THREADS: {.  
10c70 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
10c80 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  N;.    if( zRigh
10c90 74 0a 20 20 20 20 20 26 26 20 73 71 6c 69 74 65  t.     && sqlite
10ca0 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
10cb0 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49  Right, &N)==SQLI
10cc0 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e  TE_OK.     && N>
10cd0 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
10ce0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62  sqlite3_limit(db
10cf0 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57  , SQLITE_LIMIT_W
10d00 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 28  ORKER_THREADS, (
10d10 69 6e 74 29 28 4e 26 30 78 37 66 66 66 66 66 66  int)(N&0x7ffffff
10d20 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  f));.    }.    r
10d30 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
10d40 50 61 72 73 65 2c 20 22 74 68 72 65 61 64 73 22  Parse, "threads"
10d50 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
10d60 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
10d70 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c  mit(db, SQLITE_L
10d80 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
10d90 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62  ADS, -1));.    b
10da0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64  reak;.  }..#if d
10db0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
10dc0 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
10dd0 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f  SQLITE_TEST).  /
10de0 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68  *.  ** Report th
10df0 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20  e current state 
10e00 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72  of file logs for
10e10 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20   all databases. 
10e20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
10e30 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20  yp_LOCK_STATUS: 
10e40 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10e50 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61  st char *const a
10e60 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zLockName[] = {.
10e70 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22        "unlocked"
10e80 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72 65 73  , "shared", "res
10e90 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67  erved", "pending
10ea0 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20  ", "exclusive". 
10eb0 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b     };.    int i;
10ec0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10ed0 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29  SetNumCols(v, 2)
10ee0 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
10ef0 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69  em = 2;.    sqli
10f00 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
10f10 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
10f20 4e 41 4d 45 2c 20 22 64 61 74 61 62 61 73 65 22  NAME, "database"
10f30 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
10f40 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
10f50 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
10f60 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
10f70 22 73 74 61 74 75 73 22 2c 20 53 51 4c 49 54 45  "status", SQLITE
10f80 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f  _STATIC);.    fo
10f90 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
10fa0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74  ; i++){.      Bt
10fb0 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20  ree *pBt;.      
10fc0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
10fd0 74 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a  te = "unknown";.
10fe0 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20        int j;.   
10ff0 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
11000 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e  ].zName==0 ) con
11010 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
11020 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
11030 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
11040 20 31 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69   1, 0, db->aDb[i
11050 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54  ].zName, P4_STAT
11060 49 43 29 3b 0a 20 20 20 20 20 20 70 42 74 20 3d  IC);.      pBt =
11070 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b   db->aDb[i].pBt;
11080 0a 20 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d  .      if( pBt==
11090 30 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  0 || sqlite3Btre
110a0 65 50 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29  ePager(pBt)==0 )
110b0 7b 0a 20 20 20 20 20 20 20 20 7a 53 74 61 74 65  {.        zState
110c0 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20   = "closed";.   
110d0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
110e0 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
110f0 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44  l(db, i ? db->aD
11100 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20  b[i].zName : 0, 
11110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e        SQLITE_FCN
11140 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a  TL_LOCKSTATE, &j
11150 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )==SQLITE_OK ){.
11160 20 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20           zState 
11170 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b  = azLockName[j];
11180 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
11190 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
111a0 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
111b0 30 2c 20 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c  0, 2, 0, zState,
111c0 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
111d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
111e0 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
111f0 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20  tRow, 1, 2);.   
11200 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
11210 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
11220 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
11230 43 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  C.  case PragTyp
11240 5f 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  _KEY: {.    if( 
11250 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33  zRight ) sqlite3
11260 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  _key_v2(db, zDb,
11270 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33   zRight, sqlite3
11280 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
11290 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
112a0 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  }.  case PragTyp
112b0 5f 52 45 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66  _REKEY: {.    if
112c0 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74  ( zRight ) sqlit
112d0 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20  e3_rekey_v2(db, 
112e0 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c  zDb, zRight, sql
112f0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69  ite3Strlen30(zRi
11300 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b  ght));.    break
11310 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61  ;.  }.  case Pra
11320 67 54 79 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20  gTyp_HEXKEY: {. 
11330 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
11340 0a 20 20 20 20 20 20 75 38 20 69 42 79 74 65 3b  .      u8 iByte;
11350 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
11360 20 20 20 20 63 68 61 72 20 7a 4b 65 79 5b 34 30      char zKey[40
11370 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ];.      for(i=0
11380 2c 20 69 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a  , iByte=0; i<siz
11390 65 6f 66 28 7a 4b 65 79 29 2a 32 20 26 26 20 73  eof(zKey)*2 && s
113a0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 7a  qlite3Isxdigit(z
113b0 52 69 67 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b  Right[i]); i++){
113c0 0a 20 20 20 20 20 20 20 20 69 42 79 74 65 20 3d  .        iByte =
113d0 20 28 69 42 79 74 65 3c 3c 34 29 20 2b 20 73 71   (iByte<<4) + sq
113e0 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 52  lite3HexToInt(zR
113f0 69 67 68 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20  ight[i]);.      
11400 20 20 69 66 28 20 28 69 26 31 29 21 3d 30 20 29    if( (i&1)!=0 )
11410 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79   zKey[i/2] = iBy
11420 74 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  te;.      }.    
11430 20 20 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20    if( (zLeft[3] 
11440 26 20 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20  & 0xf)==0xb ){. 
11450 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6b         sqlite3_k
11460 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
11470 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20  Key, i/2);.     
11480 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
11490 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32  sqlite3_rekey_v2
114a0 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20  (db, zDb, zKey, 
114b0 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  i/2);.      }.  
114c0 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
114d0 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   }.#endif.#if de
114e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
114f0 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e  _CODEC) || defin
11500 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
11510 5f 43 45 52 4f 44 29 0a 20 20 63 61 73 65 20 50  _CEROD).  case P
11520 72 61 67 54 79 70 5f 41 43 54 49 56 41 54 45 5f  ragTyp_ACTIVATE_
11530 45 58 54 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20  EXTENSIONS: if( 
11540 7a 52 69 67 68 74 20 29 7b 0a 23 69 66 64 65 66  zRight ){.#ifdef
11550 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
11560 43 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  C.    if( sqlite
11570 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
11580 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20  , "see-", 4)==0 
11590 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
115a0 5f 61 63 74 69 76 61 74 65 5f 73 65 65 28 26 7a  _activate_see(&z
115b0 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d  Right[4]);.    }
115c0 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
115d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52  QLITE_ENABLE_CER
115e0 4f 44 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  OD.    if( sqlit
115f0 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68  e3StrNICmp(zRigh
11600 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d  t, "cerod-", 6)=
11610 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
11620 74 65 33 5f 61 63 74 69 76 61 74 65 5f 63 65 72  te3_activate_cer
11630 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a  od(&zRight[6]);.
11640 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
11650 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
11660 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20  ..  } /* End of 
11670 74 68 65 20 50 52 41 47 4d 41 20 73 77 69 74 63  the PRAGMA switc
11680 68 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74  h */..pragma_out
11690 3a 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  :.  sqlite3DbFre
116a0 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20  e(db, zLeft);.  
116b0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
116c0 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65  , zRight);.}..#e
116d0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
116e0 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a        MIT_PRAGMA */.