/ Hex Artifact Content
Login

Artifact 234814978bcd35bce6e2874dfb2f5b5e28e7fb38:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20  or ON or NORMAL 
04c0: 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20  and 2 for FULL. 
04d0: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e   Return 1 for an
04e0: 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e   empty or .** un
04f0: 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e  recognized strin
0500: 67 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65  g argument.  The
0510: 20 46 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20   FULL option is 
0520: 64 69 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66  disallowed.** if
0530: 20 74 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61   the omitFull pa
0540: 72 61 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a  rameter it 1..**
0550: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
0560: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
0570: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
0580: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
0590: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
05a0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
05b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
05c0: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
05d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
05e0: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
05f0: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
0600: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
0610: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
0620: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
0630: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
0640: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
0650: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
0660: 2f 0a 73 74 61 74 69 63 20 75 38 20 67 65 74 53  /.static u8 getS
0670: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
0680: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d   char *z, int om
0690: 69 74 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29  itFull, u8 dflt)
06a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
06c0: 2a 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34  * 123456789 1234
06d0: 35 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69  56789 */.  stati
06e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65  c const char zTe
06f0: 78 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73  xt[] = "onoffals
0700: 65 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20  eyestruefull";. 
0710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0720: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0730: 20 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c   1, 2, 4, 9, 12,
0740: 20 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63   16};.  static c
0750: 6f 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b  onst u8 iLength[
0760: 5d 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c  ] = {2, 2, 3, 5,
0770: 20 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61   3, 4, 4};.  sta
0780: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61  tic const u8 iVa
0790: 6c 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20  lue[] =  {1, 0, 
07a0: 30 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a  0, 0, 1, 1, 2};.
07b0: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66    int i, n;.  if
07c0: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
07d0: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
07e0: 72 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74  rn (u8)sqlite3At
07f0: 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  oi(z);.  }.  n =
0800: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
0810: 28 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  (z);.  for(i=0; 
0820: 69 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e  i<ArraySize(iLen
0830: 67 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69  gth)-omitFull; i
0840: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65  ++){.    if( iLe
0850: 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71  ngth[i]==n && sq
0860: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a  lite3StrNICmp(&z
0870: 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d  Text[iOffset[i]]
0880: 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ,z,n)==0 ){.    
0890: 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b    return iValue[
08a0: 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  i];.    }.  }.  
08b0: 72 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a  return dflt;.}..
08c0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
08d0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
08e0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
08f0: 6c 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74  lue..*/.u8 sqlit
0900: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
0910: 73 74 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64  st char *z, u8 d
0920: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
0930: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
0940: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
0950: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
0960: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
0970: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
0980: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
0990: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
09a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
09b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
09c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
09d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
09e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
09f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
0a00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
0a10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
0a20: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0a30: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
0a40: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0a50: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0a60: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
0a70: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
0a80: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
0a90: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
0aa0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
0ab0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0ac0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
0ad0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
0ae0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
0af0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
0b00: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0b10: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
0b20: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
0b30: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0b40: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
0b50: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
0b60: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
0b70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
0b80: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0b90: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
0ba0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
0bb0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
0bc0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
0bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
0be0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
0bf0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
0c00: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
0c10: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
0c20: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
0c30: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
0c40: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
0c50: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
0c60: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
0c70: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
0c80: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
0c90: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0ca0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
0cb0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
0cc0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
0cd0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
0ce0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0cf0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
0d00: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
0d10: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
0d20: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
0d30: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
0d40: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d50: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
0d60: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
0d70: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
0d80: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
0d90: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
0da0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
0db0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
0dc0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
0dd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
0de0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
0df0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
0e00: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
0e10: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
0e20: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
0e30: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
0e40: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
0e50: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
0e60: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
0e70: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
0e80: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
0e90: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
0ea0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
0eb0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
0ec0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
0ed0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
0ee0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
0ef0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
0f00: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
0f10: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
0f20: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
0f30: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
0f40: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
0f50: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
0f60: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
0f70: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
0f80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
0f90: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
0fa0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
0fb0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
0fc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
0fd0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
0fe0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
0ff0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
1000: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
1010: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
1020: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
1030: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
1040: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
1050: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1060: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
1070: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
1080: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
1090: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
10a0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
10b0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
10c0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
10d0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
10e0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
10f0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
1100: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
1110: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
1120: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
1130: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
1140: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
1150: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
1160: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
1170: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
1180: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
1190: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11a0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
11b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
11c0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
11d0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
11e0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
11f0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1200: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1210: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
1220: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1230: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
1240: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
1250: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
1260: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1270: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
1280: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
1290: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
12a0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
12b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12c0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
12d0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
12e0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
12f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
1300: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
1310: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
1320: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
1330: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
1340: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
1350: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
1360: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
1370: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
1380: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
1390: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
13a0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
13b0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
13c0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
13d0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
13e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
13f0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
1400: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
1410: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
1420: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
1430: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1440: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
1450: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
1460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1470: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
1480: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
1490: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74   */../*.** Set t
14a0: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
14b0: 66 69 72 73 74 20 4e 20 63 6f 6c 75 6d 6e 73 20  first N columns 
14c0: 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  to the values in
14d0: 20 61 7a 43 6f 6c 5b 5d 0a 2a 2f 0a 73 74 61 74   azCol[].*/.stat
14e0: 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 43 6f  ic void setAllCo
14f0: 6c 75 6d 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62  lumnNames(.  Vdb
1500: 65 20 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20  e *v,           
1510: 20 20 20 20 2f 2a 20 54 68 65 20 71 75 65 72 79      /* The query
1520: 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1530: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20  ion */.  int N, 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1550: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
1560: 75 6d 6e 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  umns */.  const 
1570: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 20 20 20 20  char **azCol    
1580: 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 63 6f 6c   /* Names of col
1590: 75 6d 6e 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  umns */.){.  int
15a0: 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   i;.  sqlite3Vdb
15b0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 4e  eSetNumCols(v, N
15c0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
15d0: 4e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  N; i++){.    sql
15e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
15f0: 6d 65 28 76 2c 20 69 2c 20 43 4f 4c 4e 41 4d 45  me(v, i, COLNAME
1600: 5f 4e 41 4d 45 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  _NAME, azCol[i],
1610: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
1620: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
1630: 69 64 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e  id setOneColumnN
1640: 61 6d 65 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e  ame(Vdbe *v, con
1650: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73  st char *z){.  s
1660: 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
1670: 28 76 2c 20 31 2c 20 26 7a 29 3b 0a 7d 0a 0a 2f  (v, 1, &z);.}../
1680: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f  *.** Generate co
1690: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73  de to return a s
16a0: 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 76 61  ingle integer va
16b0: 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  lue..*/.static v
16c0: 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67 6c 65  oid returnSingle
16d0: 49 6e 74 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e  Int(Vdbe *v, con
16e0: 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c  st char *zLabel,
16f0: 20 69 36 34 20 76 61 6c 75 65 29 7b 0a 20 20 73   i64 value){.  s
1700: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
1710: 44 75 70 38 28 76 2c 20 4f 50 5f 49 6e 74 36 34  Dup8(v, OP_Int64
1720: 2c 20 30 2c 20 31 2c 20 30 2c 20 28 63 6f 6e 73  , 0, 1, 0, (cons
1730: 74 20 75 38 2a 29 26 76 61 6c 75 65 2c 20 50 34  t u8*)&value, P4
1740: 5f 49 4e 54 36 34 29 3b 0a 20 20 73 65 74 4f 6e  _INT64);.  setOn
1750: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a  eColumnName(v, z
1760: 4c 61 62 65 6c 29 3b 0a 20 20 73 71 6c 69 74 65  Label);.  sqlite
1770: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
1780: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
1790: 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e  1);.}../*.** Gen
17a0: 65 72 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65  erate code to re
17b0: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 74 65  turn a single te
17c0: 78 74 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  xt value..*/.sta
17d0: 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53  tic void returnS
17e0: 69 6e 67 6c 65 54 65 78 74 28 0a 20 20 56 64 62  ingleText(.  Vdb
17f0: 65 20 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20  e *v,           
1800: 20 20 20 20 20 2f 2a 20 50 72 65 70 61 72 65 64       /* Prepared
1810: 20 73 74 61 74 65 6d 65 6e 74 20 75 6e 64 65 72   statement under
1820: 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f   construction */
1830: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1840: 4c 61 62 65 6c 2c 20 20 20 20 20 2f 2a 20 4e 61  Label,     /* Na
1850: 6d 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  me of the result
1860: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 6f 6e   column */.  con
1870: 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 75 65 20  st char *zValue 
1880: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
1890: 20 62 65 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a   be returned */.
18a0: 29 7b 0a 20 20 69 66 28 20 7a 56 61 6c 75 65 20  ){.  if( zValue 
18b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
18c0: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
18d0: 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  1, (const char*)
18e0: 7a 56 61 6c 75 65 29 3b 0a 20 20 20 20 73 65 74  zValue);.    set
18f0: 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c  OneColumnName(v,
1900: 20 7a 4c 61 62 65 6c 29 3b 0a 20 20 20 20 73 71   zLabel);.    sq
1910: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
1920: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
1930: 20 31 2c 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a   1, 1);.  }.}...
1940: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 73 61  /*.** Set the sa
1950: 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70  fety_level and p
1960: 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72 20 70  ager flags for p
1970: 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20 69 66  ager iDb.  Or if
1980: 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68   iDb<0.** set th
1990: 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72 20 61  ese values for a
19a0: 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69  ll pagers..*/.#i
19b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
19c0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
19d0: 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 41  static void setA
19e0: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73 71 6c  llPagerFlags(sql
19f0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28  ite3 *db){.  if(
1a00: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
1a10: 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62 20 3d  ){.    Db *pDb =
1a20: 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e   db->aDb;.    in
1a30: 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20  t n = db->nDb;. 
1a40: 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54     assert( SQLIT
1a50: 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47  E_FullFSync==PAG
1a60: 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a  ER_FULLFSYNC );.
1a70: 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49      assert( SQLI
1a80: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
1a90: 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  ==PAGER_CKPT_FUL
1aa0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
1ab0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 61 63  sert( SQLITE_Cac
1ac0: 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43  heSpill==PAGER_C
1ad0: 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20  ACHESPILL );.   
1ae0: 20 61 73 73 65 72 74 28 20 28 50 41 47 45 52 5f   assert( (PAGER_
1af0: 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45  FULLFSYNC | PAGE
1b00: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
1b10: 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45 53 50   | PAGER_CACHESP
1b20: 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20 20  ILL).           
1b30: 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c 41 47    ==  PAGER_FLAG
1b40: 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20 61 73  S_MASK );.    as
1b50: 73 65 72 74 28 20 28 70 44 62 2d 3e 73 61 66 65  sert( (pDb->safe
1b60: 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45 52  ty_level & PAGER
1b70: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53  _SYNCHRONOUS_MAS
1b80: 4b 29 3d 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f  K)==pDb->safety_
1b90: 6c 65 76 65 6c 20 29 3b 0a 20 20 20 20 77 68 69  level );.    whi
1ba0: 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b  le( (n--) > 0 ){
1bb0: 0a 20 20 20 20 20 20 69 66 28 20 70 44 62 2d 3e  .      if( pDb->
1bc0: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73  pBt ){.        s
1bd0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50 61  qlite3BtreeSetPa
1be0: 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e 70 42  gerFlags(pDb->pB
1bf0: 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
1c00: 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f      pDb->safety_
1c10: 6c 65 76 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61  level | (db->fla
1c20: 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47 53  gs & PAGER_FLAGS
1c30: 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20 20  _MASK) );.      
1c40: 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20  }.      pDb++;. 
1c50: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65     }.  }.}.#else
1c60: 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c 6c  .# define setAll
1c70: 50 61 67 65 72 46 6c 61 67 73 28 58 29 20 20 2f  PagerFlags(X)  /
1c80: 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
1c90: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  f.../*.** Return
1ca0: 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
1cb0: 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e  e name for a con
1cc0: 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74 69  straint resoluti
1cd0: 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  on action..*/.#i
1ce0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1cf0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74  T_FOREIGN_KEY.st
1d00: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
1d10: 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61  *actionName(u8 a
1d20: 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20  ction){.  const 
1d30: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73  char *zName;.  s
1d40: 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29 7b  witch( action ){
1d50: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74  .    case OE_Set
1d60: 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  Null:  zName = "
1d70: 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20  SET NULL";      
1d80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1d90: 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a  e OE_SetDflt:  z
1da0: 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46 41  Name = "SET DEFA
1db0: 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  ULT";     break;
1dc0: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61 73  .    case OE_Cas
1dd0: 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  cade:  zName = "
1de0: 43 41 53 43 41 44 45 22 3b 20 20 20 20 20 20 20  CASCADE";       
1df0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1e00: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20 7a  e OE_Restrict: z
1e10: 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43 54  Name = "RESTRICT
1e20: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
1e30: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
1e40: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1e50: 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20  NO ACTION";  .  
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e70: 20 20 20 20 61 73 73 65 72 74 28 20 61 63 74 69      assert( acti
1e80: 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62  on==OE_None ); b
1e90: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75  reak;.  }.  retu
1ea0: 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64  rn zName;.}.#end
1eb0: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d  if.../*.** Param
1ec0: 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74 20  eter eMode must 
1ed0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50 41  be one of the PA
1ee0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
1ef0: 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  XXX constants.**
1f00: 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67 65   defined in page
1f10: 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74 69  r.h. This functi
1f20: 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1f30: 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72 63  ssociated lowerc
1f40: 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d  ase.** journal-m
1f50: 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e  ode name..*/.con
1f60: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
1f70: 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
1f80: 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74  int eMode){.  st
1f90: 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e 73  atic char * cons
1fa0: 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d  t azModeName[] =
1fb0: 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22 2c   {.    "delete",
1fc0: 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66 66   "persist", "off
1fd0: 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20 22  ", "truncate", "
1fe0: 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66 20  memory".#ifndef 
1ff0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2000: 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e       , "wal".#en
2010: 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72  dif.  };.  asser
2020: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2030: 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29  MODE_DELETE==0 )
2040: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
2050: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
2060: 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73  RSIST==1 );.  as
2070: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
2080: 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29  NALMODE_OFF==2 )
2090: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
20a0: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
20b0: 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61  UNCATE==3 );.  a
20c0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
20d0: 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d  RNALMODE_MEMORY=
20e0: 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =4 );.  assert( 
20f0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2100: 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73  E_WAL==5 );.  as
2110: 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26  sert( eMode>=0 &
2120: 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69  & eMode<=ArraySi
2130: 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29  ze(azModeName) )
2140: 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d  ;..  if( eMode==
2150: 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65  ArraySize(azMode
2160: 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20 30  Name) ) return 0
2170: 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64  ;.  return azMod
2180: 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a  eName[eMode];.}.
2190: 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61  ./*.** Process a
21a0: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
21b0: 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d  t.  .**.** Pragm
21c0: 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66  as are of this f
21d0: 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  orm:.**.**      
21e0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
21f0: 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a  .]id [= value].*
2200: 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66  *.** The identif
2210: 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ier might also b
2220: 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65  e a string.  The
2230: 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69   value is a stri
2240: 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74  ng, and.** ident
2250: 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62  ifier, or a numb
2260: 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61  er.  If minusFla
2270: 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  g is true, then 
2280: 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  the value is.** 
2290: 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61  a number that wa
22a0: 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  s preceded by a 
22b0: 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a  minus sign..**.*
22c0: 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69  * If the left si
22d0: 64 65 20 69 73 20 22 64 61 74 61 62 61 73 65 2e  de is "database.
22e0: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
22f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 61   the database na
2300: 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69  me.** and pId2 i
2310: 73 20 74 68 65 20 69 64 2e 20 20 49 66 20 74 68  s the id.  If th
2320: 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a  e left side is j
2330: 75 73 74 20 22 69 64 22 20 74 68 65 6e 20 70 49  ust "id" then pI
2340: 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20  d1 is the.** id 
2350: 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79 20  and pId2 is any 
2360: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f  empty string..*/
2370: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
2380: 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50  gma(.  Parse *pP
2390: 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a  arse, .  Token *
23a0: 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20  pId1,        /* 
23b0: 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b 64  First part of [d
23c0: 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c  atabase.]id fiel
23d0: 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  d */.  Token *pI
23e0: 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53 65  d2,        /* Se
23f0: 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 64 61  cond part of [da
2400: 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c 64  tabase.]id field
2410: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 54  , or NULL */.  T
2420: 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20 20 20  oken *pValue,   
2430: 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72 20     /* Token for 
2440: 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c  <value>, or NULL
2450: 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75 73 46   */.  int minusF
2460: 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54 72 75  lag       /* Tru
2470: 65 20 69 66 20 61 20 27 2d 27 20 73 69 67 6e 20  e if a '-' sign 
2480: 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75 65 3e  preceded <value>
2490: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a   */.){.  char *z
24a0: 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20 20  Left = 0;       
24b0: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
24c0: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
24d0: 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  id> */.  char *z
24e0: 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20 20  Right = 0;      
24f0: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
2500: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
2510: 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20  value>, or NULL 
2520: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
2530: 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54  *zDb = 0;   /* T
2540: 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
2550: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64   */.  Token *pId
2560: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
2570: 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20  Pointer to <id> 
2580: 74 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61 72 20  token */.  char 
2590: 2a 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20 20 20  *aFcntl[4];     
25a0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
25b0: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
25c0: 41 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20 69 44  AGMA */.  int iD
25d0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
25e0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e 64   /* Database ind
25f0: 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73 65  ex for <database
2600: 3e 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72 2c 20  > */.  int lwr, 
2610: 75 70 72 2c 20 6d 69 64 20 3d 20 30 3b 20 20 20  upr, mid = 0;   
2620: 20 20 20 20 2f 2a 20 42 69 6e 61 72 79 20 73 65      /* Binary se
2630: 61 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f 0a 20  arch bounds */. 
2640: 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2660: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66 6f   return value fo
2670: 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  rm SQLITE_FCNTL_
2680: 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c 69  PRAGMA */.  sqli
2690: 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65  te3 *db = pParse
26a0: 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65 20  ->db;    /* The 
26b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
26c0: 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62  ion */.  Db *pDb
26d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70 65        /* The spe
26f0: 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20 62  cific database b
2700: 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a 2f  eing pragmaed */
2710: 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c  .  Vdbe *v = sql
2720: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
2730: 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72 65  se);  /* Prepare
2740: 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  d statement */. 
2750: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50   const struct sP
2760: 72 61 67 6d 61 4e 61 6d 65 73 20 2a 70 50 72 61  ragmaNames *pPra
2770: 67 6d 61 3b 0a 0a 20 20 69 66 28 20 76 3d 3d 30  gma;..  if( v==0
2780: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 73 71 6c   ) return;.  sql
2790: 69 74 65 33 56 64 62 65 52 75 6e 4f 6e 6c 79 4f  ite3VdbeRunOnlyO
27a0: 6e 63 65 28 76 29 3b 0a 20 20 70 50 61 72 73 65  nce(v);.  pParse
27b0: 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 0a 20 20 2f  ->nMem = 2;..  /
27c0: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
27d0: 5b 64 61 74 61 62 61 73 65 2e 5d 20 70 61 72 74  [database.] part
27e0: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 73   of the pragma s
27f0: 74 61 74 65 6d 65 6e 74 2e 20 69 44 62 20 69 73  tatement. iDb is
2800: 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20   the.  ** index 
2810: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2820: 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 62  this pragma is b
2830: 65 69 6e 67 20 61 70 70 6c 69 65 64 20 74 6f 20  eing applied to 
2840: 69 6e 20 64 62 2e 61 44 62 5b 5d 2e 20 2a 2f 0a  in db.aDb[]. */.
2850: 20 20 69 44 62 20 3d 20 73 71 6c 69 74 65 33 54    iDb = sqlite3T
2860: 77 6f 50 61 72 74 4e 61 6d 65 28 70 50 61 72 73  woPartName(pPars
2870: 65 2c 20 70 49 64 31 2c 20 70 49 64 32 2c 20 26  e, pId1, pId2, &
2880: 70 49 64 29 3b 0a 20 20 69 66 28 20 69 44 62 3c  pId);.  if( iDb<
2890: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 70 44  0 ) return;.  pD
28a0: 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
28b0: 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  ];..  /* If the 
28c0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 20 68 61  temp database ha
28d0: 73 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74 6c  s been explicitl
28e0: 79 20 6e 61 6d 65 64 20 61 73 20 70 61 72 74 20  y named as part 
28f0: 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 70 72 61  of the .  ** pra
2900: 67 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65 20 69  gma, make sure i
2910: 74 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20 2a 2f  t is open. .  */
2920: 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20 26 26  .  if( iDb==1 &&
2930: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
2940: 44 61 74 61 62 61 73 65 28 70 50 61 72 73 65 29  Database(pParse)
2950: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a   ){.    return;.
2960: 20 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d 20 73    }..  zLeft = s
2970: 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
2980: 6b 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a 20 20  ken(db, pId);.  
2990: 69 66 28 20 21 7a 4c 65 66 74 20 29 20 72 65 74  if( !zLeft ) ret
29a0: 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69 6e 75 73  urn;.  if( minus
29b0: 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a 52 69 67  Flag ){.    zRig
29c0: 68 74 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ht = sqlite3MPri
29d0: 6e 74 66 28 64 62 2c 20 22 2d 25 54 22 2c 20 70  ntf(db, "-%T", p
29e0: 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65 7b  Value);.  }else{
29f0: 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71  .    zRight = sq
2a00: 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
2a10: 65 6e 28 64 62 2c 20 70 56 61 6c 75 65 29 3b 0a  en(db, pValue);.
2a20: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
2a30: 49 64 32 20 29 3b 0a 20 20 7a 44 62 20 3d 20 70  Id2 );.  zDb = p
2a40: 49 64 32 2d 3e 6e 3e 30 20 3f 20 70 44 62 2d 3e  Id2->n>0 ? pDb->
2a50: 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20 20 69 66 28  zName : 0;.  if(
2a60: 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
2a70: 6b 28 70 50 61 72 73 65 2c 20 53 51 4c 49 54 45  k(pParse, SQLITE
2a80: 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66 74 2c 20  _PRAGMA, zLeft, 
2a90: 7a 52 69 67 68 74 2c 20 7a 44 62 29 20 29 7b 0a  zRight, zDb) ){.
2aa0: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
2ab0: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53  out;.  }..  /* S
2ac0: 65 6e 64 20 61 6e 20 53 51 4c 49 54 45 5f 46 43  end an SQLITE_FC
2ad0: 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 2d  NTL_PRAGMA file-
2ae0: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
2af0: 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 0a 20 20  nderlying VFS.  
2b00: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  ** connection.  
2b10: 49 66 20 69 74 20 72 65 74 75 72 6e 73 20 53 51  If it returns SQ
2b20: 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e 20 61 73  LITE_OK, then as
2b30: 73 75 6d 65 20 74 68 61 74 20 74 68 65 20 56 46  sume that the VF
2b40: 53 0a 20 20 2a 2a 20 68 61 6e 64 6c 65 64 20 74  S.  ** handled t
2b50: 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 67 65  he pragma and ge
2b60: 6e 65 72 61 74 65 20 61 20 6e 6f 2d 6f 70 20 70  nerate a no-op p
2b70: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
2b80: 74 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50  t..  **.  ** IMP
2b90: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
2ba0: 52 2d 31 32 32 33 38 2d 35 35 31 32 30 20 57 68  R-12238-55120 Wh
2bb0: 65 6e 65 76 65 72 20 61 20 50 52 41 47 4d 41 20  enever a PRAGMA 
2bc0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 61 72  statement is par
2bd0: 73 65 64 2c 0a 20 20 2a 2a 20 61 6e 20 53 51 4c  sed,.  ** an SQL
2be0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
2bf0: 20 66 69 6c 65 20 63 6f 6e 74 72 6f 6c 20 69 73   file control is
2c00: 20 73 65 6e 74 20 74 6f 20 74 68 65 20 6f 70 65   sent to the ope
2c10: 6e 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 0a 20  n sqlite3_file. 
2c20: 20 2a 2a 20 6f 62 6a 65 63 74 20 63 6f 72 72 65   ** object corre
2c30: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20  sponding to the 
2c40: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
2c50: 20 77 68 69 63 68 20 74 68 65 20 70 72 61 67 6d   which the pragm
2c60: 61 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74  a.  ** statement
2c70: 20 72 65 66 65 72 73 2e 0a 20 20 2a 2a 0a 20 20   refers..  **.  
2c80: 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
2c90: 4e 2d 4f 46 3a 20 52 2d 32 39 38 37 35 2d 33 31  N-OF: R-29875-31
2ca0: 36 37 38 20 54 68 65 20 61 72 67 75 6d 65 6e 74  678 The argument
2cb0: 20 74 6f 20 74 68 65 20 53 51 4c 49 54 45 5f 46   to the SQLITE_F
2cc0: 43 4e 54 4c 5f 50 52 41 47 4d 41 0a 20 20 2a 2a  CNTL_PRAGMA.  **
2cd0: 20 66 69 6c 65 20 63 6f 6e 74 72 6f 6c 20 69 73   file control is
2ce0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 70 6f 69   an array of poi
2cf0: 6e 74 65 72 73 20 74 6f 20 73 74 72 69 6e 67 73  nters to strings
2d00: 20 28 63 68 61 72 2a 2a 29 20 69 6e 20 77 68 69   (char**) in whi
2d10: 63 68 20 74 68 65 0a 20 20 2a 2a 20 73 65 63 6f  ch the.  ** seco
2d20: 6e 64 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  nd element of th
2d30: 65 20 61 72 72 61 79 20 69 73 20 74 68 65 20 6e  e array is the n
2d40: 61 6d 65 20 6f 66 20 74 68 65 20 70 72 61 67 6d  ame of the pragm
2d50: 61 20 61 6e 64 20 74 68 65 20 74 68 69 72 64 0a  a and the third.
2d60: 20 20 2a 2a 20 65 6c 65 6d 65 6e 74 20 69 73 20    ** element is 
2d70: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
2d80: 74 68 65 20 70 72 61 67 6d 61 20 6f 72 20 4e 55  the pragma or NU
2d90: 4c 4c 20 69 66 20 74 68 65 20 70 72 61 67 6d 61  LL if the pragma
2da0: 20 68 61 73 20 6e 6f 0a 20 20 2a 2a 20 61 72 67   has no.  ** arg
2db0: 75 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46  ument..  */.  aF
2dc0: 63 6e 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  cntl[0] = 0;.  a
2dd0: 46 63 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74  Fcntl[1] = zLeft
2de0: 3b 0a 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20  ;.  aFcntl[2] = 
2df0: 7a 52 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c  zRight;.  aFcntl
2e00: 5b 33 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  [3] = 0;.  db->b
2e10: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
2e20: 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
2e30: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
2e40: 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54  l(db, zDb, SQLIT
2e50: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20  E_FCNTL_PRAGMA, 
2e60: 28 76 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a  (void*)aFcntl);.
2e70: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2e80: 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72  _OK ){.    retur
2e90: 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22  nSingleText(v, "
2ea0: 72 65 73 75 6c 74 22 2c 20 61 46 63 6e 74 6c 5b  result", aFcntl[
2eb0: 30 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0]);.    sqlite3
2ec0: 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29  _free(aFcntl[0])
2ed0: 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d  ;.    goto pragm
2ee0: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28  a_out;.  }.  if(
2ef0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46   rc!=SQLITE_NOTF
2f00: 4f 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20  OUND ){.    if( 
2f10: 61 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20  aFcntl[0] ){.   
2f20: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
2f30: 73 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c  sg(pParse, "%s",
2f40: 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20   aFcntl[0]);.   
2f50: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2f60: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
2f70: 7d 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45  }.    pParse->nE
2f80: 72 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65  rr++;.    pParse
2f90: 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67  ->rc = rc;.    g
2fa0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
2fb0: 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65    }..  /* Locate
2fc0: 20 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74   the pragma in t
2fd0: 68 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20  he lookup table 
2fe0: 2a 2f 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20  */.  lwr = 0;.  
2ff0: 75 70 72 20 3d 20 41 72 72 61 79 53 69 7a 65 28  upr = ArraySize(
3000: 61 50 72 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b  aPragmaNames)-1;
3010: 0a 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75  .  while( lwr<=u
3020: 70 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20  pr ){.    mid = 
3030: 28 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20  (lwr+upr)/2;.   
3040: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74   rc = sqlite3_st
3050: 72 69 63 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72  ricmp(zLeft, aPr
3060: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a  agmaNames[mid].z
3070: 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 72  Name);.    if( r
3080: 63 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  c==0 ) break;.  
3090: 20 20 69 66 28 20 72 63 3c 30 20 29 7b 0a 20 20    if( rc<0 ){.  
30a0: 20 20 20 20 75 70 72 20 3d 20 6d 69 64 20 2d 20      upr = mid - 
30b0: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
30c0: 20 20 20 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20      lwr = mid + 
30d0: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  1;.    }.  }.  i
30e0: 66 28 20 6c 77 72 3e 75 70 72 20 29 20 67 6f 74  f( lwr>upr ) got
30f0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
3100: 70 50 72 61 67 6d 61 20 3d 20 26 61 50 72 61 67  pPragma = &aPrag
3110: 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 3b 0a 0a 20  maNames[mid];.. 
3120: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
3130: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
3140: 61 20 69 73 20 6c 6f 61 64 65 64 20 69 66 20 74  a is loaded if t
3150: 68 65 20 70 72 61 67 6d 61 20 72 65 71 75 69 72  he pragma requir
3160: 65 73 20 74 68 61 74 20 2a 2f 0a 20 20 69 66 28  es that */.  if(
3170: 20 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67   (pPragma->mPrag
3180: 46 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f  Flag & PragFlag_
3190: 4e 65 65 64 53 63 68 65 6d 61 29 21 3d 30 20 29  NeedSchema)!=0 )
31a0: 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
31b0: 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72  3ReadSchema(pPar
31c0: 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  se) ) goto pragm
31d0: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
31e0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 61 70 70   Jump to the app
31f0: 72 6f 70 72 69 61 74 65 20 70 72 61 67 6d 61 20  ropriate pragma 
3200: 68 61 6e 64 6c 65 72 20 2a 2f 0a 20 20 73 77 69  handler */.  swi
3210: 74 63 68 28 20 70 50 72 61 67 6d 61 2d 3e 65 50  tch( pPragma->eP
3220: 72 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69 66  ragTyp ){.  .#if
3230: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3240: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
3250: 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65 64  MAS) && !defined
3260: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50  (SQLITE_OMIT_DEP
3270: 52 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20  RECATED).  /*.  
3280: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
3290: 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61  base.]default_ca
32a0: 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50  che_size.  **  P
32b0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
32c0: 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  ]default_cache_s
32d0: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
32e0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
32f0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
3300: 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65  nt persistent se
3310: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
3320: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
3330: 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72  ze.  The value r
3340: 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d  eturned is the m
3350: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
3360: 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74  .  ** pages in t
3370: 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20  he page cache.  
3380: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
3390: 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75  sets both the cu
33a0: 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20  rrent.  ** page 
33b0: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
33c0: 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74   and the persist
33d0: 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73  ent page cache s
33e0: 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73  ize value.  ** s
33f0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
3400: 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a  abase file..  **
3410: 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73  .  ** Older vers
3420: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77  ions of SQLite w
3430: 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65 66  ould set the def
3440: 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20  ault cache size 
3450: 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69  to a.  ** negati
3460: 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64  ve number to ind
3470: 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75  icate synchronou
3480: 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61  s=OFF.  These da
3490: 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a  ys, synchronous.
34a0: 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f    ** is always o
34b0: 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65 67  n by default reg
34c0: 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73  ardless of the s
34d0: 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75  ign of the defau
34e0: 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69  lt cache.  ** si
34f0: 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75  ze.  But continu
3500: 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62  e to take the ab
3510: 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
3520: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
3530: 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68  e.  ** size of h
3540: 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74  istorical compat
3550: 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20  ibility..  */.  
3560: 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45 46  case PragTyp_DEF
3570: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a  AULT_CACHE_SIZE:
3580: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
3590: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
35a0: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
35b0: 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20  (2);.    static 
35c0: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
35d0: 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20   getCacheSize[] 
35e0: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54  = {.      { OP_T
35f0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30  ransaction, 0, 0
3600: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
3610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3620: 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20       /* 0 */.   
3630: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
3640: 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20  ie,  0, 1,      
3650: 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f    BTREE_DEFAULT_
3660: 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a  CACHE_SIZE},  /*
3670: 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   1 */.      { OP
3680: 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c  _IfPos,       1,
3690: 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   8,        0},. 
36a0: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
36b0: 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20  r,     0, 2,    
36c0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
36d0: 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20  OP_Subtract,    
36e0: 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c  1, 2,        1},
36f0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f  .      { OP_IfPo
3700: 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20  s,       1, 8,  
3710: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
3720: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
3730: 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30    0, 1,        0
3740: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  },              
3750: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20             /* 6 
3760: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f  */.      { OP_No
3770: 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c  op,        0, 0,
3780: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
3790: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
37a0: 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20  ,   1, 1,       
37b0: 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20   0},.    };.    
37c0: 69 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73 71  int addr;.    sq
37d0: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
37e0: 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20  ee(v, iDb);.    
37f0: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
3800: 20 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d       setOneColum
3810: 6e 4e 61 6d 65 28 76 2c 20 22 63 61 63 68 65 5f  nName(v, "cache_
3820: 73 69 7a 65 22 29 3b 0a 20 20 20 20 20 20 70 50  size");.      pP
3830: 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b  arse->nMem += 2;
3840: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
3850: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
3860: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
3870: 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67  getCacheSize), g
3880: 65 74 43 61 63 68 65 53 69 7a 65 2c 69 4c 6e 29  etCacheSize,iLn)
3890: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
38a0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
38b0: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
38c0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
38d0: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
38e0: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
38f0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
3900: 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49 54  v, addr+6, SQLIT
3910: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
3920: 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65  SIZE);.    }else
3930: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
3940: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
3950: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
3960: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
3970: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
3980: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
3990: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
39a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
39b0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
39c0: 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20  , size, 1);.    
39d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
39e0: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
39f0: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
3a00: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
3a10: 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73  ZE, 1);.      as
3a20: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
3a30: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
3a40: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
3a50: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
3a60: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
3a70: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
3a80: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
3a90: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
3aa0: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
3ab0: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  size);.    }.   
3ac0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
3ad0: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
3ae0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3af0: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
3b00: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
3b10: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3b20: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
3b30: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
3b40: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
3b50: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
3b60: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
3b70: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
3b80: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
3b90: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
3ba0: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
3bb0: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
3bc0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
3bd0: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
3be0: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3bf0: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
3c00: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
3c10: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
3c20: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
3c30: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
3c40: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
3c50: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
3c60: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
3c70: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
3c80: 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  ZE: {.    Btree 
3c90: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
3ca0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
3cb0: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
3cc0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
3cd0: 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59  int size = ALWAY
3ce0: 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33  S(pBt) ? sqlite3
3cf0: 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65  BtreeGetPageSize
3d00: 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20  (pBt) : 0;.     
3d10: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
3d20: 28 76 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c  (v, "page_size",
3d30: 20 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73   size);.    }els
3d40: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c  e{.      /* Mall
3d50: 6f 63 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e  oc may fail when
3d60: 20 73 65 74 74 69 6e 67 20 74 68 65 20 70 61 67   setting the pag
3d70: 65 2d 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65  e-size, as there
3d80: 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a   is an internal.
3d90: 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20        ** buffer 
3da0: 74 68 61 74 20 74 68 65 20 70 61 67 65 72 20 6d  that the pager m
3db0: 6f 64 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73  odule resizes us
3dc0: 69 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c  ing sqlite3_real
3dd0: 6c 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  loc()..      */.
3de0: 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61        db->nextPa
3df0: 67 65 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  gesize = sqlite3
3e00: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
3e10: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e      if( SQLITE_N
3e20: 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72  OMEM==sqlite3Btr
3e30: 65 65 53 65 74 50 61 67 65 53 69 7a 65 28 70 42  eeSetPageSize(pB
3e40: 74 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73  t, db->nextPages
3e50: 69 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20  ize,-1,0) ){.   
3e60: 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46       db->mallocF
3e70: 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
3e80: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
3e90: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
3ea0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
3eb0: 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c  base.]secure_del
3ec0: 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ete.  **  PRAGMA
3ed0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75   [database.]secu
3ee0: 72 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46  re_delete=ON/OFF
3ef0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
3f00: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
3f10: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  s the current se
3f20: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
3f30: 2a 2a 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65  ** secure_delete
3f40: 20 66 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f   flag.  The seco
3f50: 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20  nd form changes 
3f60: 74 68 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74  the secure_delet
3f70: 65 0a 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74  e.  ** flag sett
3f80: 69 6e 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20  ing and reports 
3f90: 74 68 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20  thenew value..  
3fa0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
3fb0: 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a  p_SECURE_DELETE:
3fc0: 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42   {.    Btree *pB
3fd0: 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  t = pDb->pBt;.  
3fe0: 20 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20    int b = -1;.  
3ff0: 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30    assert( pBt!=0
4000: 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   );.    if( zRig
4010: 68 74 20 29 7b 0a 20 20 20 20 20 20 62 20 3d 20  ht ){.      b = 
4020: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
4030: 6e 28 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20  n(zRight, 0);.  
4040: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49 64 32    }.    if( pId2
4050: 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29  ->n==0 && b>=0 )
4060: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
4070: 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
4080: 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
4090: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
40a0: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
40b0: 65 74 65 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ete(db->aDb[ii].
40c0: 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d  pBt, b);.      }
40d0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 20 3d 20 73  .    }.    b = s
40e0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75 72  qlite3BtreeSecur
40f0: 65 44 65 6c 65 74 65 28 70 42 74 2c 20 62 29 3b  eDelete(pBt, b);
4100: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
4110: 65 49 6e 74 28 76 2c 20 22 73 65 63 75 72 65 5f  eInt(v, "secure_
4120: 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20 20  delete", b);.   
4130: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
4140: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
4150: 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61  database.]max_pa
4160: 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50  ge_count.  **  P
4170: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
4180: 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d  ]max_page_count=
4190: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
41a0: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
41b0: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
41c0: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
41d0: 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62   ** maximum numb
41e0: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
41f0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4200: 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65 63  .  The .  ** sec
4210: 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70 74  ond form attempt
4220: 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69 73  s to change this
4230: 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68 0a   setting.  Both.
4240: 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75 72    ** forms retur
4250: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  n the current se
4260: 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tting..  **.  **
4270: 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   The absolute va
4280: 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65 64  lue of N is used
4290: 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63  .  This is undoc
42a0: 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67 68  umented and migh
42b0: 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20 20  t.  ** change.  
42c0: 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  The only purpose
42d0: 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
42e0: 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74 65  n easy way to te
42f0: 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69  st.  ** the sqli
4300: 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66 75  te3AbsInt32() fu
4310: 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  nction..  **.  *
4320: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
4330: 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75 6e 74 0a  ase.]page_count.
4340: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
4350: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
4360: 61 67 65 73 20 69 6e 20 74 68 65 20 73 70 65 63  ages in the spec
4370: 69 66 69 65 64 20 64 61 74 61 62 61 73 65 2e 0a  ified database..
4380: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
4390: 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e 54 3a 20  Typ_PAGE_COUNT: 
43a0: 7b 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 0a  {.    int iReg;.
43b0: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
43c0: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
43d0: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 52  se, iDb);.    iR
43e0: 65 67 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  eg = ++pParse->n
43f0: 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  Mem;.    if( sql
4400: 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66  ite3Tolower(zLef
4410: 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b 0a 20 20  t[0])=='p' ){.  
4420: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
4430: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50 61 67 65  ddOp2(v, OP_Page
4440: 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69 52 65 67  count, iDb, iReg
4450: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
4460: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
4470: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 78 50  ddOp3(v, OP_MaxP
4480: 67 63 6e 74 2c 20 69 44 62 2c 20 69 52 65 67 2c  gcnt, iDb, iReg,
4490: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
44a0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
44b0: 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65  3AbsInt32(sqlite
44c0: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 29 3b  3Atoi(zRight)));
44d0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
44e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
44f0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 69 52  OP_ResultRow, iR
4500: 65 67 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  eg, 1);.    sqli
4510: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
4520: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  s(v, 1);.    sql
4530: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
4540: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
4550: 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51  _NAME, zLeft, SQ
4560: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
4570: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
4580: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
4590: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f  MA [database.]lo
45a0: 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a 20  cking_mode.  ** 
45b0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
45c0: 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20  e.]locking_mode 
45d0: 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73  = (normal|exclus
45e0: 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ive).  */.  case
45f0: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
4600: 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e  _MODE: {.    con
4610: 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d 20  st char *zRet = 
4620: 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e  "normal";.    in
4630: 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63  t eMode = getLoc
4640: 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74 29  kingMode(zRight)
4650: 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d  ;..    if( pId2-
4660: 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d  >n==0 && eMode==
4670: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
4680: 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20 20  E_QUERY ){.     
4690: 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41 47   /* Simple "PRAG
46a0: 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b  MA locking_mode;
46b0: 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69  " statement. Thi
46c0: 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f 72  s is a query for
46d0: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 75  .      ** the cu
46e0: 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f  rrent default lo
46f0: 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69 63  cking mode (whic
4700: 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  h may be differe
4710: 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74  nt to.      ** t
4720: 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  he locking-mode 
4730: 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  of the main data
4740: 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  base)..      */.
4750: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64 62        eMode = db
4760: 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a  ->dfltLockMode;.
4770: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4780: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a   Pager *pPager;.
4790: 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e        if( pId2->
47a0: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  n==0 ){.        
47b0: 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74 65  /* This indicate
47c0: 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62 61  s that no databa
47d0: 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65 63  se name was spec
47e0: 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20  ified as part.  
47f0: 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
4800: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20  PRAGMA command. 
4810: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
4820: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75   locking-mode mu
4830: 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a  st be.        **
4840: 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61   set on all atta
4850: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20  ched databases, 
4860: 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6d  as well as the m
4870: 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20 20  ain db file..   
4880: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20 20       **.        
4890: 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c  ** Also, the sql
48a0: 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64  ite3.dfltLockMod
48b0: 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  e variable is se
48c0: 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20 20  t so that.      
48d0: 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71 75    ** any subsequ
48e0: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20 64  ently attached d
48f0: 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75 73  atabases also us
4900: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a  e the specified.
4910: 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69          ** locki
4920: 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20  ng mode..       
4930: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20   */.        int 
4940: 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ii;.        asse
4950: 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62  rt(pDb==&db->aDb
4960: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  [0]);.        fo
4970: 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=2; ii<db->n
4980: 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
4990: 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71       pPager = sq
49a0: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
49b0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29  db->aDb[ii].pBt)
49c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
49d0: 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d  te3PagerLockingM
49e0: 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64  ode(pPager, eMod
49f0: 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  e);.        }.  
4a00: 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f        db->dfltLo
4a10: 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f  ckMode = (u8)eMo
4a20: 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  de;.      }.    
4a30: 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
4a40: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
4a50: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65 4d  ->pBt);.      eM
4a60: 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ode = sqlite3Pag
4a70: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
4a80: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
4a90: 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28    }..    assert(
4aa0: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4ab0: 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c  CKINGMODE_NORMAL
4ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
4ad0: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4ae0: 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49  KINGMODE_EXCLUSI
4af0: 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65 4d  VE );.    if( eM
4b00: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
4b10: 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45  NGMODE_EXCLUSIVE
4b20: 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20 3d   ){.      zRet =
4b30: 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20 20   "exclusive";.  
4b40: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
4b50: 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f 63  ngleText(v, "loc
4b60: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52 65 74  king_mode", zRet
4b70: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
4b80: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
4b90: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
4ba0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
4bb0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
4bc0: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ase.]journal_mod
4bd0: 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  e =.  **        
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
4bf0: 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66  elete|persist|of
4c00: 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72  f|truncate|memor
4c10: 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a  y|wal|off).  */.
4c20: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
4c30: 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20  OURNAL_MODE: {. 
4c40: 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20     int eMode;   
4c50: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
4c60: 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  he PAGER_JOURNAL
4c70: 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73  MODE_XXX symbols
4c80: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20   */.    int ii; 
4c90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
4ca0: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20  p counter */..  
4cb0: 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61    setOneColumnNa
4cc0: 6d 65 28 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d  me(v, "journal_m
4cd0: 6f 64 65 22 29 3b 0a 20 20 20 20 69 66 28 20 7a  ode");.    if( z
4ce0: 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Right==0 ){.    
4cf0: 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
4d00: 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74   no "=MODE" part
4d10: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20   of the pragma, 
4d20: 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72 20 74  do a query for t
4d30: 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  he.      ** curr
4d40: 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20  ent mode */.    
4d50: 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f    eMode = PAGER_
4d60: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
4d70: 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
4d80: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
4d90: 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74  zMode;.      int
4da0: 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c   n = sqlite3Strl
4db0: 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20  en30(zRight);.  
4dc0: 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b      for(eMode=0;
4dd0: 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65   (zMode = sqlite
4de0: 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
4df0: 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f  (eMode))!=0; eMo
4e00: 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  de++){.        i
4e10: 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
4e20: 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65  mp(zRight, zMode
4e30: 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  , n)==0 ) break;
4e40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
4e50: 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20  f( !zMode ){.   
4e60: 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22       /* If the "
4e70: 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73  =MODE" part does
4e80: 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b   not match any k
4e90: 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  nown journal mod
4ea0: 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  e,.        ** th
4eb0: 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f  en do a query */
4ec0: 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
4ed0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
4ee0: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20  DE_QUERY;.      
4ef0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4f00: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55  eMode==PAGER_JOU
4f10: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26  RNALMODE_QUERY &
4f20: 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a  & pId2->n==0 ){.
4f30: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
4f40: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
4f50: 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41  _mode" into "PRA
4f60: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
4f70: 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20  _mode" */.      
4f80: 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  iDb = 0;.      p
4f90: 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20  Id2->n = 1;.    
4fa0: 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d  }.    for(ii=db-
4fb0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
4fc0: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i--){.      if( 
4fd0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20  db->aDb[ii].pBt 
4fe0: 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70  && (ii==iDb || p
4ff0: 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20  Id2->n==0) ){.  
5000: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5010: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 69  eUsesBtree(v, ii
5020: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5030: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
5040: 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20  OP_JournalMode, 
5050: 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20  ii, 1, eMode);. 
5060: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
5070: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5080: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
5090: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62  ow, 1, 1);.    b
50a0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
50b0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
50c0: 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f  tabase.]journal_
50d0: 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20  size_limit.  ** 
50e0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
50f0: 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f  e.]journal_size_
5100: 6c 69 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  limit=N.  **.  *
5110: 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74 68 65  * Get or set the
5120: 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72   size limit on r
5130: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
5140: 66 69 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61  files..  */.  ca
5150: 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  se PragTyp_JOURN
5160: 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b  AL_SIZE_LIMIT: {
5170: 0a 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67  .    Pager *pPag
5180: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
5190: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
51a0: 3b 0a 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74  ;.    i64 iLimit
51b0: 20 3d 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a   = -2;.    if( z
51c0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
51d0: 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
51e0: 49 36 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  I64(zRight, &iLi
51f0: 6d 69 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  mit);.      if( 
5200: 69 4c 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d  iLimit<-1 ) iLim
5210: 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20  it = -1;.    }. 
5220: 20 20 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69     iLimit = sqli
5230: 74 65 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53  te3PagerJournalS
5240: 69 7a 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c  izeLimit(pPager,
5250: 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65   iLimit);.    re
5260: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
5270: 20 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c   "journal_size_l
5280: 69 6d 69 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a  imit", iLimit);.
5290: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
52a0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
52b0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
52c0: 4d 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a  MAS */..  /*.  *
52d0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
52e0: 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d  ase.]auto_vacuum
52f0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
5300: 61 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61  atabase.]auto_va
5310: 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  cuum=N.  **.  **
5320: 20 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20   Get or set the 
5330: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
5340: 61 62 61 73 65 20 27 61 75 74 6f 2d 76 61 63 75  abase 'auto-vacu
5350: 75 6d 27 20 70 61 72 61 6d 65 74 65 72 2e 0a 20  um' parameter.. 
5360: 20 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73   ** The value is
5370: 20 6f 6e 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45   one of:  0 NONE
5380: 20 31 20 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d   1 FULL 2 INCREM
5390: 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64  ENTAL.  */.#ifnd
53a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
53b0: 55 54 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65  UTOVACUUM.  case
53c0: 20 50 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41   PragTyp_AUTO_VA
53d0: 43 55 55 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65  CUUM: {.    Btre
53e0: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
53f0: 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  t;.    assert( p
5400: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
5410: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
5420: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
5430: 74 28 76 2c 20 22 61 75 74 6f 5f 76 61 63 75 75  t(v, "auto_vacuu
5440: 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72 65 65  m", sqlite3Btree
5450: 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42  GetAutoVacuum(pB
5460: 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  t));.    }else{.
5470: 20 20 20 20 20 20 69 6e 74 20 65 41 75 74 6f 20        int eAuto 
5480: 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28  = getAutoVacuum(
5490: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 61  zRight);.      a
54a0: 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d 30 20  ssert( eAuto>=0 
54b0: 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a 20  && eAuto<=2 );. 
54c0: 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41 75 74       db->nextAut
54d0: 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75 74 6f  ovac = (u8)eAuto
54e0: 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20  ;.      /* Call 
54f0: 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 29 20  SetAutoVacuum() 
5500: 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c 69 7a  to set initializ
5510: 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 61  e the internal a
5520: 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  uto and.      **
5530: 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c 61   incr-vacuum fla
5540: 67 73 2e 20 54 68 69 73 20 69 73 20 72 65 71 75  gs. This is requ
5550: 69 72 65 64 20 69 6e 20 63 61 73 65 20 74 68 69  ired in case thi
5560: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20  s connection.   
5570: 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20 74 68     ** creates th
5580: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
5590: 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
55a0: 20 74 68 61 74 20 69 74 20 69 73 20 63 72 65 61   that it is crea
55b0: 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ted.      ** as 
55c0: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63  an auto-vacuum c
55d0: 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20 20 20  apable db..     
55e0: 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d 20 73   */.      rc = s
55f0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 41 75  qlite3BtreeSetAu
5600: 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20 65 41  toVacuum(pBt, eA
5610: 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uto);.      if( 
5620: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
5630: 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20 65 41   (eAuto==1 || eA
5640: 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20 20 20  uto==2) ){.     
5650: 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74 74 69     /* When setti
5660: 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61 63 75  ng the auto_vacu
5670: 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74 68 65  um mode to eithe
5680: 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20 20 20  r "full" or .   
5690: 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d 65       ** "increme
56a0: 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74 68 65  ntal", write the
56b0: 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b 36   value of meta[6
56c0: 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  ] in the databas
56d0: 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c  e.        ** fil
56e0: 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74 69 6e  e. Before writin
56f0: 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63 68  g to meta[6], ch
5700: 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b 33 5d  eck that meta[3]
5710: 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 20 20   indicates.     
5720: 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69 73 20     ** that this 
5730: 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61 75 74  really is an aut
5740: 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65  o-vacuum capable
5750: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
5760: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 74     */.        st
5770: 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69  atic const int i
5780: 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54  Ln = VDBE_OFFSET
5790: 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20  _LINENO(2);.    
57a0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
57b0: 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74 4d   VdbeOpList setM
57c0: 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  eta6[] = {.     
57d0: 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61       { OP_Transa
57e0: 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 20 20  ction,    0,    
57f0: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
5800: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
5810: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 0 */.         
5820: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
5830: 2c 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20  ,     0,        
5840: 20 31 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   1,         BTRE
5850: 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f 54 5f 50  E_LARGEST_ROOT_P
5860: 41 47 45 7d 2c 0a 20 20 20 20 20 20 20 20 20 20  AGE},.          
5870: 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20  { OP_If,        
5880: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
5890: 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0,              
58a0: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a     0},    /* 2 *
58b0: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
58c0: 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20 20 20  _Halt,          
58d0: 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f 45 5f 41   SQLITE_OK, OE_A
58e0: 62 6f 72 74 2c 20 20 20 20 20 20 20 20 20 20 30  bort,          0
58f0: 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20  },    /* 3 */.  
5900: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74          { OP_Int
5910: 65 67 65 72 2c 20 20 20 20 20 20 20 20 30 2c 20  eger,        0, 
5920: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
5930: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5940: 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20    /* 4 */.      
5950: 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b      { OP_SetCook
5960: 69 65 2c 20 20 20 20 20 20 30 2c 20 20 20 20 20  ie,      0,     
5970: 20 20 20 20 42 54 52 45 45 5f 49 4e 43 52 5f 56      BTREE_INCR_V
5980: 41 43 55 55 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a  ACUUM, 1},    /*
5990: 20 35 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 3b   5 */.        };
59a0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 41 64  .        int iAd
59b0: 64 72 3b 0a 20 20 20 20 20 20 20 20 69 41 64 64  dr;.        iAdd
59c0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
59d0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
59e0: 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29 2c  ySize(setMeta6),
59f0: 20 73 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b   setMeta6, iLn);
5a00: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5a10: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5a20: 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20  iAddr, iDb);.   
5a30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5a40: 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64  ChangeP1(v, iAdd
5a50: 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+1, iDb);.     
5a60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
5a70: 61 6e 67 65 50 32 28 76 2c 20 69 41 64 64 72 2b  angeP2(v, iAddr+
5a80: 32 2c 20 69 41 64 64 72 2b 34 29 3b 0a 20 20 20  2, iAddr+4);.   
5a90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5aa0: 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64  ChangeP1(v, iAdd
5ab0: 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29 3b 0a 20  r+4, eAuto-1);. 
5ac0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5ad0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
5ae0: 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+5, iDb);.   
5af0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5b00: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
5b10: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5b20: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
5b30: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a  #endif..  /*.  *
5b40: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
5b50: 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74 61 6c  ase.]incremental
5b60: 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a  _vacuum(N).  **.
5b70: 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70 73 20    ** Do N steps 
5b80: 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  of incremental v
5b90: 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20 64 61  acuuming on a da
5ba0: 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23 69 66  tabase..  */.#if
5bb0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
5bc0: 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63 61  _AUTOVACUUM.  ca
5bd0: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 43 52 45  se PragTyp_INCRE
5be0: 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 3a 20 7b  MENTAL_VACUUM: {
5bf0: 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  .    int iLimit,
5c00: 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20 7a   addr;.    if( z
5c10: 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73 71 6c  Right==0 || !sql
5c20: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
5c30: 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20 7c 7c  ght, &iLimit) ||
5c40: 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a 20 20   iLimit<=0 ){.  
5c50: 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30 78 37      iLimit = 0x7
5c60: 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a 20  fffffff;.    }. 
5c70: 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57     sqlite3BeginW
5c80: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
5c90: 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20  arse, 0, iDb);. 
5ca0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
5cb0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
5cc0: 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29 3b 0a  er, iLimit, 1);.
5cd0: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
5ce0: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
5cf0: 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20 69  OP_IncrVacuum, i
5d00: 44 62 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  Db); VdbeCoverag
5d10: 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  e(v);.    sqlite
5d20: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
5d30: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 29 3b  P_ResultRow, 1);
5d40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5d50: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
5d60: 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20  Imm, 1, -1);.   
5d70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5d80: 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p2(v, OP_IfPos, 
5d90: 31 2c 20 61 64 64 72 29 3b 20 56 64 62 65 43 6f  1, addr); VdbeCo
5da0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73  verage(v);.    s
5db0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
5dc0: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20  re(v, addr);.   
5dd0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
5de0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
5df0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
5e00: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
5e10: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
5e20: 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a 20 20  e.]cache_size.  
5e30: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
5e40: 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65  base.]cache_size
5e50: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
5e60: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
5e70: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
5e80: 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20 66 6f  local setting fo
5e90: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
5ea0: 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68 65 20  cache size. The 
5eb0: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73  second form sets
5ec0: 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a 20   the local.  ** 
5ed0: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20  page cache size 
5ee0: 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69 73 20  value.  If N is 
5ef0: 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20 74 68  positive then th
5f00: 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 6e  at is the.  ** n
5f10: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
5f20: 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20 49 66  n the cache.  If
5f30: 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20   N is negative, 
5f40: 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 6e 75  then the.  ** nu
5f50: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 73  mber of pages is
5f60: 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74 68 61   adjusted so tha
5f70: 74 20 74 68 65 20 63 61 63 68 65 20 75 73 65 73  t the cache uses
5f80: 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a 20 20   -N kibibytes.  
5f90: 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20 20  ** of memory..  
5fa0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
5fb0: 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b 0a  p_CACHE_SIZE: {.
5fc0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5fd0: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
5fe0: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
5ff0: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
6000: 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  t ){.      if( s
6010: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
6020: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
6030: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
6040: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
6050: 74 28 76 2c 20 22 63 61 63 68 65 5f 73 69 7a 65  t(v, "cache_size
6060: 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  ", pDb->pSchema-
6070: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
6080: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
6090: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
60a0: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
60b0: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
60c0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
60d0: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
60e0: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
60f0: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
6100: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
6110: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 20 20  he_size);.      
6120: 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53  if( sqlite3ReadS
6130: 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20  chema(pParse) ) 
6140: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
6150: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
6160: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
6170: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
6180: 73 65 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29  se.]mmap_size(N)
6190: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20  .  **.  ** Used 
61a0: 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73  to set mapping s
61b0: 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d  ize limit. The m
61c0: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
61d0: 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74  t is.  ** used t
61e0: 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72  o limit the aggr
61f0: 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c  egate size of al
6200: 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20  l memory mapped 
6210: 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20  regions of the. 
6220: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c   ** database fil
6230: 65 2e 20 49 66 20 74 68 69 73 20 70 61 72 61 6d  e. If this param
6240: 65 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a  eter is set to z
6250: 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79  ero, then memory
6260: 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73   mapping.  ** is
6270: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
6280: 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74  .  If N is negat
6290: 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65  ive, then the de
62a0: 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70  fault memory map
62b0: 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65  .  ** limit dete
62c0: 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65  rmined by sqlite
62d0: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
62e0: 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45  CONFIG_MMAP_SIZE
62f0: 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54  ) is set..  ** T
6300: 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e 20 69  he parameter N i
6310: 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79  s measured in by
6320: 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  tes..  **.  ** T
6330: 68 69 73 20 76 61 6c 75 65 20 69 73 20 61 64 76  his value is adv
6340: 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e 64 65  isory.  The unde
6350: 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20 66 72  rlying VFS is fr
6360: 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70  ee to memory map
6370: 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20  .  ** as little 
6380: 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20 69 74  or as much as it
6390: 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70 74 2c   wants.  Except,
63a0: 20 69 66 20 4e 20 69 73 20 73 65 74 20 74 6f 20   if N is set to 
63b0: 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  0 then the.  ** 
63c0: 75 70 70 65 72 20 6c 61 79 65 72 73 20 77 69 6c  upper layers wil
63d0: 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 74  l never invoke t
63e0: 68 65 20 78 46 65 74 63 68 20 69 6e 74 65 72 66  he xFetch interf
63f0: 61 63 65 73 20 74 6f 20 74 68 65 20 56 46 53 2e  aces to the VFS.
6400: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
6410: 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20  gTyp_MMAP_SIZE: 
6420: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  {.    sqlite3_in
6430: 74 36 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49  t64 sz;.#if SQLI
6440: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6450: 3e 30 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  >0.    assert( s
6460: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
6470: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
6480: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  ) );.    if( zRi
6490: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ght ){.      int
64a0: 20 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   ii;.      sqlit
64b0: 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
64c0: 7a 52 69 67 68 74 2c 20 26 73 7a 29 3b 0a 20 20  zRight, &sz);.  
64d0: 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73      if( sz<0 ) s
64e0: 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  z = sqlite3Globa
64f0: 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a  lConfig.szMmap;.
6500: 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e        if( pId2->
6510: 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61  n==0 ) db->szMma
6520: 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f  p = sz;.      fo
6530: 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20  r(ii=db->nDb-1; 
6540: 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20  ii>=0; ii--){.  
6550: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
6560: 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69  b[ii].pBt && (ii
6570: 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e  ==iDb || pId2->n
6580: 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ==0) ){.        
6590: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
65a0: 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61  tMmapLimit(db->a
65b0: 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b  Db[ii].pBt, sz);
65c0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
65d0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a 20   }.    }.    sz 
65e0: 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20 73  = -1;.    rc = s
65f0: 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
6600: 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c  rol(db, zDb, SQL
6610: 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53  ITE_FCNTL_MMAP_S
6620: 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65  IZE, &sz);.#else
6630: 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20  .    sz = 0;.   
6640: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
6650: 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
6660: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
6670: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
6680: 67 6c 65 49 6e 74 28 76 2c 20 22 6d 6d 61 70 5f  gleInt(v, "mmap_
6690: 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20  size", sz);.    
66a0: 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51  }else if( rc!=SQ
66b0: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b  LITE_NOTFOUND ){
66c0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
66d0: 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61  Err++;.      pPa
66e0: 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20  rse->rc = rc;.  
66f0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
6700: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
6710: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6720: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
6730: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65  temp_store = "de
6740: 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c  fault"|"memory"|
6750: 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  "file".  **.  **
6760: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
6770: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
6780: 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65  f the temp_store
6790: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
67a0: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
67b0: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
67c0: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
67d0: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
67e0: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
67f0: 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  * value will be 
6800: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
6810: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
6820: 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20  ase is opened.. 
6830: 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68   **.  ** Note th
6840: 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  at it is possibl
6850: 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72  e for the librar
6860: 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  y compile-time o
6870: 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f  ptions to.  ** o
6880: 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65 74  verride this set
6890: 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ting.  */.  case
68a0: 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54   PragTyp_TEMP_ST
68b0: 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORE: {.    if( !
68c0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
68d0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
68e0: 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c  v, "temp_store",
68f0: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 29   db->temp_store)
6900: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6910: 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f     changeTempSto
6920: 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a 52 69  rage(pParse, zRi
6930: 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ght);.    }.    
6940: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6950: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
6960: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6970: 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ory.  **   PRAGM
6980: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
6990: 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72  ectory = ""|"dir
69a0: 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a  ectory_name".  *
69b0: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
69c0: 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76   set the local v
69d0: 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70  alue of the temp
69e0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
69f0: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
6a00: 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  .  ** the value 
6a10: 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20  sets a specific 
6a20: 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20  directory to be 
6a30: 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
6a40: 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53  ry files..  ** S
6a50: 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c  etting to a null
6a60: 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 20   string reverts 
6a70: 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20 74  to the default t
6a80: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
6a90: 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20  ry search..  ** 
6aa0: 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  If temporary dir
6ab0: 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65  ectory is change
6ac0: 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69 64 61  d, then invalida
6ad0: 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20  teTempStorage.. 
6ae0: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
6af0: 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f  PragTyp_TEMP_STO
6b00: 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a  RE_DIRECTORY: {.
6b10: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
6b20: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
6b30: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 74 65  ingleText(v, "te
6b40: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6b50: 72 79 22 2c 20 73 71 6c 69 74 65 33 5f 74 65 6d  ry", sqlite3_tem
6b60: 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  p_directory);.  
6b70: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
6b80: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
6b90: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
6ba0: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
6bb0: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
6bc0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
6bd0: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
6be0: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
6bf0: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
6c00: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
6c10: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
6c20: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
6c30: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
6c40: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
6c50: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
6c60: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
6c70: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
6c80: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
6c90: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
6ca0: 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50   if( SQLITE_TEMP
6cb0: 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20  _STORE==0.      
6cc0: 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50   || (SQLITE_TEMP
6cd0: 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d  _STORE==1 && db-
6ce0: 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a  >temp_store<=1).
6cf0: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
6d00: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20  E_TEMP_STORE==2 
6d10: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
6d20: 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20  e==1).      ){. 
6d30: 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74         invalidat
6d40: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
6d50: 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rse);.      }.  
6d60: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
6d70: 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69  (sqlite3_temp_di
6d80: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
6d90: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
6da0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
6db0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
6dc0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
6dd0: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
6de0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
6df0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65        sqlite3_te
6e00: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  mp_directory = 0
6e10: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
6e20: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
6e30: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
6e40: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
6e50: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20   SQLITE_OS_WIN. 
6e60: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
6e70: 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  A data_store_dir
6e80: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
6e90: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
6ea0: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
6eb0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
6ec0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
6ed0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
6ee0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  l value of the d
6ef0: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
6f00: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
6f10: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
6f20: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
6f30: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
6f40: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
6f50: 62 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a  base files that.
6f60: 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66    ** were specif
6f70: 69 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74  ied with a relat
6f80: 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53  ive pathname.  S
6f90: 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c  etting to a null
6fa0: 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a   string reverts.
6fb0: 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61    ** to the defa
6fc0: 75 6c 74 20 64 61 74 61 62 61 73 65 20 64 69 72  ult database dir
6fd0: 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f  ectory, which fo
6fe0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
6ff0: 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 0a   specified with.
7000: 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20    ** a relative 
7010: 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62  path will probab
7020: 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ly be based on t
7030: 68 65 20 63 75 72 72 65 6e 74 20 64 69 72 65 63  he current direc
7040: 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a  tory for the.  *
7050: 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61  * process.  Data
7060: 62 61 73 65 20 66 69 6c 65 20 73 70 65 63 69 66  base file specif
7070: 69 65 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f  ied with an abso
7080: 6c 75 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f  lute path are no
7090: 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20  t impacted.  ** 
70a0: 62 79 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c  by this setting,
70b0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69   regardless of i
70c0: 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20  ts value..  **. 
70d0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
70e0: 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49  yp_DATA_STORE_DI
70f0: 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69  RECTORY: {.    i
7100: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
7110: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
7120: 54 65 78 74 28 76 2c 20 22 64 61 74 61 5f 73 74  Text(v, "data_st
7130: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20  ore_directory", 
7140: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
7150: 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 7d 65 6c  ectory);.    }el
7160: 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  se{.#ifndef SQLI
7170: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20  TE_OMIT_WSD.    
7180: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
7190: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  ){.        int r
71a0: 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  es;.        rc =
71b0: 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73   sqlite3OsAccess
71c0: 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68  (db->pVfs, zRigh
71d0: 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53  t, SQLITE_ACCESS
71e0: 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72 65 73  _READWRITE, &res
71f0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
7200: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
7210: 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
7220: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
7230: 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74  Msg(pParse, "not
7240: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
7250: 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20  ctory");.       
7260: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
7270: 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ut;.        }.  
7280: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
7290: 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33  te3_free(sqlite3
72a0: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29  _data_directory)
72b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  ;.      if( zRig
72c0: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
72d0: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
72e0: 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65  rectory = sqlite
72f0: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
7300: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
7310: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
7320: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7330: 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  tory = 0;.      
7340: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
7350: 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20  TE_OMIT_WSD */. 
7360: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
7370: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20    }.#endif..#if 
7380: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
7390: 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a  CKING_STYLE.  /*
73a0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
73b0: 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70  database.]lock_p
73c0: 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20  roxy_file.  **  
73d0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
73e0: 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  e.]lock_proxy_fi
73f0: 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c  le = ":auto:"|"l
7400: 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20  ock_file_path". 
7410: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
7420: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
7430: 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f   of the lock_pro
7440: 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43  xy_file flag.  C
7450: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
7460: 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70   value sets a sp
7470: 65 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62  ecific file to b
7480: 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62  e used for datab
7490: 61 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73  ase access locks
74a0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
74b0: 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f  se PragTyp_LOCK_
74c0: 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20  PROXY_FILE: {.  
74d0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
74e0: 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50  .      Pager *pP
74f0: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
7500: 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42  reePager(pDb->pB
7510: 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  t);.      char *
7520: 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20  proxy_file_path 
7530: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71  = NULL;.      sq
7540: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
7550: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
7560: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
7570: 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c      sqlite3OsFil
7580: 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69  eControlHint(pFi
7590: 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c  le, SQLITE_GET_L
75a0: 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20  OCKPROXYFILE, . 
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75c0: 20 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79            &proxy
75d0: 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20  _file_path);.   
75e0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54     returnSingleT
75f0: 65 78 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72 6f  ext(v, "lock_pro
7600: 78 79 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79 5f  xy_file", proxy_
7610: 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20  file_path);.    
7620: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67  }else{.      Pag
7630: 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
7640: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
7650: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20  Db->pBt);.      
7660: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46  sqlite3_file *pF
7670: 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ile = sqlite3Pag
7680: 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a  erFile(pPager);.
7690: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
76a0: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
76b0: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  0] ){.        re
76c0: 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43  s=sqlite3OsFileC
76d0: 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51  ontrol(pFile, SQ
76e0: 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f  LITE_SET_LOCKPRO
76f0: 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20  XYFILE, .       
7700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 52                zR
7720: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65  ight);.      } e
7730: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65  lse {.        re
7740: 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43  s=sqlite3OsFileC
7750: 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51  ontrol(pFile, SQ
7760: 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f  LITE_SET_LOCKPRO
7770: 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20  XYFILE, .       
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55                NU
77a0: 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  LL);.      }.   
77b0: 20 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49     if( res!=SQLI
77c0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
77d0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
77e0: 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64  (pParse, "failed
77f0: 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f   to set lock pro
7800: 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20  xy file");.     
7810: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
7820: 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
7830: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
7840: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7850: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
7860: 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a  _STYLE */      .
7870: 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20      .  /*.  **  
7880: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
7890: 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20  e.]synchronous. 
78a0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
78b0: 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e  tabase.]synchron
78c0: 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41  ous=OFF|ON|NORMA
78d0: 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a  L|FULL.  **.  **
78e0: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
78f0: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
7900: 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75  f the synchronou
7910: 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  s flag.  Changin
7920: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
7930: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
7940: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
7950: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
7960: 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75  d the.  ** defau
7970: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
7980: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
7990: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
79a0: 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65  base is.  ** ope
79b0: 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ned..  */.  case
79c0: 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f   PragTyp_SYNCHRO
79d0: 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20  NOUS: {.    if( 
79e0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
79f0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7a00: 28 76 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73  (v, "synchronous
7a10: 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c  ", pDb->safety_l
7a20: 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c  evel-1);.    }el
7a30: 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 64  se{.      if( !d
7a40: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
7a50: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
7a60: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
7a70: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53   .            "S
7a80: 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20  afety level may 
7a90: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 69  not be changed i
7aa0: 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74  nside a transact
7ab0: 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ion");.      }el
7ac0: 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
7ad0: 69 4c 65 76 65 6c 20 3d 20 28 67 65 74 53 61 66  iLevel = (getSaf
7ae0: 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c  etyLevel(zRight,
7af0: 30 2c 31 29 2b 31 29 20 26 20 50 41 47 45 52 5f  0,1)+1) & PAGER_
7b00: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b  SYNCHRONOUS_MASK
7b10: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4c  ;.        if( iL
7b20: 65 76 65 6c 3d 3d 30 20 29 20 69 4c 65 76 65 6c  evel==0 ) iLevel
7b30: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 44   = 1;.        pD
7b40: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
7b50: 3d 20 69 4c 65 76 65 6c 3b 0a 20 20 20 20 20 20  = iLevel;.      
7b60: 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61    setAllPagerFla
7b70: 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  gs(db);.      }.
7b80: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7b90: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
7ba0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
7bb0: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
7bc0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7bd0: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20 20  _FLAG_PRAGMAS.  
7be0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c 41  case PragTyp_FLA
7bf0: 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  G: {.    if( zRi
7c00: 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ght==0 ){.      
7c10: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
7c20: 76 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d  v, pPragma->zNam
7c30: 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  e, (db->flags & 
7c40: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 29 21 3d  pPragma->iArg)!=
7c50: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
7c60: 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d        int mask =
7c70: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20   pPragma->iArg; 
7c80: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69     /* Mask of bi
7c90: 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65  ts to set or cle
7ca0: 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ar. */.      if(
7cb0: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
7cc0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
7cd0: 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70   Foreign key sup
7ce0: 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20  port may not be 
7cf0: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
7d00: 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20  led while not.  
7d10: 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f        ** in auto
7d20: 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a  -commit mode.  *
7d30: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
7d40: 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69  = ~(SQLITE_Forei
7d50: 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d  gnKeys);.      }
7d60: 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52  .#if SQLITE_USER
7d70: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
7d80: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
7d90: 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55 41  th.authLevel==UA
7da0: 55 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20 20  UTH_User ){.    
7db0: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c      /* Do not al
7dc0: 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73  low non-admin us
7dd0: 65 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  ers to modify th
7de0: 65 20 73 63 68 65 6d 61 20 61 72 62 69 74 72 61  e schema arbitra
7df0: 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20  rily */.        
7e00: 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45  mask &= ~(SQLITE
7e10: 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a 20  _WriteSchema);. 
7e20: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20       }.#endif.. 
7e30: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
7e40: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
7e50: 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20  t, 0) ){.       
7e60: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61   db->flags |= ma
7e70: 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  sk;.      }else{
7e80: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61  .        db->fla
7e90: 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20  gs &= ~mask;.   
7ea0: 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53       if( mask==S
7eb0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29  QLITE_DeferFKs )
7ec0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
7ed0: 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20  mCons = 0;.     
7ee0: 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e   }..      /* Man
7ef0: 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72  y of the flag-pr
7f00: 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65  agmas modify the
7f10: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20   code generated 
7f20: 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20  by the SQL .    
7f30: 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65    ** compiler (e
7f40: 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  g. count_changes
7f50: 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63  ). So add an opc
7f60: 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c  ode to expire al
7f70: 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69  l.      ** compi
7f80: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
7f90: 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69  ts after modifyi
7fa0: 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75  ng a pragma valu
7fb0: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
7fc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
7fd0: 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70 69 72 65  Op2(v, OP_Expire
7fe0: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , 0, 0);.      s
7ff0: 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28  etAllPagerFlags(
8000: 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  db);.    }.    b
8010: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
8020: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
8030: 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  FLAG_PRAGMAS */.
8040: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8050: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
8060: 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  MAS.  /*.  **   
8070: 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
8080: 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a  o(<table>).  **.
8090: 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 69    ** Return a si
80a0: 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61 63  ngle row for eac
80b0: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
80c0: 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68 65  named table. The
80d0: 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a   columns of.  **
80e0: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 64 61   the returned da
80f0: 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a  ta set are:.  **
8100: 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20 20  .  ** cid:      
8110: 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d    Column id (num
8120: 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  bered from left 
8130: 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74 69  to right, starti
8140: 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61  ng at 0).  ** na
8150: 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  me:       Column
8160: 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a   name.  ** type:
8170: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65         Column de
8180: 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a  claration type..
8190: 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20    ** notnull:   
81a0: 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e 55   True if 'NOT NU
81b0: 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20 63  LL' is part of c
81c0: 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f  olumn declaratio
81d0: 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75  n.  ** dflt_valu
81e0: 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  e: The default v
81f0: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  alue for the col
8200: 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a  umn, if any..  *
8210: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
8220: 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28  _TABLE_INFO: if(
8230: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 54   zRight ){.    T
8240: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
8250: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
8260: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67  ndTable(db, zRig
8270: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
8280: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
8290: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
82a0: 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20  r *azCol[] = {. 
82b0: 20 20 20 20 20 20 20 20 22 63 69 64 22 2c 20 22          "cid", "
82c0: 6e 61 6d 65 22 2c 20 22 74 79 70 65 22 2c 20 22  name", "type", "
82d0: 6e 6f 74 6e 75 6c 6c 22 2c 20 22 64 66 6c 74 5f  notnull", "dflt_
82e0: 76 61 6c 75 65 22 2c 20 22 70 6b 22 0a 20 20 20  value", "pk".   
82f0: 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20     };.      int 
8300: 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20  i, k;.      int 
8310: 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20  nHidden = 0;.   
8320: 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b     Column *pCol;
8330: 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50  .      Index *pP
8340: 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61  k = sqlite3Prima
8350: 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29  ryKeyIndex(pTab)
8360: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
8370: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20  nMem = 6;.      
8380: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
8390: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
83a0: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 65 74 41  iDb);.      setA
83b0: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
83c0: 20 36 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65   6, azCol); asse
83d0: 72 74 28 20 36 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 6==ArraySize
83e0: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20  (azCol) );.     
83f0: 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
8400: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73  olumnNames(pPars
8410: 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20  e, pTab);.      
8420: 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54  for(i=0, pCol=pT
8430: 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62  ab->aCol; i<pTab
8440: 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f  ->nCol; i++, pCo
8450: 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  l++){.        if
8460: 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  ( IsHiddenColumn
8470: 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20  (pCol) ){.      
8480: 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20      nHidden++;. 
8490: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
84a0: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
84b0: 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e       if( (pCol->
84c0: 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
84d0: 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29  AG_PRIMKEY)==0 )
84e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
84f0: 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  0;.        }else
8500: 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20   if( pPk==0 ){. 
8510: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a           k = 1;.
8520: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
8530: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31           for(k=1
8540: 3b 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20  ; k<=pTab->nCol 
8550: 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e  && pPk->aiColumn
8560: 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d  [k-1]!=i; k++){}
8570: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
8580: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
8590: 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69  ltiLoad(v, 1, "i
85a0: 73 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20  ssisi",.        
85b0: 20 20 20 20 20 20 20 69 2d 6e 48 69 64 64 65 6e         i-nHidden
85c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
85d0: 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pCol->zName,.  
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f               pCo
85f0: 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d  l->zType ? pCol-
8600: 3e 7a 54 79 70 65 20 3a 20 22 22 2c 0a 20 20 20  >zType : "",.   
8610: 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c              pCol
8620: 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20  ->notNull ? 1 : 
8630: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
8640: 20 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 0a 20    pCol->zDflt,. 
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 29                k)
8660: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
8670: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8680: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
8690: 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  6);.      }.    
86a0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
86b0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53    case PragTyp_S
86c0: 54 41 54 53 3a 20 7b 0a 20 20 20 20 73 74 61 74  TATS: {.    stat
86d0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
86e0: 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c  zCol[] = { "tabl
86f0: 65 22 2c 20 22 69 6e 64 65 78 22 2c 20 22 77 69  e", "index", "wi
8700: 64 74 68 22 2c 20 22 68 65 69 67 68 74 22 20 7d  dth", "height" }
8710: 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  ;.    Index *pId
8720: 78 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  x;.    HashElem 
8730: 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69  *i;.    v = sqli
8740: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
8750: 65 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  e);.    pParse->
8760: 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71  nMem = 4;.    sq
8770: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
8780: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
8790: 62 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f  b);.    setAllCo
87a0: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20  lumnNames(v, 4, 
87b0: 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28  azCol);  assert(
87c0: 20 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a   4==ArraySize(az
87d0: 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28  Col) );.    for(
87e0: 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  i=sqliteHashFirs
87f0: 74 28 26 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t(&pDb->pSchema-
8800: 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d  >tblHash); i; i=
8810: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69  sqliteHashNext(i
8820: 29 29 7b 0a 20 20 20 20 20 20 54 61 62 6c 65 20  )){.      Table 
8830: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
8840: 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20 20  shData(i);.     
8850: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
8860: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 73 69  iLoad(v, 1, "ssi
8870: 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70  i",.           p
8880: 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Tab->zName,.    
8890: 20 20 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20         0,.      
88a0: 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65       (int)sqlite
88b0: 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61  3LogEstToInt(pTa
88c0: 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 0a 20 20  b->szTabRow),.  
88d0: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71           (int)sq
88e0: 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
88f0: 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73  (pTab->nRowLogEs
8900: 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  t));.      sqlit
8910: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8920: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
8930: 20 34 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70   4);.      for(p
8940: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
8950: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
8960: 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20  x->pNext){.     
8970: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
8980: 6c 74 69 4c 6f 61 64 28 76 2c 20 32 2c 20 22 73  ltiLoad(v, 2, "s
8990: 69 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ii",.           
89a0: 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pIdx->zName,.   
89b0: 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c          (int)sql
89c0: 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
89d0: 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29 2c  pIdx->szIdxRow),
89e0: 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74  .           (int
89f0: 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f  )sqlite3LogEstTo
8a00: 49 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f 77 4c  Int(pIdx->aiRowL
8a10: 6f 67 45 73 74 5b 30 5d 29 29 3b 0a 20 20 20 20  ogEst[0]));.    
8a20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8a30: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
8a40: 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20  ltRow, 1, 4);.  
8a50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
8a60: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65    break;..  case
8a70: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49   PragTyp_INDEX_I
8a80: 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20  NFO: if( zRight 
8a90: 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  ){.    Index *pI
8aa0: 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  dx;.    Table *p
8ab0: 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d 20  Tab;.    pIdx = 
8ac0: 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
8ad0: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
8ae0: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 20  );.    if( pIdx 
8af0: 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  ){.      static 
8b00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f  const char *azCo
8b10: 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  l[] = {.        
8b20: 20 22 73 65 71 6e 6f 22 2c 20 22 63 69 64 22 2c   "seqno", "cid",
8b30: 20 22 6e 61 6d 65 22 2c 20 22 64 65 73 63 22 2c   "name", "desc",
8b40: 20 22 63 6f 6c 6c 22 2c 20 22 6b 65 79 22 0a 20   "coll", "key". 
8b50: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
8b60: 74 20 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d  t i;.      int m
8b70: 78 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 72  x;.      if( pPr
8b80: 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20  agma->iArg ){.  
8b90: 20 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20        /* PRAGMA 
8ba0: 69 6e 64 65 78 5f 78 69 6e 66 6f 20 28 6e 65 77  index_xinfo (new
8bb0: 65 72 20 76 65 72 73 69 6f 6e 20 77 69 74 68 20  er version with 
8bc0: 6d 6f 72 65 20 72 6f 77 73 20 61 6e 64 20 63 6f  more rows and co
8bd0: 6c 75 6d 6e 73 29 20 2a 2f 0a 20 20 20 20 20 20  lumns) */.      
8be0: 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 43 6f    mx = pIdx->nCo
8bf0: 6c 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20 70 50  lumn;.        pP
8c00: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
8c10: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
8c20: 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69       /* PRAGMA i
8c30: 6e 64 65 78 5f 69 6e 66 6f 20 28 6c 65 67 61 63  ndex_info (legac
8c40: 79 20 76 65 72 73 69 6f 6e 29 20 2a 2f 0a 20 20  y version) */.  
8c50: 20 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d        mx = pIdx-
8c60: 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20 20  >nKeyCol;.      
8c70: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
8c80: 20 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   3;.      }.    
8c90: 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70    pTab = pIdx->p
8ca0: 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c  Table;.      sql
8cb0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8cc0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
8cd0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
8ce0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3c 3d 41   pParse->nMem<=A
8cf0: 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20  rraySize(azCol) 
8d00: 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43  );.      setAllC
8d10: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 70 50  olumnNames(v, pP
8d20: 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 61 7a 43 6f  arse->nMem, azCo
8d30: 6c 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  l);.      for(i=
8d40: 30 3b 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20  0; i<mx; i++){. 
8d50: 20 20 20 20 20 20 20 69 31 36 20 63 6e 75 6d 20         i16 cnum 
8d60: 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e  = pIdx->aiColumn
8d70: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  [i];.        sql
8d80: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
8d90: 64 28 76 2c 20 31 2c 20 22 69 69 73 22 2c 20 69  d(v, 1, "iis", i
8da0: 2c 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20 20  , cnum,.        
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dc0: 20 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30 20       cnum<0 ? 0 
8dd0: 3a 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75  : pTab->aCol[cnu
8de0: 6d 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  m].zName);.     
8df0: 20 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e     if( pPragma->
8e00: 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20  iArg ){.        
8e10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
8e20: 74 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69 73  tiLoad(v, 4, "is
8e30: 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  i",.            
8e40: 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65 72  pIdx->aSortOrder
8e50: 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  [i],.           
8e60: 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d   pIdx->azColl[i]
8e70: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 3c  ,.            i<
8e80: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 0a  pIdx->nKeyCol);.
8e90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8ea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8eb0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
8ec0: 52 6f 77 2c 20 31 2c 20 70 50 61 72 73 65 2d 3e  Row, 1, pParse->
8ed0: 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  nMem);.      }. 
8ee0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
8ef0: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
8f00: 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66  p_INDEX_LIST: if
8f10: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
8f20: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
8f30: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
8f40: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61    int i;.    pTa
8f50: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
8f60: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
8f70: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
8f80: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74 61  Tab ){.      sta
8f90: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
8fa0: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20  azCol[] = {.    
8fb0: 20 20 20 20 22 73 65 71 22 2c 20 22 6e 61 6d 65      "seq", "name
8fc0: 22 2c 20 22 75 6e 69 71 75 65 22 2c 20 22 6f 72  ", "unique", "or
8fd0: 69 67 69 6e 22 2c 20 22 70 61 72 74 69 61 6c 22  igin", "partial"
8fe0: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
8ff0: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
9000: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
9010: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9020: 20 35 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   5;.      sqlite
9030: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
9040: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
9050: 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75        setAllColu
9060: 6d 6e 4e 61 6d 65 73 28 76 2c 20 35 2c 20 61 7a  mnNames(v, 5, az
9070: 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20 35  Col);  assert( 5
9080: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
9090: 6c 29 20 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  l) );.      for(
90a0: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
90b0: 78 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70 49  x, i=0; pIdx; pI
90c0: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
90d0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  i++){.        co
90e0: 6e 73 74 20 63 68 61 72 20 2a 61 7a 4f 72 69 67  nst char *azOrig
90f0: 69 6e 5b 5d 20 3d 20 7b 20 22 63 22 2c 20 22 75  in[] = { "c", "u
9100: 22 2c 20 22 70 6b 22 20 7d 3b 0a 20 20 20 20 20  ", "pk" };.     
9110: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
9120: 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69  ltiLoad(v, 1, "i
9130: 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20  sisi",.         
9140: 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20 20    i,.           
9150: 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pIdx->zName,.   
9160: 20 20 20 20 20 20 20 20 49 73 55 6e 69 71 75 65          IsUnique
9170: 49 6e 64 65 78 28 70 49 64 78 29 2c 0a 20 20 20  Index(pIdx),.   
9180: 20 20 20 20 20 20 20 20 61 7a 4f 72 69 67 69 6e          azOrigin
9190: 5b 70 49 64 78 2d 3e 69 64 78 54 79 70 65 5d 2c  [pIdx->idxType],
91a0: 0a 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78  .           pIdx
91b0: 2d 3e 70 50 61 72 74 49 64 78 57 68 65 72 65 21  ->pPartIdxWhere!
91c0: 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  =0);.        sql
91d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
91e0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
91f0: 31 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 5);.      }. 
9200: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
9210: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
9220: 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54 3a  p_DATABASE_LIST:
9230: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
9240: 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b  nst char *azCol[
9250: 5d 20 3d 20 7b 20 22 73 65 71 22 2c 20 22 6e 61  ] = { "seq", "na
9260: 6d 65 22 2c 20 22 66 69 6c 65 22 20 7d 3b 0a 20  me", "file" };. 
9270: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 50     int i;.    pP
9280: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
9290: 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e      setAllColumn
92a0: 4e 61 6d 65 73 28 76 2c 20 33 2c 20 61 7a 43 6f  Names(v, 3, azCo
92b0: 6c 29 3b 20 61 73 73 65 72 74 28 20 33 3d 3d 41  l); assert( 3==A
92c0: 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20  rraySize(azCol) 
92d0: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
92e0: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
92f0: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
9300: 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63  Db[i].pBt==0 ) c
9310: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61  ontinue;.      a
9320: 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
9330: 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20  ].zName!=0 );.  
9340: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9350: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
9360: 69 73 73 22 2c 0a 20 20 20 20 20 20 20 20 20 69  iss",.         i
9370: 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  ,.         db->a
9380: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20  Db[i].zName,.   
9390: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
93a0: 65 65 47 65 74 46 69 6c 65 6e 61 6d 65 28 64 62  eeGetFilename(db
93b0: 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 29 3b 0a  ->aDb[i].pBt));.
93c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
93d0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
93e0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a  sultRow, 1, 3);.
93f0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9400: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
9410: 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53  yp_COLLATION_LIS
9420: 54 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  T: {.    static 
9430: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f  const char *azCo
9440: 6c 5b 5d 20 3d 20 7b 20 22 73 65 71 22 2c 20 22  l[] = { "seq", "
9450: 6e 61 6d 65 22 20 7d 3b 0a 20 20 20 20 69 6e 74  name" };.    int
9460: 20 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73 68   i = 0;.    Hash
9470: 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 70 50 61  Elem *p;.    pPa
9480: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20  rse->nMem = 2;. 
9490: 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
94a0: 61 6d 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f 6c  ames(v, 2, azCol
94b0: 29 3b 20 61 73 73 65 72 74 28 20 32 3d 3d 41 72  ); assert( 2==Ar
94c0: 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
94d0: 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71 6c 69  ;.    for(p=sqli
94e0: 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d  teHashFirst(&db-
94f0: 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b 20 70  >aCollSeq); p; p
9500: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
9510: 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c 53  p)){.      CollS
9520: 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c  eq *pColl = (Col
9530: 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73  lSeq *)sqliteHas
9540: 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20 20 20  hData(p);.      
9550: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
9560: 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 22 2c  Load(v, 1, "is",
9570: 20 69 2b 2b 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61   i++, pColl->zNa
9580: 6d 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  me);.      sqlit
9590: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
95a0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
95b0: 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   2);.    }.  }. 
95c0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
95d0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  * SQLITE_OMIT_SC
95e0: 48 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  HEMA_PRAGMAS */.
95f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9600: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
9610: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9620: 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54  FOREIGN_KEY_LIST
9630: 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
9640: 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20      FKey *pFK;. 
9650: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
9660: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
9670: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
9680: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
9690: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
96a0: 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47      v = sqlite3G
96b0: 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a  etVdbe(pParse);.
96c0: 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61 62        pFK = pTab
96d0: 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20 69  ->pFKey;.      i
96e0: 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20 20  f( pFK ){.      
96f0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
9700: 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b  har *azCol[] = {
9710: 0a 20 20 20 20 20 20 20 20 20 20 20 22 69 64 22  .           "id"
9720: 2c 20 22 73 65 71 22 2c 20 22 74 61 62 6c 65 22  , "seq", "table"
9730: 2c 20 22 66 72 6f 6d 22 2c 20 22 74 6f 22 2c 20  , "from", "to", 
9740: 22 6f 6e 5f 75 70 64 61 74 65 22 2c 20 22 6f 6e  "on_update", "on
9750: 5f 64 65 6c 65 74 65 22 2c 0a 20 20 20 20 20 20  _delete",.      
9760: 20 20 20 20 20 22 6d 61 74 63 68 22 0a 20 20 20       "match".   
9770: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20       };.        
9780: 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20  int i = 0; .    
9790: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
97a0: 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73 71   = 8;.        sq
97b0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
97c0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
97d0: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 65 74 41  b);.        setA
97e0: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
97f0: 20 38 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65   8, azCol); asse
9800: 72 74 28 20 38 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 8==ArraySize
9810: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20  (azCol) );.     
9820: 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20     while(pFK){. 
9830: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a           int j;.
9840: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
9850: 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20  0; j<pFK->nCol; 
9860: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
9870: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
9880: 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 69  tiLoad(v, 1, "ii
9890: 73 73 73 73 73 73 22 2c 0a 20 20 20 20 20 20 20  ssssss",.       
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 2c 0a 20              i,. 
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98c0: 20 20 6a 2c 0a 20 20 20 20 20 20 20 20 20 20 20    j,.           
98d0: 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f          pFK->zTo
98e0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
98f0: 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b       pTab->aCol[
9900: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72  pFK->aCol[j].iFr
9910: 6f 6d 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  om].zName,.     
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46                pF
9930: 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 2c  K->aCol[j].zCol,
9940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9950: 20 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65 28 70      actionName(p
9960: 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 2c  FK->aAction[1]),
9970: 20 20 2f 2a 20 4f 4e 20 55 50 44 41 54 45 20 2a    /* ON UPDATE *
9980: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
9990: 20 20 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65 28       actionName(
99a0: 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29  pFK->aAction[0])
99b0: 2c 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20  ,  /* ON DELETE 
99c0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
99d0: 20 20 20 20 20 20 22 4e 4f 4e 45 22 29 3b 0a 20        "NONE");. 
99e0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
99f0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
9a00: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
9a10: 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d   8);.          }
9a20: 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a  .          ++i;.
9a30: 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d 20            pFK = 
9a40: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a  pFK->pNextFrom;.
9a50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9a60: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
9a70: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21  eak;.#endif /* !
9a80: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
9a90: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
9aa0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
9ab0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
9ac0: 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51 4c  _KEY.#ifndef SQL
9ad0: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
9ae0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9af0: 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43  FOREIGN_KEY_CHEC
9b00: 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70  K: {.    FKey *p
9b10: 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  FK;             
9b20: 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  /* A foreign key
9b30: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
9b40: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
9b50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69            /* Chi
9b60: 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e  ld table contain
9b70: 20 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65   "REFERENCES" ke
9b80: 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62  yword */.    Tab
9b90: 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20  le *pParent;    
9ba0: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61      /* Parent ta
9bb0: 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20 70  ble that child p
9bc0: 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20  oints to */.    
9bd0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20  Index *pIdx;    
9be0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
9bf0: 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74 61  in the parent ta
9c00: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
9c10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9c20: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
9c30: 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20  r:  Foreign key 
9c40: 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20  number for pTab 
9c50: 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20  */.    int j;   
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9c70: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20   Loop counter:  
9c80: 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72  Field of the for
9c90: 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20  eign key */.    
9ca0: 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20  HashElem *k;    
9cb0: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
9cc0: 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61  ounter:  Next ta
9cd0: 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f  ble in schema */
9ce0: 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20  .    int x;     
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72              /* r
9d00: 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a  esult variable *
9d10: 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
9d20: 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ult;         /* 
9d30: 33 20 72 65 67 69 73 74 65 72 73 20 74 6f 20 68  3 registers to h
9d40: 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77  old a result row
9d50: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b   */.    int regK
9d60: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ey;            /
9d70: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f  * Register to ho
9d80: 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b  ld key for check
9d90: 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20  ing the FK */.  
9da0: 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20    int regRow;   
9db0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
9dc0: 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20  sters to hold a 
9dd0: 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f  row from pTab */
9de0: 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70  .    int addrTop
9df0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
9e00: 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65  op of a loop che
9e10: 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65  cking foreign ke
9e20: 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  ys */.    int ad
9e30: 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20  drOk;           
9e40: 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66   /* Jump here if
9e50: 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a   the key is OK *
9e60: 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c  /.    int *aiCol
9e70: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
9e80: 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20  child to parent 
9e90: 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a  column mapping *
9ea0: 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  /.    static con
9eb0: 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d  st char *azCol[]
9ec0: 20 3d 20 7b 20 22 74 61 62 6c 65 22 2c 20 22 72   = { "table", "r
9ed0: 6f 77 69 64 22 2c 20 22 70 61 72 65 6e 74 22 2c  owid", "parent",
9ee0: 20 22 66 6b 69 64 22 20 7d 3b 0a 0a 20 20 20 20   "fkid" };..    
9ef0: 72 65 67 52 65 73 75 6c 74 20 3d 20 70 50 61 72  regResult = pPar
9f00: 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20  se->nMem+1;.    
9f10: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20  pParse->nMem += 
9f20: 34 3b 0a 20 20 20 20 72 65 67 4b 65 79 20 3d 20  4;.    regKey = 
9f30: 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a  ++pParse->nMem;.
9f40: 20 20 20 20 72 65 67 52 6f 77 20 3d 20 2b 2b 70      regRow = ++p
9f50: 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  Parse->nMem;.   
9f60: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
9f70: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
9f80: 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d   setAllColumnNam
9f90: 65 73 28 76 2c 20 34 2c 20 61 7a 43 6f 6c 29 3b  es(v, 4, azCol);
9fa0: 20 61 73 73 65 72 74 28 20 34 3d 3d 41 72 72 61   assert( 4==Arra
9fb0: 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a  ySize(azCol) );.
9fc0: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
9fd0: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
9fe0: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b 20  se, iDb);.    k 
9ff0: 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  = sqliteHashFirs
a000: 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t(&db->aDb[iDb].
a010: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
a020: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 6b 20  );.    while( k 
a030: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  ){.      if( zRi
a040: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ght ){.        p
a050: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63  Tab = sqlite3Loc
a060: 61 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c  ateTable(pParse,
a070: 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29   0, zRight, zDb)
a080: 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b  ;.        k = 0;
a090: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
a0a0: 20 20 20 20 20 20 70 54 61 62 20 3d 20 28 54 61        pTab = (Ta
a0b0: 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68 44  ble*)sqliteHashD
a0c0: 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20 20 20  ata(k);.        
a0d0: 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 4e 65  k = sqliteHashNe
a0e0: 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  xt(k);.      }. 
a0f0: 20 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d 30       if( pTab==0
a100: 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79 3d   || pTab->pFKey=
a110: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
a120: 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c       sqlite3Tabl
a130: 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44  eLock(pParse, iD
a140: 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30  b, pTab->tnum, 0
a150: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a  , pTab->zName);.
a160: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
a170: 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61 72  nCol+regRow>pPar
a180: 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72 73  se->nMem ) pPars
a190: 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d 3e  e->nMem = pTab->
a1a0: 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a 20  nCol + regRow;. 
a1b0: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
a1c0: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c  Table(pParse, 0,
a1d0: 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f   iDb, pTab, OP_O
a1e0: 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20  penRead);.      
a1f0: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
a200: 74 72 69 6e 67 28 76 2c 20 72 65 67 52 65 73 75  tring(v, regResu
a210: 6c 74 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29  lt, pTab->zName)
a220: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c  ;.      for(i=1,
a230: 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79   pFK=pTab->pFKey
a240: 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d  ; pFK; i++, pFK=
a250: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b  pFK->pNextFrom){
a260: 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74  .        pParent
a270: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
a280: 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f  ble(db, pFK->zTo
a290: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , zDb);.        
a2a0: 69 66 28 20 70 50 61 72 65 6e 74 3d 3d 30 20 29  if( pParent==0 )
a2b0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
a2c0: 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20     pIdx = 0;.   
a2d0: 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c       sqlite3Tabl
a2e0: 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44  eLock(pParse, iD
a2f0: 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e 75 6d  b, pParent->tnum
a300: 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e 7a 4e  , 0, pParent->zN
a310: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 78 20  ame);.        x 
a320: 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  = sqlite3FkLocat
a330: 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70  eIndex(pParse, p
a340: 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49  Parent, pFK, &pI
a350: 64 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  dx, 0);.        
a360: 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20 20 20  if( x==0 ){.    
a370: 20 20 20 20 20 20 69 66 28 20 70 49 64 78 3d 3d        if( pIdx==
a380: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
a390: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
a3a0: 65 28 70 50 61 72 73 65 2c 20 69 2c 20 69 44 62  e(pParse, i, iDb
a3b0: 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f 4f 70  , pParent, OP_Op
a3c0: 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20  enRead);.       
a3d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
a3e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a3f0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4f 70  eAddOp3(v, OP_Op
a400: 65 6e 52 65 61 64 2c 20 69 2c 20 70 49 64 78 2d  enRead, i, pIdx-
a410: 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20  >tnum, iDb);.   
a420: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a430: 56 64 62 65 53 65 74 50 34 4b 65 79 49 6e 66 6f  VdbeSetP4KeyInfo
a440: 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a  (pParse, pIdx);.
a450: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
a460: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
a470: 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20       k = 0;.    
a480: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a490: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
a4a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61       assert( pPa
a4b0: 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20 70  rse->nErr>0 || p
a4c0: 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  FK==0 );.      i
a4d0: 66 28 20 70 46 4b 20 29 20 62 72 65 61 6b 3b 0a  f( pFK ) break;.
a4e0: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 73 65        if( pParse
a4f0: 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50 61 72 73  ->nTab<i ) pPars
a500: 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20 20  e->nTab = i;.   
a510: 20 20 20 61 64 64 72 54 6f 70 20 3d 20 73 71 6c     addrTop = sql
a520: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
a530: 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29 3b  , OP_Rewind, 0);
a540: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
a550: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c  ;.      for(i=1,
a560: 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79   pFK=pTab->pFKey
a570: 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d  ; pFK; i++, pFK=
a580: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b  pFK->pNextFrom){
a590: 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74  .        pParent
a5a0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
a5b0: 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f  ble(db, pFK->zTo
a5c0: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , zDb);.        
a5d0: 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  pIdx = 0;.      
a5e0: 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20    aiCols = 0;.  
a5f0: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
a600: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78  t ){.          x
a610: 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61   = sqlite3FkLoca
a620: 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20  teIndex(pParse, 
a630: 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70  pParent, pFK, &p
a640: 49 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20  Idx, &aiCols);. 
a650: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
a660: 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20   x==0 );.       
a670: 20 7d 0a 20 20 20 20 20 20 20 20 61 64 64 72 4f   }.        addrO
a680: 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  k = sqlite3VdbeM
a690: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
a6a0: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
a6b0: 20 26 26 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20   && pIdx==0 ){. 
a6c0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 4b 65           int iKe
a6d0: 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d  y = pFK->aCol[0]
a6e0: 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  .iFrom;.        
a6f0: 20 20 61 73 73 65 72 74 28 20 69 4b 65 79 3e 3d    assert( iKey>=
a700: 30 20 26 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e  0 && iKey<pTab->
a710: 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  nCol );.        
a720: 20 20 69 66 28 20 69 4b 65 79 21 3d 70 54 61 62    if( iKey!=pTab
a730: 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20 20 20  ->iPKey ){.     
a740: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a750: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
a760: 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20  olumn, 0, iKey, 
a770: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
a780: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c 75       sqlite3Colu
a790: 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20 70 54 61  mnDefault(v, pTa
a7a0: 62 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29  b, iKey, regRow)
a7b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
a7c0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
a7d0: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65  v, OP_IsNull, re
a7e0: 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b 20 56  gRow, addrOk); V
a7f0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
a800: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a810: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
a820: 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c 20 72   OP_MustBeInt, r
a830: 65 67 52 6f 77 2c 20 0a 20 20 20 20 20 20 20 20  egRow, .        
a840: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a850: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
a860: 2b 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +3); VdbeCoverag
a870: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
a880: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
a890: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a8a0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64  dOp2(v, OP_Rowid
a8b0: 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  , 0, regRow);.  
a8c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a8d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a8e0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f 74 45  ddOp3(v, OP_NotE
a8f0: 78 69 73 74 73 2c 20 69 2c 20 30 2c 20 72 65 67  xists, i, 0, reg
a900: 52 6f 77 29 3b 20 56 64 62 65 43 6f 76 65 72 61  Row); VdbeCovera
a910: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
a920: 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f   sqlite3VdbeGoto
a930: 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20  (v, addrOk);.   
a940: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a950: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73 71  beJumpHere(v, sq
a960: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
a970: 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20  Addr(v)-2);.    
a980: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
a990: 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
a9a0: 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b  pFK->nCol; j++){
a9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
a9c0: 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
a9d0: 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20  olumnOfTable(v, 
a9e0: 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20 20  pTab, 0,.       
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa00: 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61 69       aiCols ? ai
aa10: 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61  Cols[j] : pFK->a
aa20: 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65  Col[j].iFrom, re
aa30: 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20  gRow+j);.       
aa40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aa50: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e  AddOp2(v, OP_IsN
aa60: 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61  ull, regRow+j, a
aa70: 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65  ddrOk); VdbeCove
aa80: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
aa90: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69     }.          i
aaa0: 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20  f( pParent ){.  
aab0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
aac0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
aad0: 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72 65  P_MakeRecord, re
aae0: 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c  gRow, pFK->nCol,
aaf0: 20 72 65 67 4b 65 79 2c 0a 20 20 20 20 20 20 20   regKey,.       
ab00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e         sqlite3In
ab20: 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 64  dexAffinityStr(d
ab30: 62 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43  b,pIdx), pFK->nC
ab40: 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ol);.           
ab50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ab60: 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e  p4Int(v, OP_Foun
ab70: 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65  d, i, addrOk, re
ab80: 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  gKey, 0);.      
ab90: 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
aba0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
abb0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
abc0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
abd0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77  AddOp2(v, OP_Row
abe0: 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  id, 0, regResult
abf0: 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +1);.        sql
ac00: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
ac10: 64 28 76 2c 20 72 65 67 52 65 73 75 6c 74 2b 32  d(v, regResult+2
ac20: 2c 20 22 73 69 22 2c 20 70 46 4b 2d 3e 7a 54 6f  , "si", pFK->zTo
ac30: 2c 20 69 2d 31 29 3b 0a 20 20 20 20 20 20 20 20  , i-1);.        
ac40: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ac50: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
ac60: 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34 29  w, regResult, 4)
ac70: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ac80: 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65  3VdbeResolveLabe
ac90: 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20  l(v, addrOk);.  
aca0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
acb0: 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b  ree(db, aiCols);
acc0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
acd0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ace0: 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20  (v, OP_Next, 0, 
acf0: 61 64 64 72 54 6f 70 2b 31 29 3b 20 56 64 62 65  addrTop+1); Vdbe
ad00: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ad10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
ad20: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f  mpHere(v, addrTo
ad30: 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  p);.    }.  }.  
ad40: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
ad50: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
ad60: 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a  _OMIT_TRIGGER) *
ad70: 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  /.#endif /* !def
ad80: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
ad90: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f  _FOREIGN_KEY) */
ada0: 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  ..#ifndef NDEBUG
adb0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
adc0: 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a  PARSER_TRACE: {.
add0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
ade0: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
adf0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
ae00: 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20  ight, 0) ){.    
ae10: 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65      sqlite3Parse
ae20: 72 54 72 61 63 65 28 73 74 64 65 72 72 2c 20 22  rTrace(stderr, "
ae30: 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20  parser: ");.    
ae40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
ae50: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
ae60: 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20  ace(0, 0);.     
ae70: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
ae80: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
ae90: 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65  /* Reinstall the
aea0: 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66   LIKE and GLOB f
aeb0: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76  unctions.  The v
aec0: 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20  ariant of LIKE. 
aed0: 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65   ** used will be
aee0: 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
aef0: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
af00: 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a   on the RHS..  *
af10: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
af20: 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f  _CASE_SENSITIVE_
af30: 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28 20  LIKE: {.    if( 
af40: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
af50: 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
af60: 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c  ikeFunctions(db,
af70: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
af80: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a  an(zRight, 0));.
af90: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
afa0: 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  k;..#ifndef SQLI
afb0: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
afc0: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64  CK_ERROR_MAX.# d
afd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
afe0: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
aff0: 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69  OR_MAX 100.#endi
b000: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
b010: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
b020: 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67  _CHECK.  /* Prag
b030: 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  ma "quick_check"
b040: 20 69 73 20 72 65 64 75 63 65 64 20 76 65 72 73   is reduced vers
b050: 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74  ion of .  ** int
b060: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73  egrity_check des
b070: 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20  igned to detect 
b080: 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  most database co
b090: 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69  rruption.  ** wi
b0a0: 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68  thout most of th
b0b0: 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20  e overhead of a 
b0c0: 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63  full integrity-c
b0d0: 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  heck..  */.  cas
b0e0: 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52  e PragTyp_INTEGR
b0f0: 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20  ITY_CHECK: {.   
b100: 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c   int i, j, addr,
b110: 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a 20   mxErr;..    /* 
b120: 43 6f 64 65 20 74 68 61 74 20 61 70 70 65 61 72  Code that appear
b130: 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
b140: 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63 68  the integrity ch
b150: 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f  eck.  If no erro
b160: 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67 65  r.    ** message
b170: 73 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e 65  s have been gene
b180: 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b  rated, output OK
b190: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75 74  .  Otherwise out
b1a0: 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65  put the.    ** e
b1b0: 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20 20  rror message.   
b1c0: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63   */.    static c
b1d0: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
b1e0: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
b1f0: 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63  O(2);.    static
b200: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
b210: 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a  t endCode[] = {.
b220: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67        { OP_IfNeg
b230: 2c 20 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20  ,       1, 0,   
b240: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30       0},    /* 0
b250: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53   */.      { OP_S
b260: 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33  tring8,     0, 3
b270: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
b280: 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 1 */.      { 
b290: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
b2a0: 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c  3, 1,        0},
b2b0: 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74  .    };..    int
b2c0: 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69   isQuick = (sqli
b2d0: 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74  te3Tolower(zLeft
b2e0: 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20  [0])=='q');..   
b2f0: 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d   /* If the PRAGM
b300: 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66  A command was of
b310: 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d   the form "PRAGM
b320: 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79  A <db>.integrity
b330: 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20  _check",.    ** 
b340: 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20  then iDb is set 
b350: 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  to the index of 
b360: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 64 65  the database ide
b370: 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e  ntified by <db>.
b380: 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20  .    ** In this 
b390: 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72  case, the integr
b3a0: 69 74 79 20 6f 66 20 64 61 74 61 62 61 73 65 20  ity of database 
b3b0: 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69  iDb only is veri
b3c0: 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74  fied by.    ** t
b3d0: 68 65 20 56 44 42 45 20 63 72 65 61 74 65 64 20  he VDBE created 
b3e0: 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20  below..    **.  
b3f0: 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20    ** Otherwise, 
b400: 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77  if the command w
b410: 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d  as simply "PRAGM
b420: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
b430: 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50  k" (or.    ** "P
b440: 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63  RAGMA quick_chec
b450: 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73  k"), then iDb is
b460: 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68   set to 0. In th
b470: 69 73 20 63 61 73 65 2c 20 73 65 74 20 69 44 62  is case, set iDb
b480: 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65  .    ** to -1 he
b490: 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20  re, to indicate 
b4a0: 74 68 61 74 20 74 68 65 20 56 44 42 45 20 73 68  that the VDBE sh
b4b0: 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68 65 20  ould verify the 
b4c0: 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a  integrity.    **
b4d0: 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
b4e0: 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a   databases.  */.
b4f0: 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3e      assert( iDb>
b500: 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
b510: 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32  ( iDb==0 || pId2
b520: 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70  ->z );.    if( p
b530: 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20  Id2->z==0 ) iDb 
b540: 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  = -1;..    /* In
b550: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42  itialize the VDB
b560: 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20  E program */.   
b570: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
b580: 36 3b 0a 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c  6;.    setOneCol
b590: 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 69 6e 74 65  umnName(v, "inte
b5a0: 67 72 69 74 79 5f 63 68 65 63 6b 22 29 3b 0a 0a  grity_check");..
b5b0: 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 6d      /* Set the m
b5c0: 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75  aximum error cou
b5d0: 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20  nt */.    mxErr 
b5e0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  = SQLITE_INTEGRI
b5f0: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
b600: 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  AX;.    if( zRig
b610: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
b620: 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67  te3GetInt32(zRig
b630: 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20 20  ht, &mxErr);.   
b640: 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30 20     if( mxErr<=0 
b650: 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72 72  ){.        mxErr
b660: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
b670: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
b680: 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  MAX;.      }.   
b690: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
b6a0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
b6b0: 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20 31  nteger, mxErr, 1
b6c0: 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f  );  /* reg[1] ho
b6d0: 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74 20  lds errors left 
b6e0: 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e  */..    /* Do an
b6f0: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
b700: 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61 73   on each databas
b710: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f  e file */.    fo
b720: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
b730: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61  ; i++){.      Ha
b740: 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20  shElem *x;.     
b750: 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20   Hash *pTbls;.  
b760: 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b      int cnt = 0;
b770: 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49 54  ..      if( OMIT
b780: 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31 20  _TEMPDB && i==1 
b790: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
b7a0: 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26 20    if( iDb>=0 && 
b7b0: 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e 75  i!=iDb ) continu
b7c0: 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e;..      sqlite
b7d0: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
b7e0: 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20 20  a(pParse, i);.  
b7f0: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
b800: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
b810: 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a  OP_IfPos, 1); /*
b820: 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66 20   Halt if out of 
b830: 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20  errors */.      
b840: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
b850: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
b860: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
b870: 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
b880: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
b890: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
b8a0: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20  .      /* Do an 
b8b0: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
b8c0: 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20 20  of the B-Tree.  
b8d0: 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
b8e0: 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67  Begin by filling
b8f0: 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33 2c   registers 2, 3,
b900: 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72 6f   ... with the ro
b910: 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72 73  ot pages numbers
b920: 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c  .      ** for al
b930: 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  l tables and ind
b940: 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ices in the data
b950: 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  base..      */. 
b960: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
b970: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
b980: 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29 3b  eld(db, i, 0) );
b990: 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26  .      pTbls = &
b9a0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65  db->aDb[i].pSche
b9b0: 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20  ma->tblHash;.   
b9c0: 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48     for(x=sqliteH
b9d0: 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b  ashFirst(pTbls);
b9e0: 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68   x; x=sqliteHash
b9f0: 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
ba00: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
ba10: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
ba20: 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
ba30: 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20   *pIdx;.        
ba40: 69 66 28 20 48 61 73 52 6f 77 69 64 28 70 54 61  if( HasRowid(pTa
ba50: 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  b) ){.          
ba60: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ba70: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
ba80: 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63   pTab->tnum, 2+c
ba90: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56  nt);.          V
baa0: 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22  dbeComment((v, "
bab0: 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  %s", pTab->zName
bac0: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e  ));.          cn
bad0: 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
bae0: 20 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d         for(pIdx=
baf0: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
bb00: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
bb10: 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20  Next){.         
bb20: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bb30: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
bb40: 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b  , pIdx->tnum, 2+
bb50: 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  cnt);.          
bb60: 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20  VdbeComment((v, 
bb70: 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  "%s", pIdx->zNam
bb80: 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63  e));.          c
bb90: 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
bba0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
bbb0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66 66  * Make sure suff
bbc0: 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  icient number of
bbd0: 20 72 65 67 69 73 74 65 72 73 20 68 61 76 65 20   registers have 
bbe0: 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a  been allocated *
bbf0: 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  /.      pParse->
bc00: 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61 72  nMem = MAX( pPar
bc10: 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20  se->nMem, cnt+8 
bc20: 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20  );..      /* Do 
bc30: 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65 67  the b-tree integ
bc40: 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20  rity checks */. 
bc50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bc60: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74  AddOp3(v, OP_Int
bc70: 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74  egrityCk, 2, cnt
bc80: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
bc90: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
bca0: 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20 20 20  v, (u8)i);.     
bcb0: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
bcc0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
bcd0: 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65  IsNull, 2); Vdbe
bce0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
bcf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bd00: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
bd10: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20  g8, 0, 3, 0,.   
bd20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72        sqlite3MPr
bd30: 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e  intf(db, "*** in
bd40: 20 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a   database %s ***
bd50: 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  \n", db->aDb[i].
bd60: 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20  zName),.        
bd70: 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20   P4_DYNAMIC);.  
bd80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bd90: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76 65  ddOp3(v, OP_Move
bda0: 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20 20  , 2, 4, 1);.    
bdb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
bdc0: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
bdd0: 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20  , 4, 3, 2);.    
bde0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
bdf0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
be00: 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20  Row, 2, 1);.    
be10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
be20: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
be30: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
be40: 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69  ure all the indi
be50: 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63  ces are construc
be60: 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20  ted correctly.. 
be70: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f       */.      fo
be80: 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(x=sqliteHashFi
be90: 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26 26  rst(pTbls); x &&
bea0: 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c   !isQuick; x=sql
beb0: 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b  iteHashNext(x)){
bec0: 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a  .        Table *
bed0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
bee0: 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20  hData(x);.      
bef0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a    Index *pIdx, *
bf00: 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  pPk;.        Ind
bf10: 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b 0a  ex *pPrior = 0;.
bf20: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70          int loop
bf30: 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  Top;.        int
bf40: 20 69 44 61 74 61 43 75 72 2c 20 69 49 64 78 43   iDataCur, iIdxC
bf50: 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ur;.        int 
bf60: 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20  r1 = -1;..      
bf70: 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64    if( pTab->pInd
bf80: 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ex==0 ) continue
bf90: 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d 20  ;.        pPk = 
bfa0: 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 3f  HasRowid(pTab) ?
bfb0: 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69 6d   0 : sqlite3Prim
bfc0: 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62  aryKeyIndex(pTab
bfd0: 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72 20  );.        addr 
bfe0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
bff0: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
c000: 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66   1);  /* Stop if
c010: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
c020: 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 43 6f  /.        VdbeCo
c030: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
c040: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c050: 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
c060: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
c070: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
c080: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20  ere(v, addr);.  
c090: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
c0a0: 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61 72  rCacheClear(pPar
c0b0: 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  se);.        sql
c0c0: 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
c0d0: 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c 20  Indices(pParse, 
c0e0: 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  pTab, OP_OpenRea
c0f0: 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d,.             
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c110: 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69 44 61        1, 0, &iDa
c120: 74 61 43 75 72 2c 20 26 69 49 64 78 43 75 72 29  taCur, &iIdxCur)
c130: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c140: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c150: 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37 29  P_Integer, 0, 7)
c160: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  ;.        for(j=
c170: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
c180: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
c190: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
c1a0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  +){.          sq
c1b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c1c0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
c1d0: 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78  , 8+j); /* index
c1e0: 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72   entries counter
c1f0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
c200: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
c210: 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65 2d  em = MAX(pParse-
c220: 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20  >nMem, 8+j);.   
c230: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c240: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77  AddOp2(v, OP_Rew
c250: 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20 30  ind, iDataCur, 0
c260: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
c270: 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70  v);.        loop
c280: 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Top = sqlite3Vdb
c290: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
c2a0: 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20  dImm, 7, 1);.   
c2b0: 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
c2c0: 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c  hat all NOT NULL
c2d0: 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20   columns really 
c2e0: 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a  are NOT NULL */.
c2f0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
c300: 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a   j<pTab->nCol; j
c310: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  ++){.          c
c320: 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20  har *zErr;.     
c330: 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a       int jmp2, j
c340: 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mp3;.          i
c350: 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65  f( j==pTab->iPKe
c360: 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  y ) continue;.  
c370: 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62          if( pTab
c380: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c  ->aCol[j].notNul
c390: 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  l==0 ) continue;
c3a0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
c3b0: 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
c3c0: 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54  umnOfTable(v, pT
c3d0: 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a 2c  ab, iDataCur, j,
c3e0: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
c3f0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
c400: 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50  P5(v, OPFLAG_TYP
c410: 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20 20  EOFARG);.       
c420: 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65     jmp2 = sqlite
c430: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
c440: 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56  P_NotNull, 3); V
c450: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
c460: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c470: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c480: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
c490: 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65  ; /* Decrement e
c4a0: 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20  rror limit */.  
c4b0: 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20 73          zErr = s
c4c0: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
c4d0: 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  , "NULL value in
c4e0: 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a   %s.%s", pTab->z
c4f0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c510: 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a      pTab->aCol[j
c520: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
c530: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c540: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
c550: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45  ng8, 0, 3, 0, zE
c560: 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b  rr, P4_DYNAMIC);
c570: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
c580: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c590: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c  OP_ResultRow, 3,
c5a0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a   1);.          j
c5b0: 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp3 = sqlite3Vdb
c5c0: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
c5d0: 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76  Pos, 1); VdbeCov
c5e0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
c5f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c600: 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp0(v, OP_Halt
c610: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
c620: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
c630: 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20  (v, jmp2);.     
c640: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c650: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 33  JumpHere(v, jmp3
c660: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
c670: 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65       /* Validate
c680: 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 66   index entries f
c690: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  or the current r
c6a0: 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f  ow */.        fo
c6b0: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
c6c0: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
c6d0: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
c6e0: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
c6f0: 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33    int jmp2, jmp3
c700: 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20  , jmp4, jmp5;.  
c710: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55 6e          int ckUn
c720: 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iq = sqlite3Vdbe
c730: 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20  MakeLabel(v);.  
c740: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d          if( pPk=
c750: 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65  =pIdx ) continue
c760: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20 3d  ;.          r1 =
c770: 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
c780: 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c  IndexKey(pParse,
c790: 20 70 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c   pIdx, iDataCur,
c7a0: 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20   0, 0, &jmp3,.  
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7d0: 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29       pPrior, r1)
c7e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 72 69  ;.          pPri
c7f0: 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20  or = pIdx;.     
c800: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c810: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
c820: 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f  Imm, 8+j, 1);  /
c830: 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72  * increment entr
c840: 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20  y count */.     
c850: 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
c860: 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e 74  hat an index ent
c870: 72 79 20 65 78 69 73 74 73 20 66 6f 72 20 74 68  ry exists for th
c880: 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20  e current table 
c890: 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  row */.         
c8a0: 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56   jmp2 = sqlite3V
c8b0: 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
c8c0: 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75  OP_Found, iIdxCu
c8d0: 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c  r+j, ckUniq, r1,
c8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c900: 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f         pIdx->nCo
c910: 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65 72  lumn); VdbeCover
c920: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
c930: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c940: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
c950: 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63  , 1, -1); /* Dec
c960: 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d  rement error lim
c970: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
c980: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
c990: 74 72 69 6e 67 28 76 2c 20 33 2c 20 22 72 6f 77  tring(v, 3, "row
c9a0: 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   ");.          s
c9b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
c9c0: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37  (v, OP_Concat, 7
c9d0: 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
c9e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
c9f0: 61 64 53 74 72 69 6e 67 28 76 2c 20 34 2c 20 22  adString(v, 4, "
ca00: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
ca10: 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20  dex ");.        
ca20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ca30: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
ca40: 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 4, 3, 3);.    
ca50: 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c        jmp5 = sql
ca60: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
ca70: 6e 67 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e 7a  ng(v, 4, pIdx->z
ca80: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20  Name);.         
ca90: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
caa0: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
cab0: 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
cac0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cad0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cae0: 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20  ultRow, 3, 1);. 
caf0: 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20           jmp4 = 
cb00: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cb10: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
cb20: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
cb30: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
cb40: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28  lite3VdbeAddOp0(
cb50: 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20  v, OP_Halt);.   
cb60: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cb70: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
cb80: 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f  p2);.          /
cb90: 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64  * For UNIQUE ind
cba0: 65 78 65 73 2c 20 76 65 72 69 66 79 20 74 68 61  exes, verify tha
cbb0: 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79  t only one entry
cbc0: 20 65 78 69 73 74 73 20 77 69 74 68 20 74 68 65   exists with the
cbd0: 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75  .          ** cu
cbe0: 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20  rrent key.  The 
cbf0: 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65 20  entry is unique 
cc00: 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d  if (1) any colum
cc10: 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20  n is NULL.      
cc20: 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68      ** or (2) th
cc30: 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73  e next entry has
cc40: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79   a different key
cc50: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66   */.          if
cc60: 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  ( IsUniqueIndex(
cc70: 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20  pIdx) ){.       
cc80: 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20       int uniqOk 
cc90: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b  = sqlite3VdbeMak
cca0: 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20  eLabel(v);.     
ccb0: 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b         int jmp6;
ccc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
ccd0: 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20   kk;.           
cce0: 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49   for(kk=0; kk<pI
ccf0: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b  dx->nKeyCol; kk+
cd00: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
cd10: 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64    int iCol = pId
cd20: 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b  x->aiColumn[kk];
cd30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  .              a
cd40: 73 73 65 72 74 28 20 69 43 6f 6c 21 3d 58 4e 5f  ssert( iCol!=XN_
cd50: 52 4f 57 49 44 20 26 26 20 69 43 6f 6c 3c 70 54  ROWID && iCol<pT
cd60: 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20  ab->nCol );.    
cd70: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 43            if( iC
cd80: 6f 6c 3e 3d 30 20 26 26 20 70 54 61 62 2d 3e 61  ol>=0 && pTab->a
cd90: 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c  Col[iCol].notNul
cda0: 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  l ) continue;.  
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
cdc0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cdd0: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b   OP_IsNull, r1+k
cde0: 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20  k, uniqOk);.    
cdf0: 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f            VdbeCo
ce00: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
ce10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ce20: 20 20 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69       jmp6 = sqli
ce30: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
ce40: 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75   OP_Next, iIdxCu
ce50: 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61  r+j); VdbeCovera
ce60: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
ce70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f     sqlite3VdbeGo
ce80: 74 6f 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20  to(v, uniqOk);. 
ce90: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
cea0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
ceb0: 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20 20  , jmp6);.       
cec0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ced0: 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f  AddOp4Int(v, OP_
cee0: 49 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a  IdxGT, iIdxCur+j
cef0: 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20  , uniqOk, r1,.  
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
cf20: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56  Idx->nKeyCol); V
cf30: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
cf50: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cf60: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
cf70: 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
cf80: 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
cfa0: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
cfb0: 67 28 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75 6e 69  g(v, 3, "non-uni
cfc0: 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64  que entry in ind
cfd0: 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ex ");.         
cfe0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f     sqlite3VdbeGo
cff0: 74 6f 28 76 2c 20 6a 6d 70 35 29 3b 0a 20 20 20  to(v, jmp5);.   
d000: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d010: 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c  VdbeResolveLabel
d020: 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20  (v, uniqOk);.   
d030: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
d040: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
d050: 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b  mpHere(v, jmp4);
d060: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d070: 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
d080: 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d  Label(pParse, jm
d090: 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p3);.        }. 
d0a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d0b0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e  beAddOp2(v, OP_N
d0c0: 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c  ext, iDataCur, l
d0d0: 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76  oopTop); VdbeCov
d0e0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d0f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
d100: 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70  pHere(v, loopTop
d110: 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  -1);.#ifndef SQL
d120: 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
d130: 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69  UNT.        sqli
d140: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
d150: 67 28 76 2c 20 32 2c 20 22 77 72 6f 6e 67 20 23  g(v, 2, "wrong #
d160: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
d170: 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20  ndex ");.       
d180: 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
d190: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
d1a0: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
d1b0: 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
d1c0: 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49       if( pPk==pI
d1d0: 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  dx ) continue;. 
d1e0: 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
d1f0: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
d200: 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20  ntAddr(v);.     
d210: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d220: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
d230: 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20  os, 1, addr+2); 
d240: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d250: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d260: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d270: 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
d280: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d290: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d2a0: 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72  P_Count, iIdxCur
d2b0: 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  +j, 3);.        
d2c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d2d0: 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b  Op3(v, OP_Eq, 8+
d2e0: 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56  j, addr+8, 3); V
d2f0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
d300: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d310: 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
d320: 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29   SQLITE_NOTNULL)
d330: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d340: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d350: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
d360: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  1);.          sq
d370: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
d380: 69 6e 67 28 76 2c 20 33 2c 20 70 49 64 78 2d 3e  ing(v, 3, pIdx->
d390: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
d3a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d3b0: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
d3c0: 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20  , 3, 2, 7);.    
d3d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d3e0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
d3f0: 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a  sultRow, 7, 1);.
d400: 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66          }.#endif
d410: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
d420: 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20  BTREECOUNT */.  
d430: 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20      } .    }.   
d440: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
d450: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
d460: 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64  ArraySize(endCod
d470: 65 29 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e  e), endCode, iLn
d480: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
d490: 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64  beChangeP3(v, ad
d4a0: 64 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20  dr, -mxErr);.   
d4b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
d4c0: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
d4d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
d4e0: 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 31  angeP4(v, addr+1
d4f0: 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49  , "ok", P4_STATI
d500: 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  C);.  }.  break;
d510: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
d520: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
d530: 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64  _CHECK */..#ifnd
d540: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
d550: 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  TF16.  /*.  **  
d560: 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67   PRAGMA encoding
d570: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65  .  **   PRAGMA e
d580: 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38  ncoding = "utf-8
d590: 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d  "|"utf-16"|"utf-
d5a0: 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22  16le"|"utf-16be"
d5b0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74  .  **.  ** In it
d5c0: 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68  s first form, th
d5d0: 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e  is pragma return
d5e0: 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  s the encoding o
d5f0: 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20  f the main.  ** 
d600: 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
d610: 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74   database is not
d620: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74   initialized, it
d630: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
d640: 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  now..  **.  ** T
d650: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f  he second form o
d660: 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73  f this pragma is
d670: 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20   a no-op if the 
d680: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
d690: 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20  le.  ** has not 
d6a0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69  already been ini
d6b0: 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69  tialized. In thi
d6c0: 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74  s case it sets t
d6d0: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
d6e0: 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69  encoding that wi
d6f0: 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ll be used for t
d700: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
d710: 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66   file if a new f
d720: 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61  ile.  ** is crea
d730: 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74  ted. If an exist
d740: 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73  ing main databas
d750: 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64  e file is opened
d760: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
d770: 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
d780: 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78  oding for the ex
d790: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
d7a0: 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20  is used..  ** . 
d7b0: 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73   ** In all cases
d7c0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63   new databases c
d7d0: 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65  reated using the
d7e0: 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20   ATTACH command 
d7f0: 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64  are.  ** created
d800: 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
d810: 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
d820: 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61  coding as the ma
d830: 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a  in database. If.
d840: 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61    ** the main da
d850: 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62  tabase has not b
d860: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
d870: 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77  and/or created w
d880: 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20  hen ATTACH.  ** 
d890: 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69  is executed, thi
d8a0: 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65  s is done before
d8b0: 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72   the ATTACH oper
d8c0: 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ation..  **.  **
d8d0: 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66   In the second f
d8e0: 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20  orm this pragma 
d8f0: 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e  sets the text en
d900: 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65  coding to be use
d910: 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61  d in.  ** new da
d920: 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65  tabase files cre
d930: 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20  ated using this 
d940: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
d950: 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a   It is only.  **
d960: 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b   useful if invok
d970: 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  ed immediately a
d980: 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61  fter the main da
d990: 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20  tabase i.  */.  
d9a0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43  case PragTyp_ENC
d9b0: 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61  ODING: {.    sta
d9c0: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
d9d0: 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20   EncName {.     
d9e0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20   char *zName;.  
d9f0: 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20      u8 enc;.    
da00: 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  } encnames[] = {
da10: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c  .      { "UTF8",
da20: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
da30: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
da40: 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53   { "UTF-8",    S
da50: 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20  QLITE_UTF8      
da60: 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
da70: 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a   element [1] */.
da80: 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c        { "UTF-16l
da90: 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  e", SQLITE_UTF16
daa0: 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75  LE     },  /* Mu
dab0: 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32  st be element [2
dac0: 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
dad0: 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f  F-16be", SQLITE_
dae0: 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20  UTF16BE     },  
daf0: 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
db00: 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [3] */.      
db10: 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51  { "UTF16le",  SQ
db20: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20  LITE_UTF16LE    
db30: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
db40: 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55  16be",  SQLITE_U
db50: 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20  TF16BE     },.  
db60: 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20      { "UTF-16", 
db70: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
db80: 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54       }, /* SQLIT
db90: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f  E_UTF16NATIVE */
dba0: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 22  .      { "UTF16"
dbb0: 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20  ,    0          
dbc0: 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51          }, /* SQ
dbd0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
dbe0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30   */.      { 0, 0
dbf0: 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f   }.    };.    co
dc00: 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61  nst struct EncNa
dc10: 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66  me *pEnc;.    if
dc20: 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20  ( !zRight ){    
dc30: 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  /* "PRAGMA encod
dc40: 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66  ing" */.      if
dc50: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
dc60: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
dc70: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
dc80: 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63       assert( enc
dc90: 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46  names[SQLITE_UTF
dca0: 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  8].enc==SQLITE_U
dcb0: 54 46 38 20 29 3b 0a 20 20 20 20 20 20 61 73 73  TF8 );.      ass
dcc0: 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51  ert( encnames[SQ
dcd0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e  LITE_UTF16LE].en
dce0: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  c==SQLITE_UTF16L
dcf0: 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
dd00: 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49  t( encnames[SQLI
dd10: 54 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d  TE_UTF16BE].enc=
dd20: 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
dd30: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  );.      returnS
dd40: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 65 6e  ingleText(v, "en
dd50: 63 6f 64 69 6e 67 22 2c 20 65 6e 63 6e 61 6d 65  coding", encname
dd60: 73 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62  s[ENC(pParse->db
dd70: 29 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d  )].zName);.    }
dd80: 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20  else{           
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dda0: 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
ddb0: 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20   = XXX" */.     
ddc0: 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20   /* Only change 
ddd0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c  the value of sql
dde0: 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64  ite.enc if the d
ddf0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69  atabase handle i
de00: 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69  s not.      ** i
de10: 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74  nitialized. If t
de20: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
de30: 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77   exists, the new
de40: 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75   sqlite.enc valu
de50: 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20  e.      ** will 
de60: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  be overwritten w
de70: 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69  hen the schema i
de80: 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49  s next loaded. I
de90: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20  f it does not.  
dea0: 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65      ** already e
deb0: 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62  xists, it will b
dec0: 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65  e created to use
ded0: 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e   the new encodin
dee0: 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a  g value..      *
def0: 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20 20  /.      if( .   
df00: 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f 70       !(DbHasProp
df10: 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53  erty(db, 0, DB_S
df20: 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c  chemaLoaded)) ||
df30: 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73 50   .        DbHasP
df40: 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44  roperty(db, 0, D
df50: 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20  B_Empty) .      
df60: 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
df70: 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d  Enc=&encnames[0]
df80: 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70  ; pEnc->zName; p
df90: 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  Enc++){.        
dfa0: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
dfb0: 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
dfc0: 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a  pEnc->zName) ){.
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 53 43 48 45              SCHE
dfe0: 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e 43  MA_ENC(db) = ENC
dff0: 28 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20 20  (db) =.         
e000: 20 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63         pEnc->enc
e010: 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53   ? pEnc->enc : S
e020: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
e030: 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  E;.            b
e040: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
e050: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
e060: 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a      if( !pEnc->z
e070: 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Name ){.        
e080: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
e090: 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70  g(pParse, "unsup
e0a0: 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a  ported encoding:
e0b0: 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20   %s", zRight);. 
e0c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
e0d0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
e0e0: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
e0f0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
e100: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
e110: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
e120: 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20  ERSION_PRAGMAS. 
e130: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
e140: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68  A [database.]sch
e150: 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ema_version.  **
e160: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
e170: 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ase.]schema_vers
e180: 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  ion = <integer>.
e190: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
e1a0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73  MA [database.]us
e1b0: 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  er_version.  ** 
e1c0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
e1d0: 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e  se.]user_version
e1e0: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
e1f0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
e200: 5b 64 61 74 61 62 61 73 65 2e 5d 66 72 65 65 6c  [database.]freel
e210: 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74  ist_count = <int
e220: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
e230: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
e240: 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f  se.]application_
e250: 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  id.  **   PRAGMA
e260: 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c   [database.]appl
e270: 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e  ication_id = <in
e280: 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
e290: 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73 63   The pragma's sc
e2a0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64  hema_version and
e2b0: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72   user_version ar
e2c0: 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72  e used to set or
e2d0: 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61   get.  ** the va
e2e0: 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  lue of the schem
e2f0: 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73  a-version and us
e300: 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70  er-version, resp
e310: 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20  ectively. Both. 
e320: 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
e330: 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75  ersion and the u
e340: 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20  ser-version are 
e350: 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  32-bit signed in
e360: 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72  tegers.  ** stor
e370: 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ed in the databa
e380: 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a  se header..  **.
e390: 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d    ** The schema-
e3a0: 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c  cookie is usuall
e3b0: 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74  y only manipulat
e3c0: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
e3d0: 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a   SQLite. It.  **
e3e0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
e3f0: 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76  by SQLite whenev
e400: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
e410: 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69  schema is modifi
e420: 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61  ed (by.  ** crea
e430: 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67  ting or dropping
e440: 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65   a table or inde
e450: 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76  x). The schema v
e460: 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62  ersion is used b
e470: 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61  y.  ** SQLite ea
e480: 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20  ch time a query 
e490: 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65  is executed to e
e4a0: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69  nsure that the i
e4b0: 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20  nternal cache.  
e4c0: 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ** of the schema
e4d0: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69   used when compi
e4e0: 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65  ling the SQL que
e4f0: 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  ry matches the s
e500: 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68  chema of.  ** th
e510: 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e  e database again
e520: 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  st which the com
e530: 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61  piled query is a
e540: 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64  ctually executed
e550: 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e  ..  ** Subvertin
e560: 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d  g this mechanism
e570: 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d   by using "PRAGM
e580: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
e590: 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a  " to modify.  **
e5a0: 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
e5b0: 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c  ion is potential
e5c0: 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64  ly dangerous and
e5d0: 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f   may lead to pro
e5e0: 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65  gram.  ** crashe
e5f0: 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f  s or database co
e600: 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69  rruption. Use wi
e610: 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a  th caution!.  **
e620: 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76  .  ** The user-v
e630: 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73  ersion is not us
e640: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
e650: 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20   SQLite. It may 
e660: 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  be used by.  ** 
e670: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72  applications for
e680: 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20   any purpose..  
e690: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
e6a0: 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20  p_HEADER_VALUE: 
e6b0: 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69  {.    int iCooki
e6c0: 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72  e = pPragma->iAr
e6d0: 67 3b 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6f  g;  /* Which coo
e6e0: 6b 69 65 20 74 6f 20 72 65 61 64 20 6f 72 20 77  kie to read or w
e6f0: 72 69 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69  rite */.    sqli
e700: 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65  te3VdbeUsesBtree
e710: 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66  (v, iDb);.    if
e720: 28 20 7a 52 69 67 68 74 20 26 26 20 28 70 50 72  ( zRight && (pPr
e730: 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20  agma->mPragFlag 
e740: 26 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64 4f  & PragFlag_ReadO
e750: 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  nly)==0 ){.     
e760: 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73 70   /* Write the sp
e770: 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76  ecified cookie v
e780: 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74  alue */.      st
e790: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
e7a0: 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b  pList setCookie[
e7b0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20  ] = {.        { 
e7c0: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
e7d0: 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
e7e0: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
e7f0: 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20    { OP_Integer, 
e800: 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30         0,  1,  0
e810: 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
e820: 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f        { OP_SetCo
e830: 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30  okie,      0,  0
e840: 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a  ,  1},    /* 2 *
e850: 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  /.      };.     
e860: 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69   int addr = sqli
e870: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
e880: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
e890: 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f  tCookie), setCoo
e8a0: 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  kie, 0);.      s
e8b0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
e8c0: 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
e8d0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
e8e0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
e8f0: 64 64 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74  ddr+1, sqlite3At
e900: 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
e910: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
e920: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32  angeP1(v, addr+2
e930: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
e940: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
e950: 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f  2(v, addr+2, iCo
e960: 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  okie);.    }else
e970: 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20  {.      /* Read 
e980: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
e990: 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20  okie value */.  
e9a0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
e9b0: 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64   VdbeOpList read
e9c0: 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20  Cookie[] = {.   
e9d0: 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61       { OP_Transa
e9e0: 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30  ction,     0,  0
e9f0: 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a  ,  0},    /* 0 *
ea00: 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52  /.        { OP_R
ea10: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20  eadCookie,      
ea20: 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  1,  0},    /
ea30: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 1 */.        {
ea40: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20   OP_ResultRow,  
ea50: 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a       1,  1,  0}.
ea60: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69        };.      i
ea70: 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65  nt addr = sqlite
ea80: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
ea90: 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64  , ArraySize(read
eaa0: 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f  Cookie), readCoo
eab0: 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  kie, 0);.      s
eac0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
ead0: 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
eae0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
eaf0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
eb00: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
eb10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
eb20: 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b 31  angeP3(v, addr+1
eb30: 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20  , iCookie);.    
eb40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
eb50: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
eb60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
eb70: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
eb80: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a   COLNAME_NAME, z
eb90: 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41  Left, SQLITE_TRA
eba0: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20  NSIENT);.    }. 
ebb0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
ebc0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
ebd0: 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
ebe0: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
ebf0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ec00: 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
ec10: 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  IAGS.  /*.  **  
ec20: 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f   PRAGMA compile_
ec30: 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a  options.  **.  *
ec40: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
ec50: 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c  es of all compil
ec60: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75  e-time options u
ec70: 73 65 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c  sed in this buil
ec80: 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69  d,.  ** one opti
ec90: 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f  on per row..  */
eca0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
ecb0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a  COMPILE_OPTIONS:
ecc0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30   {.    int i = 0
ecd0: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
ece0: 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 70 50 61 72   *zOpt;.    pPar
ecf0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20  se->nMem = 1;.  
ed00: 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61    setOneColumnNa
ed10: 6d 65 28 76 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f  me(v, "compile_o
ed20: 70 74 69 6f 6e 22 29 3b 0a 20 20 20 20 77 68 69  ption");.    whi
ed30: 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69  le( (zOpt = sqli
ed40: 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
ed50: 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29  n_get(i++))!=0 )
ed60: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
ed70: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
ed80: 20 31 2c 20 7a 4f 70 74 29 3b 0a 20 20 20 20 20   1, zOpt);.     
ed90: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
eda0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
edb0: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d  ow, 1, 1);.    }
edc0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
edd0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
ede0: 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
edf0: 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e  N_DIAGS */..#ifn
ee00: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ee10: 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WAL.  /*.  **   
ee20: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
ee30: 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74  .]wal_checkpoint
ee40: 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c   = passive|full|
ee50: 72 65 73 74 61 72 74 7c 74 72 75 6e 63 61 74 65  restart|truncate
ee60: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b  .  **.  ** Check
ee70: 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62 61  point the databa
ee80: 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  se..  */.  case 
ee90: 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43  PragTyp_WAL_CHEC
eea0: 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 73 74  KPOINT: {.    st
eeb0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
eec0: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 62 75  *azCol[] = { "bu
eed0: 73 79 22 2c 20 22 6c 6f 67 22 2c 20 22 63 68 65  sy", "log", "che
eee0: 63 6b 70 6f 69 6e 74 65 64 22 20 7d 3b 0a 20 20  ckpointed" };.  
eef0: 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49 64    int iBt = (pId
ef00: 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f  2->z?iDb:SQLITE_
ef10: 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a 20  MAX_ATTACHED);. 
ef20: 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53     int eMode = S
ef30: 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
ef40: 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69 66  _PASSIVE;.    if
ef50: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
ef60: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
ef70: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66 75  ICmp(zRight, "fu
ef80: 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ll")==0 ){.     
ef90: 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54     eMode = SQLIT
efa0: 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c  E_CHECKPOINT_FUL
efb0: 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  L;.      }else i
efc0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
efd0: 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74 61  p(zRight, "resta
efe0: 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  rt")==0 ){.     
eff0: 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54     eMode = SQLIT
f000: 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
f010: 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c 73  TART;.      }els
f020: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
f030: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 74 72  ICmp(zRight, "tr
f040: 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a 20  uncate")==0 ){. 
f050: 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53         eMode = S
f060: 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
f070: 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20 20 20  _TRUNCATE;.     
f080: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74   }.    }.    set
f090: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
f0a0: 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73  , 3, azCol);  as
f0b0: 73 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53 69  sert( 3==ArraySi
f0c0: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
f0d0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
f0e0: 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  3;.    sqlite3Vd
f0f0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
f100: 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20  heckpoint, iBt, 
f110: 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20 73  eMode, 1);.    s
f120: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f130: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
f140: 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62  , 1, 3);.  }.  b
f150: 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  reak;..  /*.  **
f160: 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75     PRAGMA wal_au
f170: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a  tocheckpoint.  *
f180: 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61  *   PRAGMA wal_a
f190: 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20  utocheckpoint = 
f1a0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66  N.  **.  ** Conf
f1b0: 69 67 75 72 65 20 61 20 64 61 74 61 62 61 73 65  igure a database
f1c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61   connection to a
f1d0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65  utomatically che
f1e0: 63 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61  ckpoint a databa
f1f0: 73 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63  se.  ** after ac
f200: 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61  cumulating N fra
f210: 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20  mes in the log. 
f220: 4f 72 20 71 75 65 72 79 20 66 6f 72 20 74 68 65  Or query for the
f230: 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20   current value. 
f240: 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20   ** of N..  */. 
f250: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41   case PragTyp_WA
f260: 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54  L_AUTOCHECKPOINT
f270: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
f280: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
f290: 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63  te3_wal_autochec
f2a0: 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69 74  kpoint(db, sqlit
f2b0: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b  e3Atoi(zRight));
f2c0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
f2d0: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 77  nSingleInt(v, "w
f2e0: 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
f2f0: 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e  t", .       db->
f300: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71  xWalCallback==sq
f310: 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
f320: 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20  ook ? .         
f330: 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f    SQLITE_PTR_TO_
f340: 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29  INT(db->pWalArg)
f350: 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65   : 0);.  }.  bre
f360: 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  ak;.#endif..  /*
f370: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68  .  **  PRAGMA sh
f380: 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a  rink_memory.  **
f390: 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  .  ** IMPLEMENTA
f3a0: 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35  TION-OF: R-23445
f3b0: 2d 34 36 31 30 39 20 54 68 69 73 20 70 72 61 67  -46109 This prag
f3c0: 6d 61 20 63 61 75 73 65 73 20 74 68 65 20 64 61  ma causes the da
f3d0: 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e  tabase.  ** conn
f3e0: 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20  ection on which 
f3f0: 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f  it is invoked to
f400: 20 66 72 65 65 20 75 70 20 61 73 20 6d 75 63 68   free up as much
f410: 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20 20   memory as it.  
f420: 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69  ** can, by calli
f430: 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ng sqlite3_db_re
f440: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a  lease_memory()..
f450: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f460: 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52  Typ_SHRINK_MEMOR
f470: 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  Y: {.    sqlite3
f480: 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
f490: 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61  ry(db);.    brea
f4a0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
f4b0: 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f  *   PRAGMA busy_
f4c0: 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50  timeout.  **   P
f4d0: 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f  RAGMA busy_timeo
f4e0: 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ut = N.  **.  **
f4f0: 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75   Call sqlite3_bu
f500: 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e  sy_timeout(db, N
f510: 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63  ).  Return the c
f520: 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76  urrent timeout v
f530: 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65  alue.  ** if one
f540: 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20   is set.  If no 
f550: 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20  busy handler or 
f560: 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79  a different busy
f570: 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a   handler is set.
f580: 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72    ** then 0 is r
f590: 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e  eturned.  Settin
f5a0: 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f  g the busy_timeo
f5b0: 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74  ut to 0 or negat
f5c0: 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  ive.  ** disable
f5d0: 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20  s the timeout.. 
f5e0: 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61   */.  /*case Pra
f5f0: 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
f600: 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20  T*/ default: {. 
f610: 20 20 20 61 73 73 65 72 74 28 20 70 50 72 61 67     assert( pPrag
f620: 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50 72  ma->ePragTyp==Pr
f630: 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
f640: 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  UT );.    if( zR
f650: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
f660: 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
f670: 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  ut(db, sqlite3At
f680: 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
f690: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
f6a0: 67 6c 65 49 6e 74 28 76 2c 20 22 74 69 6d 65 6f  gleInt(v, "timeo
f6b0: 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54 69  ut",  db->busyTi
f6c0: 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  meout);.    brea
f6d0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
f6e0: 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f  *   PRAGMA soft_
f6f0: 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20  heap_limit.  ** 
f700: 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65    PRAGMA soft_he
f710: 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a  ap_limit = N.  *
f720: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
f730: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33 34  ATION-OF: R-2634
f740: 33 2d 34 35 39 33 30 20 54 68 69 73 20 70 72 61  3-45930 This pra
f750: 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74 68 65 0a  gma invokes the.
f760: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66    ** sqlite3_sof
f770: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 29  t_heap_limit64()
f780: 20 69 6e 74 65 72 66 61 63 65 20 77 69 74 68 20   interface with 
f790: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 4e 2c 20  the argument N, 
f7a0: 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20 73 70 65  if N is.  ** spe
f7b0: 63 69 66 69 65 64 20 61 6e 64 20 69 73 20 61 20  cified and is a 
f7c0: 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  non-negative int
f7d0: 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c 45  eger..  ** IMPLE
f7e0: 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
f7f0: 36 34 34 35 31 2d 30 37 31 36 33 20 54 68 65 20  64451-07163 The 
f800: 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20  soft_heap_limit 
f810: 70 72 61 67 6d 61 20 61 6c 77 61 79 73 0a 20 20  pragma always.  
f820: 2a 2a 20 72 65 74 75 72 6e 73 20 74 68 65 20 73  ** returns the s
f830: 61 6d 65 20 69 6e 74 65 67 65 72 20 74 68 61 74  ame integer that
f840: 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e   would be return
f850: 65 64 20 62 79 20 74 68 65 0a 20 20 2a 2a 20 73  ed by the.  ** s
f860: 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
f870: 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20 43 2d 6c  _limit64(-1) C-l
f880: 61 6e 67 75 61 67 65 20 66 75 6e 63 74 69 6f 6e  anguage function
f890: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
f8a0: 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
f8b0: 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c  LIMIT: {.    sql
f8c0: 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20  ite3_int64 N;.  
f8d0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20    if( zRight && 
f8e0: 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
f8f0: 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29  oI64(zRight, &N)
f900: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
f910: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66       sqlite3_sof
f920: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e  t_heap_limit64(N
f930: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
f940: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
f950: 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  "soft_heap_limit
f960: 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74  ",  sqlite3_soft
f970: 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31  _heap_limit64(-1
f980: 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
f990: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
f9a0: 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a 20  PRAGMA threads. 
f9b0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72   **   PRAGMA thr
f9c0: 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  eads = N.  **.  
f9d0: 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65  ** Configure the
f9e0: 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
f9f0: 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61 64  of worker thread
fa00: 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e  s.  Return the n
fa10: 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c  ew.  ** maximum,
fa20: 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
fa30: 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75 65 73  less than reques
fa40: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
fa50: 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44 53   PragTyp_THREADS
fa60: 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
fa70: 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28  int64 N;.    if(
fa80: 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26 20   zRight.     && 
fa90: 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
faa0: 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29  oI64(zRight, &N)
fab0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  ==SQLITE_OK.    
fac0: 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a   && N>=0.    ){.
fad0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
fae0: 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c  mit(db, SQLITE_L
faf0: 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
fb00: 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78 37  ADS, (int)(N&0x7
fb10: 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20 7d  fffffff));.    }
fb20: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
fb30: 65 49 6e 74 28 76 2c 20 22 74 68 72 65 61 64 73  eInt(v, "threads
fb40: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
fb50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c         sqlite3_l
fb60: 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  imit(db, SQLITE_
fb70: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
fb80: 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20  EADS, -1));.    
fb90: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20  break;.  }..#if 
fba0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
fbb0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
fbc0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
fbd0: 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74  /*.  ** Report t
fbe0: 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
fbf0: 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f   of file logs fo
fc00: 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a  r all databases.
fc10: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
fc20: 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a  Typ_LOCK_STATUS:
fc30: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
fc40: 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20  nst char *const 
fc50: 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b  azLockName[] = {
fc60: 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64  .      "unlocked
fc70: 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72 65  ", "shared", "re
fc80: 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e  served", "pendin
fc90: 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a  g", "exclusive".
fca0: 20 20 20 20 7d 3b 0a 20 20 20 20 73 74 61 74 69      };.    stati
fcb0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
fcc0: 43 6f 6c 5b 5d 20 3d 20 7b 20 22 64 61 74 61 62  Col[] = { "datab
fcd0: 61 73 65 22 2c 20 22 73 74 61 74 75 73 22 20 7d  ase", "status" }
fce0: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
fcf0: 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d   setAllColumnNam
fd00: 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f 6c 29 3b  es(v, 2, azCol);
fd10: 20 61 73 73 65 72 74 28 20 32 3d 3d 41 72 72 61   assert( 2==Arra
fd20: 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a  ySize(azCol) );.
fd30: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
fd40: 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d   = 2;.    for(i=
fd50: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
fd60: 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20  +){.      Btree 
fd70: 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73  *pBt;.      cons
fd80: 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d  t char *zState =
fd90: 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20   "unknown";.    
fda0: 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69    int j;.      i
fdb0: 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  f( db->aDb[i].zN
fdc0: 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ame==0 ) continu
fdd0: 65 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64  e;.      pBt = d
fde0: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
fdf0: 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20       if( pBt==0 
fe00: 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  || sqlite3BtreeP
fe10: 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a  ager(pBt)==0 ){.
fe20: 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d          zState =
fe30: 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20   "closed";.     
fe40: 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
fe50: 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
fe60: 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b  db, i ? db->aDb[
fe70: 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20  i].zName : 0, . 
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c      SQLITE_FCNTL
feb0: 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d  _LOCKSTATE, &j)=
fec0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
fed0: 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
fee0: 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20  azLockName[j];. 
fef0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
ff00: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
ff10: 64 28 76 2c 20 31 2c 20 22 73 73 22 2c 20 64 62  d(v, 1, "ss", db
ff20: 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
ff30: 7a 53 74 61 74 65 29 3b 0a 20 20 20 20 20 20 73  zState);.      s
ff40: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ff50: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
ff60: 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 2);.    }. 
ff70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
ff80: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
ff90: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
ffa0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59  case PragTyp_KEY
ffb0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
ffc0: 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79  ht ) sqlite3_key
ffd0: 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69  _v2(db, zDb, zRi
ffe0: 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  ght, sqlite3Strl
fff0: 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20  en30(zRight));. 
10000 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
10010 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b  case PragTyp_REK
10020 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
10030 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72  ight ) sqlite3_r
10040 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
10050 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33   zRight, sqlite3
10060 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
10070 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
10080 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  }.  case PragTyp
10090 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69  _HEXKEY: {.    i
100a0 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
100b0 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20     u8 iByte;.   
100c0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
100d0 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20  char zKey[40];. 
100e0 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42       for(i=0, iB
100f0 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  yte=0; i<sizeof(
10100 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74  zKey)*2 && sqlit
10110 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67 68  e3Isxdigit(zRigh
10120 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  t[i]); i++){.   
10130 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69 42       iByte = (iB
10140 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65  yte<<4) + sqlite
10150 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74  3HexToInt(zRight
10160 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  [i]);.        if
10170 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65  ( (i&1)!=0 ) zKe
10180 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a  y[i/2] = iByte;.
10190 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
101a0 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78  ( (zLeft[3] & 0x
101b0 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20  f)==0xb ){.     
101c0 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76     sqlite3_key_v
101d0 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c  2(db, zDb, zKey,
101e0 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c   i/2);.      }el
101f0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
10200 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c  te3_rekey_v2(db,
10210 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
10220 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
10230 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
10240 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
10250 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  d(SQLITE_HAS_COD
10260 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  EC) || defined(S
10270 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52  QLITE_ENABLE_CER
10280 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67 54  OD).  case PragT
10290 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45  yp_ACTIVATE_EXTE
102a0 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67  NSIONS: if( zRig
102b0 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  ht ){.#ifdef SQL
102c0 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
102d0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
102e0 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73  NICmp(zRight, "s
102f0 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20  ee-", 4)==0 ){. 
10300 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74       sqlite3_act
10310 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68  ivate_see(&zRigh
10320 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[4]);.    }.#en
10330 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
10340 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20  E_ENABLE_CEROD. 
10350 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
10360 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
10370 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29  cerod-", 6)==0 )
10380 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
10390 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26  activate_cerod(&
103a0 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20  zRight[6]);.    
103b0 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
103c0 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
103d0 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20  } /* End of the 
103e0 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f  PRAGMA switch */
103f0 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20  ..pragma_out:.  
10400 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
10410 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69  , zLeft);.  sqli
10420 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52  te3DbFree(db, zR
10430 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66  ight);.}..#endif
10440 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
10450 50 52 41 47 4d 41 20 2a 2f 0a                    PRAGMA */.