/ Hex Artifact Content
Login

Artifact 56161e4aa4891a45b534f6516acb343df15a5120:


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 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
21f0: 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a  id [= value].**.
2200: 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66 69 65  ** The identifie
2210: 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20  r might also be 
2220: 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 76  a string.  The v
2230: 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67  alue is a string
2240: 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66  , and.** identif
2250: 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72  ier, or a number
2260: 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61 67 20  .  If minusFlag 
2270: 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
2280: 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20  e value is.** a 
2290: 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61 73 20  number that was 
22a0: 70 72 65 63 65 64 65 64 20 62 79 20 61 20 6d 69  preceded by a mi
22b0: 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20  nus sign..**.** 
22c0: 49 66 20 74 68 65 20 6c 65 66 74 20 73 69 64 65  If the left side
22d0: 20 69 73 20 22 64 61 74 61 62 61 73 65 2e 69 64   is "database.id
22e0: 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74  " then pId1 is t
22f0: 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
2300: 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69 73 20  .** and pId2 is 
2310: 74 68 65 20 69 64 2e 20 20 49 66 20 74 68 65 20  the id.  If the 
2320: 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a 75 73  left side is jus
2330: 74 20 22 69 64 22 20 74 68 65 6e 20 70 49 64 31  t "id" then pId1
2340: 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e   is the.** id an
2350: 64 20 70 49 64 32 20 69 73 20 61 6e 79 20 65 6d  d pId2 is any em
2360: 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76  pty string..*/.v
2370: 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
2380: 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  a(.  Parse *pPar
2390: 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  se, .  Token *pI
23a0: 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20 46 69  d1,        /* Fi
23b0: 72 73 74 20 70 61 72 74 20 6f 66 20 5b 73 63 68  rst part of [sch
23c0: 65 6d 61 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f  ema.]id field */
23d0: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20  .  Token *pId2, 
23e0: 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64         /* Second
23f0: 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61   part of [schema
2400: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
2410: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
2420: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
2430: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
2440: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
2450: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
2460: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
2470: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
2480: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
2490: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
24a0: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
24b0: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
24c0: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
24d0: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
24e0: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
24f0: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
2500: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
2510: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
2520: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
2530: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
2540: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
2550: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
2560: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
2570: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
2580: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
2590: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
25a0: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
25b0: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
25c0: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
25d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
25e0: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
25f0: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
2600: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
2610: 69 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a  id = 0;       /*
2620: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
2630: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
2640: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
2650: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
2660: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
2670: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
2680: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
2690: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
26a0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
26b0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
26c0: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
26f0: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
2700: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
2710: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
2720: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
2730: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
2740: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
2750: 20 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e   struct sPragmaN
2760: 61 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a  ames *pPragma;..
2770: 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74    if( v==0 ) ret
2780: 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  urn;.  sqlite3Vd
2790: 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29  beRunOnlyOnce(v)
27a0: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  ;.  pParse->nMem
27b0: 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65   = 2;..  /* Inte
27c0: 72 70 72 65 74 20 74 68 65 20 5b 73 63 68 65 6d  rpret the [schem
27d0: 61 2e 5d 20 70 61 72 74 20 6f 66 20 74 68 65 20  a.] part of the 
27e0: 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74  pragma statement
27f0: 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20 20 2a  . iDb is the.  *
2800: 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  * index of the d
2810: 61 74 61 62 61 73 65 20 74 68 69 73 20 70 72 61  atabase this pra
2820: 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61 70 70  gma is being app
2830: 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e 61 44  lied to in db.aD
2840: 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20  b[]. */.  iDb = 
2850: 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
2860: 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64 31 2c  me(pParse, pId1,
2870: 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a 20 20   pId2, &pId);.  
2880: 69 66 28 20 69 44 62 3c 30 20 29 20 72 65 74 75  if( iDb<0 ) retu
2890: 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d  rn;.  pDb = &db-
28a0: 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a  >aDb[iDb];..  /*
28b0: 20 49 66 20 74 68 65 20 74 65 6d 70 20 64 61 74   If the temp dat
28c0: 61 62 61 73 65 20 68 61 73 20 62 65 65 6e 20 65  abase has been e
28d0: 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65 64 20  xplicitly named 
28e0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 0a  as part of the .
28f0: 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d 61 6b    ** pragma, mak
2900: 65 20 73 75 72 65 20 69 74 20 69 73 20 6f 70 65  e sure it is ope
2910: 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69  n. .  */.  if( i
2920: 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74 65 33  Db==1 && sqlite3
2930: 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2940: 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20  (pParse) ){.    
2950: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a  return;.  }..  z
2960: 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33 4e 61  Left = sqlite3Na
2970: 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20  meFromToken(db, 
2980: 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65  pId);.  if( !zLe
2990: 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69  ft ) return;.  i
29a0: 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a  f( minusFlag ){.
29b0: 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c      zRight = sql
29c0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
29d0: 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29 3b 0a  "-%T", pValue);.
29e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69    }else{.    zRi
29f0: 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d  ght = sqlite3Nam
2a00: 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70  eFromToken(db, p
2a10: 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 61  Value);.  }..  a
2a20: 73 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a 20  ssert( pId2 );. 
2a30: 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30   zDb = pId2->n>0
2a40: 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20   ? pDb->zName : 
2a50: 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
2a60: 41 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65  AuthCheck(pParse
2a70: 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c  , SQLITE_PRAGMA,
2a80: 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20   zLeft, zRight, 
2a90: 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  zDb) ){.    goto
2aa0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
2ab0: 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53  ..  /* Send an S
2ac0: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2ad0: 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20  MA file-control 
2ae0: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
2af0: 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65  g VFS.  ** conne
2b00: 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72 65  ction.  If it re
2b10: 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c  turns SQLITE_OK,
2b20: 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61   then assume tha
2b30: 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20 68  t the VFS.  ** h
2b40: 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67 6d  andled the pragm
2b50: 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20 61  a and generate a
2b60: 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64 20   no-op prepared 
2b70: 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a  statement..  **.
2b80: 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
2b90: 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d  ION-OF: R-12238-
2ba0: 35 35 31 32 30 20 57 68 65 6e 65 76 65 72 20 61  55120 Whenever a
2bb0: 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e   PRAGMA statemen
2bc0: 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20 2a  t is parsed,.  *
2bd0: 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54  * an SQLITE_FCNT
2be0: 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63 6f  L_PRAGMA file co
2bf0: 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f  ntrol is sent to
2c00: 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74 65   the open sqlite
2c10: 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65  3_file.  ** obje
2c20: 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ct corresponding
2c30: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2c40: 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20 74   file to which t
2c50: 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73  he pragma.  ** s
2c60: 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73 2e  tatement refers.
2c70: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45  .  **.  ** IMPLE
2c80: 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
2c90: 32 39 38 37 35 2d 33 31 36 37 38 20 54 68 65 20  29875-31678 The 
2ca0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
2cb0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2cc0: 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f  GMA.  ** file co
2cd0: 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72 61  ntrol is an arra
2ce0: 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  y of pointers to
2cf0: 20 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a 2a   strings (char**
2d00: 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a 20  ) in which the. 
2d10: 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65   ** second eleme
2d20: 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61 79 20  nt of the array 
2d30: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
2d40: 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74 68  he pragma and th
2d50: 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65  e third.  ** ele
2d60: 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72 67 75  ment is the argu
2d70: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61 67  ment to the prag
2d80: 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68  ma or NULL if th
2d90: 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a  e pragma has no.
2da0: 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20    ** argument.. 
2db0: 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20   */.  aFcntl[0] 
2dc0: 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d  = 0;.  aFcntl[1]
2dd0: 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e   = zLeft;.  aFcn
2de0: 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a  tl[2] = zRight;.
2df0: 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b    aFcntl[3] = 0;
2e00: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
2e10: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
2e20: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c  rc = sqlite3_fil
2e30: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44  e_control(db, zD
2e40: 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  b, SQLITE_FCNTL_
2e50: 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61  PRAGMA, (void*)a
2e60: 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63  Fcntl);.  if( rc
2e70: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2e80: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54     returnSingleT
2e90: 65 78 74 28 76 2c 20 22 72 65 73 75 6c 74 22 2c  ext(v, "result",
2ea0: 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20   aFcntl[0]);.   
2eb0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46   sqlite3_free(aF
2ec0: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 67 6f  cntl[0]);.    go
2ed0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2ee0: 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
2ef0: 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a  ITE_NOTFOUND ){.
2f00: 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30      if( aFcntl[0
2f10: 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ] ){.      sqlit
2f20: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
2f30: 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b  e, "%s", aFcntl[
2f40: 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0]);.      sqlit
2f50: 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30  e3_free(aFcntl[0
2f60: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50  ]);.    }.    pP
2f70: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
2f80: 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72    pParse->rc = r
2f90: 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67  c;.    goto prag
2fa0: 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  ma_out;.  }..  /
2fb0: 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61  * Locate the pra
2fc0: 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75  gma in the looku
2fd0: 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72  p table */.  lwr
2fe0: 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72   = 0;.  upr = Ar
2ff0: 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e  raySize(aPragmaN
3000: 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65  ames)-1;.  while
3010: 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20  ( lwr<=upr ){.  
3020: 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72    mid = (lwr+upr
3030: 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  )/2;.    rc = sq
3040: 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c  lite3_stricmp(zL
3050: 65 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65  eft, aPragmaName
3060: 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  s[mid].zName);. 
3070: 20 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62     if( rc==0 ) b
3080: 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63  reak;.    if( rc
3090: 3c 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20  <0 ){.      upr 
30a0: 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d  = mid - 1;.    }
30b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20  else{.      lwr 
30c0: 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d  = mid + 1;.    }
30d0: 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75  .  }.  if( lwr>u
30e0: 70 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  pr ) goto pragma
30f0: 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61 20  _out;.  pPragma 
3100: 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  = &aPragmaNames[
3110: 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  mid];..  /* Make
3120: 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
3130: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61  se schema is loa
3140: 64 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d  ded if the pragm
3150: 61 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  a requires that 
3160: 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d  */.  if( (pPragm
3170: 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  a->mPragFlag & P
3180: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
3190: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
31a0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
31b0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
31c0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
31d0: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
31e0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
31f0: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
3200: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72  */.  switch( pPr
3210: 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29  agma->ePragTyp )
3220: 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  {.  .#if !define
3230: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
3240: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
3250: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3260: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
3270: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
3280: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61  MA [schema.]defa
3290: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20  ult_cache_size. 
32a0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
32b0: 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63  ema.]default_cac
32c0: 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  he_size=N.  **. 
32d0: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
32e0: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
32f0: 75 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e  urrent persisten
3300: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
3310: 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68  e.  ** page cach
3320: 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c  e size.  The val
3330: 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74  ue returned is t
3340: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
3350: 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20  r of.  ** pages 
3360: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
3370: 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  e.  The second f
3380: 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68  orm sets both th
3390: 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70  e current.  ** p
33a0: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76  age cache size v
33b0: 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72  alue and the per
33c0: 73 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63  sistent page cac
33d0: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20  he size value.  
33e0: 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ** stored in the
33f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
3400: 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20    **.  ** Older 
3410: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
3420: 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68 65  te would set the
3430: 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73   default cache s
3440: 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65  ize to a.  ** ne
3450: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74 6f  gative number to
3460: 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68 72   indicate synchr
3470: 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65 73  onous=OFF.  Thes
3480: 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e  e days, synchron
3490: 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61  ous.  ** is alwa
34a0: 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  ys on by default
34b0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   regardless of t
34c0: 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 64  he sign of the d
34d0: 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a  efault cache.  *
34e0: 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e  * size.  But con
34f0: 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74 68  tinue to take th
3500: 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
3510: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
3520: 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20  cache.  ** size 
3530: 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f  of historical co
3540: 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a  mpatibility..  *
3550: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
3560: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
3570: 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  IZE: {.    stati
3580: 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20  c const int iLn 
3590: 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49  = VDBE_OFFSET_LI
35a0: 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61  NENO(2);.    sta
35b0: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
35c0: 4c 69 73 74 20 67 65 74 43 61 63 68 65 53 69 7a  List getCacheSiz
35d0: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  e[] = {.      { 
35e0: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
35f0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
3600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3610: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f           /* 0 */
3620: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64  .      { OP_Read
3630: 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20  Cookie,  0, 1,  
3640: 20 20 20 20 20 20 42 54 52 45 45 5f 44 45 46 41        BTREE_DEFA
3650: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c  ULT_CACHE_SIZE},
3660: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
3670: 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20  { OP_IfPos,     
3680: 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30    1, 8,        0
3690: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e  },.      { OP_In
36a0: 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32 2c  teger,     0, 2,
36b0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
36c0: 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74 2c    { OP_Subtract,
36d0: 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20 20      1, 2,       
36e0: 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   1},.      { OP_
36f0: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
3700: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
3710: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
3720: 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20  ,     0, 1,     
3730: 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20     0},          
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3750: 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 6 */.      { O
3760: 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20 30  P_Noop,        0
3770: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
3780: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
3790: 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20 20  tRow,   1, 1,   
37a0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a       0},.    };.
37b0: 20 20 20 20 69 6e 74 20 61 64 64 72 3b 0a 20 20      int addr;.  
37c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
37d0: 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
37e0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
37f0: 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 6e 65 43  ){.      setOneC
3800: 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 63 61  olumnName(v, "ca
3810: 63 68 65 5f 73 69 7a 65 22 29 3b 0a 20 20 20 20  che_size");.    
3820: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b    pParse->nMem +
3830: 3d 20 32 3b 0a 20 20 20 20 20 20 61 64 64 72 20  = 2;.      addr 
3840: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
3850: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
3860: 69 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a 65  ize(getCacheSize
3870: 29 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65 2c  ), getCacheSize,
3880: 69 4c 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iLn);.      sqli
3890: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
38a0: 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20  v, addr, iDb);. 
38b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
38c0: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
38d0: 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  +1, iDb);.      
38e0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
38f0: 65 50 31 28 76 2c 20 61 64 64 72 2b 36 2c 20 53  eP1(v, addr+6, S
3900: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41  QLITE_DEFAULT_CA
3910: 43 48 45 5f 53 49 5a 45 29 3b 0a 20 20 20 20 7d  CHE_SIZE);.    }
3920: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
3930: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62  size = sqlite3Ab
3940: 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74  sInt32(sqlite3At
3950: 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
3960: 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57     sqlite3BeginW
3970: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
3980: 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20  arse, 0, iDb);. 
3990: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
39a0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
39b0: 65 67 65 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a  eger, size, 1);.
39c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
39d0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65  eAddOp3(v, OP_Se
39e0: 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54  tCookie, iDb, BT
39f0: 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48  REE_DEFAULT_CACH
3a00: 45 5f 53 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20  E_SIZE, 1);.    
3a10: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
3a20: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
3a30: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
3a40: 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65        pDb->pSche
3a50: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d  ma->cache_size =
3a60: 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c   size;.      sql
3a70: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
3a80: 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20  eSize(pDb->pBt, 
3a90: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
3aa0: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
3ab0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
3ac0: 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54  #endif /* !SQLIT
3ad0: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
3ae0: 47 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f  GMAS && !SQLITE_
3af0: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20  OMIT_DEPRECATED 
3b00: 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
3b10: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3b20: 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a  ER_PRAGMAS).  /*
3b30: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
3b40: 63 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65  chema.]page_size
3b50: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
3b60: 63 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65  chema.]page_size
3b70: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
3b80: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
3b90: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
3ba0: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
3bb0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
3bc0: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
3bd0: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3be0: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
3bf0: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
3c00: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
3c10: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
3c20: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
3c30: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
3c40: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
3c50: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
3c60: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
3c70: 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  ZE: {.    Btree 
3c80: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
3c90: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
3ca0: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
3cb0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
3cc0: 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59  int size = ALWAY
3cd0: 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33  S(pBt) ? sqlite3
3ce0: 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65  BtreeGetPageSize
3cf0: 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20  (pBt) : 0;.     
3d00: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
3d10: 28 76 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c  (v, "page_size",
3d20: 20 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73   size);.    }els
3d30: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c  e{.      /* Mall
3d40: 6f 63 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e  oc may fail when
3d50: 20 73 65 74 74 69 6e 67 20 74 68 65 20 70 61 67   setting the pag
3d60: 65 2d 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65  e-size, as there
3d70: 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a   is an internal.
3d80: 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20        ** buffer 
3d90: 74 68 61 74 20 74 68 65 20 70 61 67 65 72 20 6d  that the pager m
3da0: 6f 64 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73  odule resizes us
3db0: 69 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c  ing sqlite3_real
3dc0: 6c 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  loc()..      */.
3dd0: 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61        db->nextPa
3de0: 67 65 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  gesize = sqlite3
3df0: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
3e00: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e      if( SQLITE_N
3e10: 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72  OMEM==sqlite3Btr
3e20: 65 65 53 65 74 50 61 67 65 53 69 7a 65 28 70 42  eeSetPageSize(pB
3e30: 74 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73  t, db->nextPages
3e40: 69 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20  ize,-1,0) ){.   
3e50: 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46       db->mallocF
3e60: 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
3e70: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
3e80: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
3e90: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
3ea0: 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74  ma.]secure_delet
3eb0: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
3ec0: 73 63 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64  schema.]secure_d
3ed0: 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a  elete=ON/OFF.  *
3ee0: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
3ef0: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
3f00: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
3f10: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  g for the.  ** s
3f20: 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61  ecure_delete fla
3f30: 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  g.  The second f
3f40: 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20  orm changes the 
3f50: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20  secure_delete.  
3f60: 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20  ** flag setting 
3f70: 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e  and reports then
3f80: 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20  ew value..  */. 
3f90: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45   case PragTyp_SE
3fa0: 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20  CURE_DELETE: {. 
3fb0: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
3fc0: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e  pDb->pBt;.    in
3fd0: 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73  t b = -1;.    as
3fe0: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
3ff0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
4000: 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69  {.      b = sqli
4010: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
4020: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  ight, 0);.    }.
4030: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
4040: 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20  =0 && b>=0 ){.  
4050: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
4060: 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
4070: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
4080: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
4090: 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28  reeSecureDelete(
40a0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
40b0: 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   b);.      }.   
40c0: 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74   }.    b = sqlit
40d0: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
40e0: 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20  ete(pBt, b);.   
40f0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
4100: 28 76 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65  (v, "secure_dele
4110: 74 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65  te", b);.    bre
4120: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
4130: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
4140: 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  ma.]max_page_cou
4150: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
4160: 5b 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67  [schema.]max_pag
4170: 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20  e_count=N.  **. 
4180: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
4190: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
41a0: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66  urrent setting f
41b0: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69  or the.  ** maxi
41c0: 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  mum number of pa
41d0: 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ges in the datab
41e0: 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 0a  ase file.  The .
41f0: 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d    ** second form
4200: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68 61   attempts to cha
4210: 6e 67 65 20 74 68 69 73 20 73 65 74 74 69 6e 67  nge this setting
4220: 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72  .  Both.  ** for
4230: 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 75  ms return the cu
4240: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20  rrent setting.. 
4250: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62 73   **.  ** The abs
4260: 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 4e  olute value of N
4270: 20 69 73 20 75 73 65 64 2e 20 20 54 68 69 73 20   is used.  This 
4280: 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  is undocumented 
4290: 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63  and might.  ** c
42a0: 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79  hange.  The only
42b0: 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20 70   purpose is to p
42c0: 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20 77  rovide an easy w
42d0: 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20  ay to test.  ** 
42e0: 74 68 65 20 73 71 6c 69 74 65 33 41 62 73 49 6e  the sqlite3AbsIn
42f0: 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  t32() function..
4300: 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    **.  **  PRAGM
4310: 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f  A [schema.]page_
4320: 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20  count.  **.  ** 
4330: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
4340: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
4350: 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  e specified data
4360: 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  base..  */.  cas
4370: 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43  e PragTyp_PAGE_C
4380: 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20  OUNT: {.    int 
4390: 69 52 65 67 3b 0a 20 20 20 20 73 71 6c 69 74 65  iReg;.    sqlite
43a0: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
43b0: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
43c0: 20 20 20 20 69 52 65 67 20 3d 20 2b 2b 70 50 61      iReg = ++pPa
43d0: 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69  rse->nMem;.    i
43e0: 66 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  f( sqlite3Tolowe
43f0: 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27  r(zLeft[0])=='p'
4400: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
4410: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
4420: 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69 44 62  P_Pagecount, iDb
4430: 2c 20 69 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c  , iReg);.    }el
4440: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
4450: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
4460: 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44 62 2c  P_MaxPgcnt, iDb,
4470: 20 69 52 65 67 2c 20 0a 20 20 20 20 20 20 20 20   iReg, .        
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4490: 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
44a0: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
44b0: 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ht)));.    }.   
44c0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
44d0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
44e0: 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20 20  ow, iReg, 1);.  
44f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4500: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
4510: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4520: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
4530: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65  OLNAME_NAME, zLe
4540: 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  ft, SQLITE_TRANS
4550: 49 45 4e 54 29 3b 0a 20 20 20 20 62 72 65 61 6b  IENT);.    break
4560: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
4570: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4580: 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20  .]locking_mode. 
4590: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
45a0: 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ema.]locking_mod
45b0: 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c  e = (normal|excl
45c0: 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61  usive).  */.  ca
45d0: 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  se PragTyp_LOCKI
45e0: 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63  NG_MODE: {.    c
45f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20  onst char *zRet 
4600: 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20  = "normal";.    
4610: 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c  int eMode = getL
4620: 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68  ockingMode(zRigh
4630: 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64  t);..    if( pId
4640: 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65  2->n==0 && eMode
4650: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
4660: 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20  ODE_QUERY ){.   
4670: 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52     /* Simple "PR
4680: 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  AGMA locking_mod
4690: 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  e;" statement. T
46a0: 68 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66  his is a query f
46b0: 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  or.      ** the 
46c0: 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20  current default 
46d0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68  locking mode (wh
46e0: 69 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65  ich may be diffe
46f0: 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a  rent to.      **
4700: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64   the locking-mod
4710: 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61  e of the main da
4720: 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a  tabase)..      *
4730: 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  /.      eMode = 
4740: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
4750: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4760: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
4770: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32  ;.      if( pId2
4780: 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ->n==0 ){.      
4790: 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61    /* This indica
47a0: 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61  tes that no data
47b0: 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70  base name was sp
47c0: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a  ecified as part.
47d0: 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68          ** of th
47e0: 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
47f0: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
4800: 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  he locking-mode 
4810: 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20  must be.        
4820: 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74  ** set on all at
4830: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4840: 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65  , as well as the
4850: 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20   main db file.. 
4860: 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20         **.      
4870: 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73    ** Also, the s
4880: 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d  qlite3.dfltLockM
4890: 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20  ode variable is 
48a0: 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20  set so that.    
48b0: 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65      ** any subse
48c0: 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64  quently attached
48d0: 20 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20   databases also 
48e0: 75 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  use the specifie
48f0: 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63  d.        ** loc
4900: 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20  king mode..     
4910: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e     */.        in
4920: 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73  t ii;.        as
4930: 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61  sert(pDb==&db->a
4940: 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20  Db[0]);.        
4950: 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d  for(ii=2; ii<db-
4960: 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
4970: 20 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20         pPager = 
4980: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
4990: 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  r(db->aDb[ii].pB
49a0: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
49b0: 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e  lite3PagerLockin
49c0: 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d  gMode(pPager, eM
49d0: 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ode);.        }.
49e0: 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74          db->dflt
49f0: 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65  LockMode = (u8)e
4a00: 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mode;.      }.  
4a10: 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c      pPager = sql
4a20: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
4a30: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20  Db->pBt);.      
4a40: 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50  eMode = sqlite3P
4a50: 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28  agerLockingMode(
4a60: 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a  pPager, eMode);.
4a70: 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72      }..    asser
4a80: 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  t( eMode==PAGER_
4a90: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d  LOCKINGMODE_NORM
4aa0: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  AL.            |
4ab0: 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  | eMode==PAGER_L
4ac0: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55  OCKINGMODE_EXCLU
4ad0: 53 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20  SIVE );.    if( 
4ae0: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4af0: 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49  KINGMODE_EXCLUSI
4b00: 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74  VE ){.      zRet
4b10: 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a   = "exclusive";.
4b20: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4b30: 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 6c  SingleText(v, "l
4b40: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52  ocking_mode", zR
4b50: 65 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  et);.    break;.
4b60: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
4b70: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
4b80: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
4b90: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4ba0: 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  a.]journal_mode 
4bb0: 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20  =.  **          
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c              (del
4bd0: 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c  ete|persist|off|
4be0: 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c  truncate|memory|
4bf0: 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20  wal|off).  */.  
4c00: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55  case PragTyp_JOU
4c10: 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20  RNAL_MODE: {.   
4c20: 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20   int eMode;     
4c30: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
4c40: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
4c50: 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a  DE_XXX symbols *
4c60: 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20  /.    int ii;   
4c70: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
4c80: 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20  counter */..    
4c90: 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65  setOneColumnName
4ca0: 28 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  (v, "journal_mod
4cb0: 65 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  e");.    if( zRi
4cc0: 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ght==0 ){.      
4cd0: 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
4ce0: 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f  o "=MODE" part o
4cf0: 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f  f the pragma, do
4d00: 20 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65   a query for the
4d10: 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  .      ** curren
4d20: 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20  t mode */.      
4d30: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
4d40: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
4d50: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4d60: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
4d70: 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ode;.      int n
4d80: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
4d90: 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  30(zRight);.    
4da0: 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28    for(eMode=0; (
4db0: 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a  zMode = sqlite3J
4dc0: 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
4dd0: 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65  Mode))!=0; eMode
4de0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
4df0: 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
4e00: 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20  (zRight, zMode, 
4e10: 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  n)==0 ) break;. 
4e20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
4e30: 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20   !zMode ){.     
4e40: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d     /* If the "=M
4e50: 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e  ODE" part does n
4e60: 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f  ot match any kno
4e70: 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c  wn journal mode,
4e80: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
4e90: 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20   do a query */. 
4ea0: 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50         eMode = P
4eb0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
4ec0: 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a  _QUERY;.      }.
4ed0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d      }.    if( eM
4ee0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  ode==PAGER_JOURN
4ef0: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20  ALMODE_QUERY && 
4f00: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20  pId2->n==0 ){.  
4f10: 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22      /* Convert "
4f20: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
4f30: 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d  ode" into "PRAGM
4f40: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
4f50: 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44  ode" */.      iD
4f60: 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64  b = 0;.      pId
4f70: 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  2->n = 1;.    }.
4f80: 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e      for(ii=db->n
4f90: 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d  Db-1; ii>=0; ii-
4fa0: 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  -){.      if( db
4fb0: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26  ->aDb[ii].pBt &&
4fc0: 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64   (ii==iDb || pId
4fd0: 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20  2->n==0) ){.    
4fe0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
4ff0: 73 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b  sesBtree(v, ii);
5000: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5010: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
5020: 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69  _JournalMode, ii
5030: 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  , 1, eMode);.   
5040: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
5050: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
5060: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
5070: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65  , 1, 1);.    bre
5080: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
5090: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
50a0: 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  ma.]journal_size
50b0: 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41  _limit.  **  PRA
50c0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75  GMA [schema.]jou
50d0: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d  rnal_size_limit=
50e0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
50f0: 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20  or set the size 
5100: 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63  limit on rollbac
5110: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e  k journal files.
5120: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
5130: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a  gTyp_JOURNAL_SIZ
5140: 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50  E_LIMIT: {.    P
5150: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
5160: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
5170: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
5180: 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b  i64 iLimit = -2;
5190: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
51a0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
51b0: 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52  DecOrHexToI64(zR
51c0: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a  ight, &iLimit);.
51d0: 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
51e0: 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d  <-1 ) iLimit = -
51f0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69  1;.    }.    iLi
5200: 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67  mit = sqlite3Pag
5210: 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d  erJournalSizeLim
5220: 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69  it(pPager, iLimi
5230: 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69  t);.    returnSi
5240: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6a 6f 75 72  ngleInt(v, "jour
5250: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c  nal_size_limit",
5260: 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72   iLimit);.    br
5270: 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66  eak;.  }..#endif
5280: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
5290: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
52a0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
52b0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74  GMA [schema.]aut
52c0: 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50  o_vacuum.  **  P
52d0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
52e0: 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a  uto_vacuum=N.  *
52f0: 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65  *.  ** Get or se
5300: 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
5310: 68 65 20 64 61 74 61 62 61 73 65 20 27 61 75 74  he database 'aut
5320: 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65  o-vacuum' parame
5330: 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61  ter..  ** The va
5340: 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20  lue is one of:  
5350: 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20  0 NONE 1 FULL 2 
5360: 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f  INCREMENTAL.  */
5370: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5380: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
5390: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41    case PragTyp_A
53a0: 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20  UTO_VACUUM: {.  
53b0: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
53c0: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73  Db->pBt;.    ass
53d0: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
53e0: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
53f0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
5400: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 61 75 74 6f  ngleInt(v, "auto
5410: 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69 74 65  _vacuum", sqlite
5420: 33 42 74 72 65 65 47 65 74 41 75 74 6f 56 61 63  3BtreeGetAutoVac
5430: 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d  uum(pBt));.    }
5440: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
5450: 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56  eAuto = getAutoV
5460: 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20  acuum(zRight);. 
5470: 20 20 20 20 20 61 73 73 65 72 74 28 20 65 41 75       assert( eAu
5480: 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d  to>=0 && eAuto<=
5490: 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e  2 );.      db->n
54a0: 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38  extAutovac = (u8
54b0: 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a  )eAuto;.      /*
54c0: 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63   Call SetAutoVac
54d0: 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69  uum() to set ini
54e0: 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65  tialize the inte
54f0: 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20  rnal auto and.  
5500: 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75      ** incr-vacu
5510: 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69  um flags. This i
5520: 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 63 61  s required in ca
5530: 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  se this connecti
5540: 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61  on.      ** crea
5550: 74 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  tes the database
5560: 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70   file. It is imp
5570: 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74 20 69  ortant that it i
5580: 73 20 63 72 65 61 74 65 64 0a 20 20 20 20 20 20  s created.      
5590: 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61  ** as an auto-va
55a0: 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e  cuum capable db.
55b0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
55c0: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
55d0: 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70  eSetAutoVacuum(p
55e0: 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20  Bt, eAuto);.    
55f0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
5600: 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31  _OK && (eAuto==1
5610: 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b   || eAuto==2) ){
5620: 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e  .        /* When
5630: 20 73 65 74 74 69 6e 67 20 74 68 65 20 61 75 74   setting the aut
5640: 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f  o_vacuum mode to
5650: 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f   either "full" o
5660: 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69  r .        ** "i
5670: 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69  ncremental", wri
5680: 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  te the value of 
5690: 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64  meta[6] in the d
56a0: 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 20 20  atabase.        
56b0: 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20  ** file. Before 
56c0: 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b  writing to meta[
56d0: 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d  6], check that m
56e0: 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73  eta[3] indicates
56f0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74  .        ** that
5700: 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20   this really is 
5710: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63  an auto-vacuum c
5720: 61 70 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e  apable database.
5730: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
5740: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
5750: 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f   int iLn = VDBE_
5760: 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29  OFFSET_LINENO(2)
5770: 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63  ;.        static
5780: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
5790: 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b  t setMeta6[] = {
57a0: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
57b0: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
57c0: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d                0}
57e0: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
57f0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64         { OP_Read
5800: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20  Cookie,     0,  
5810: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
5820: 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f    BTREE_LARGEST_
5830: 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20  ROOT_PAGE},.    
5840: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20        { OP_If,  
5850: 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 20 20             1,   
5860: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
5870: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
5880: 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 2 */.        
5890: 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20    { OP_Halt,    
58a0: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b         SQLITE_OK
58b0: 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20  , OE_Abort,     
58c0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33       0},    /* 3
58d0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
58e0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
58f0: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c     0,         1,
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5910: 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a   0},    /* 4 */.
5920: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53            { OP_S
5930: 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30  etCookie,      0
5940: 2c 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f  ,         BTREE_
5950: 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31 7d 2c  INCR_VACUUM, 1},
5960: 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20 20 20      /* 5 */.    
5970: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 69      };.        i
5980: 6e 74 20 69 41 64 64 72 3b 0a 20 20 20 20 20 20  nt iAddr;.      
5990: 20 20 69 41 64 64 72 20 3d 20 73 71 6c 69 74 65    iAddr = sqlite
59a0: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
59b0: 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 4d  , ArraySize(setM
59c0: 65 74 61 36 29 2c 20 73 65 74 4d 65 74 61 36 2c  eta6), setMeta6,
59d0: 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 20 20 73   iLn);.        s
59e0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
59f0: 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69 44 62  P1(v, iAddr, iDb
5a00: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5a10: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
5a20: 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62 29 3b  , iAddr+1, iDb);
5a30: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5a40: 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20  VdbeChangeP2(v, 
5a50: 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72 2b 34  iAddr+2, iAddr+4
5a60: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5a70: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
5a80: 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75 74 6f  , iAddr+4, eAuto
5a90: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  -1);.        sql
5aa0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
5ab0: 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69 44 62  (v, iAddr+5, iDb
5ac0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5ad0: 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28  e3VdbeUsesBtree(
5ae0: 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 7d  v, iDb);.      }
5af0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
5b00: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
5b10: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
5b20: 5b 73 63 68 65 6d 61 2e 5d 69 6e 63 72 65 6d 65  [schema.]increme
5b30: 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20  ntal_vacuum(N). 
5b40: 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74   **.  ** Do N st
5b50: 65 70 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74  eps of increment
5b60: 61 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20  al vacuuming on 
5b70: 61 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  a database..  */
5b80: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5b90: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
5ba0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
5bb0: 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55  NCREMENTAL_VACUU
5bc0: 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69  M: {.    int iLi
5bd0: 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69  mit, addr;.    i
5be0: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20  f( zRight==0 || 
5bf0: 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32  !sqlite3GetInt32
5c00: 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74  (zRight, &iLimit
5c10: 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29  ) || iLimit<=0 )
5c20: 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d  {.      iLimit =
5c30: 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20   0x7fffffff;.   
5c40: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65   }.    sqlite3Be
5c50: 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
5c60: 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62  n(pParse, 0, iDb
5c70: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5c80: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
5c90: 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20  nteger, iLimit, 
5ca0: 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d 20 73  1);.    addr = s
5cb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
5cc0: 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  (v, OP_IncrVacuu
5cd0: 6d 2c 20 69 44 62 29 3b 20 56 64 62 65 43 6f 76  m, iDb); VdbeCov
5ce0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71  erage(v);.    sq
5cf0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
5d00: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
5d10: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
5d20: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5d30: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -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 49 66 50  AddOp2(v, OP_IfP
5d60: 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 20 56 64  os, 1, addr); Vd
5d70: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
5d80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
5d90: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
5da0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
5db0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
5dc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
5dd0: 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  R_PRAGMAS.  /*. 
5de0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
5df0: 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a  ema.]cache_size.
5e00: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
5e10: 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69 7a 65  hema.]cache_size
5e20: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
5e30: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
5e40: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
5e50: 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20 66 6f  local setting fo
5e60: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
5e70: 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68 65 20  cache size. The 
5e80: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73  second form sets
5e90: 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a 20   the local.  ** 
5ea0: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20  page cache size 
5eb0: 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69 73 20  value.  If N is 
5ec0: 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20 74 68  positive then th
5ed0: 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 6e  at is the.  ** n
5ee0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
5ef0: 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20 49 66  n the cache.  If
5f00: 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20   N is negative, 
5f10: 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 6e 75  then the.  ** nu
5f20: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 73  mber of pages is
5f30: 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74 68 61   adjusted so tha
5f40: 74 20 74 68 65 20 63 61 63 68 65 20 75 73 65 73  t the cache uses
5f50: 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a 20 20   -N kibibytes.  
5f60: 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20 20  ** of memory..  
5f70: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
5f80: 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b 0a  p_CACHE_SIZE: {.
5f90: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5fa0: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
5fb0: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
5fc0: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
5fd0: 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  t ){.      if( s
5fe0: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
5ff0: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
6000: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
6010: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
6020: 74 28 76 2c 20 22 63 61 63 68 65 5f 73 69 7a 65  t(v, "cache_size
6030: 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  ", pDb->pSchema-
6040: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
6050: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
6060: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
6070: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
6080: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
6090: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
60a0: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
60b0: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
60c0: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
60d0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
60e0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 20 20  he_size);.      
60f0: 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53  if( sqlite3ReadS
6100: 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20  chema(pParse) ) 
6110: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
6120: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
6130: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
6140: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
6150: 2e 5d 63 61 63 68 65 5f 73 70 69 6c 6c 0a 20 20  .]cache_spill.  
6160: 2a 2a 20 20 50 52 41 47 4d 41 20 63 61 63 68 65  **  PRAGMA cache
6170: 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 0a 20  _spill=BOOLEAN. 
6180: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
6190: 65 6d 61 2e 5d 63 61 63 68 65 5f 73 70 69 6c 6c  ema.]cache_spill
61a0: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
61b0: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
61c0: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
61d0: 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20 66 6f  local setting fo
61e0: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
61f0: 63 61 63 68 65 20 73 70 69 6c 6c 20 73 69 7a 65  cache spill size
6200: 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  . The second for
6210: 6d 20 74 75 72 6e 73 20 63 61 63 68 65 20 73 70  m turns cache sp
6220: 69 6c 6c 20 6f 6e 0a 20 20 2a 2a 20 6f 72 20 6f  ill on.  ** or o
6230: 66 66 2e 20 20 57 68 65 6e 20 74 75 72 6e 6e 69  ff.  When turnni
6240: 6e 67 20 63 61 63 68 65 20 73 70 69 6c 6c 20 6f  ng cache spill o
6250: 6e 2c 20 74 68 65 20 73 69 7a 65 20 69 73 20 73  n, the size is s
6260: 65 74 20 74 6f 20 74 68 65 0a 20 20 2a 2a 20 63  et to the.  ** c
6270: 75 72 72 65 6e 74 20 63 61 63 68 65 5f 73 69 7a  urrent cache_siz
6280: 65 2e 20 20 54 68 65 20 74 68 69 72 64 20 66 6f  e.  The third fo
6290: 72 6d 20 73 65 74 73 20 61 20 73 70 69 6c 6c 20  rm sets a spill 
62a0: 73 69 7a 65 20 74 68 61 74 0a 20 20 2a 2a 20 6d  size that.  ** m
62b0: 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 20  ay be different 
62c0: 66 6f 72 6d 20 74 68 65 20 63 61 63 68 65 20 73  form the cache s
62d0: 69 7a 65 2e 0a 20 20 2a 2a 20 49 66 20 4e 20 69  ize..  ** If N i
62e0: 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20  s positive then 
62f0: 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a  that is the.  **
6300: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
6310: 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20   in the cache.  
6320: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
6330: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
6340: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
6350: 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74  is adjusted so t
6360: 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73  hat the cache us
6370: 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a  es -N kibibytes.
6380: 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a    ** of memory..
6390: 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20 74 68 65    **.  ** If the
63a0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63 68 65   number of cache
63b0: 5f 73 70 69 6c 6c 20 70 61 67 65 73 20 69 73 20  _spill pages is 
63c0: 6c 65 73 73 20 74 68 65 6e 20 74 68 65 20 6e 75  less then the nu
63d0: 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 63 61 63  mber of.  ** cac
63e0: 68 65 5f 73 69 7a 65 20 70 61 67 65 73 2c 20 6e  he_size pages, n
63f0: 6f 20 73 70 69 6c 6c 69 6e 67 20 6f 63 63 75 72  o spilling occur
6400: 73 20 75 6e 74 69 6c 20 74 68 65 20 70 61 67 65  s until the page
6410: 20 63 6f 75 6e 74 20 65 78 63 65 65 64 73 0a 20   count exceeds. 
6420: 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   ** the number o
6430: 66 20 63 61 63 68 65 5f 73 69 7a 65 20 70 61 67  f cache_size pag
6440: 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  es..  **.  ** Th
6450: 65 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f  e cache_spill=BO
6460: 4f 4c 45 41 4e 20 73 65 74 74 69 6e 67 20 61 70  OLEAN setting ap
6470: 70 6c 69 65 73 20 74 6f 20 61 6c 6c 20 61 74 74  plies to all att
6480: 61 63 68 65 64 20 73 63 68 65 6d 61 73 2c 0a 20  ached schemas,. 
6490: 20 2a 2a 20 6e 6f 74 20 6a 75 73 74 20 74 68 65   ** not just the
64a0: 20 73 63 68 65 6d 61 20 73 70 65 63 69 66 69 65   schema specifie
64b0: 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  d..  */.  case P
64c0: 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53 50 49  ragTyp_CACHE_SPI
64d0: 4c 4c 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74  LL: {.    assert
64e0: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
64f0: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
6500: 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
6510: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
6520: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
6530: 28 76 2c 20 22 63 61 63 68 65 5f 73 70 69 6c 6c  (v, "cache_spill
6540: 22 2c 20 0a 20 20 20 20 20 20 20 20 20 28 64 62  ", .         (db
6550: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
6560: 5f 43 61 63 68 65 53 70 69 6c 6c 29 3d 3d 30 20  _CacheSpill)==0 
6570: 3f 20 30 20 3a 20 0a 20 20 20 20 20 20 20 20 20  ? 0 : .         
6580: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
6590: 65 74 53 70 69 6c 6c 53 69 7a 65 28 70 44 62 2d  etSpillSize(pDb-
65a0: 3e 70 42 74 2c 30 29 29 3b 0a 20 20 20 20 7d 65  >pBt,0));.    }e
65b0: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
65c0: 69 7a 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 69  ize = 1;.      i
65d0: 66 28 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  f( sqlite3GetInt
65e0: 33 32 28 7a 52 69 67 68 74 2c 20 26 73 69 7a 65  32(zRight, &size
65f0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
6600: 69 74 65 33 42 74 72 65 65 53 65 74 53 70 69 6c  ite3BtreeSetSpil
6610: 6c 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20  lSize(pDb->pBt, 
6620: 73 69 7a 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  size);.      }. 
6630: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
6640: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
6650: 74 2c 20 73 69 7a 65 21 3d 30 29 20 29 7b 0a 20  t, size!=0) ){. 
6660: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
6670: 20 7c 3d 20 53 51 4c 49 54 45 5f 43 61 63 68 65   |= SQLITE_Cache
6680: 53 70 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 65 6c  Spill;.      }el
6690: 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
66a0: 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45  flags &= ~SQLITE
66b0: 5f 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20 20  _CacheSpill;.   
66c0: 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 41 6c     }.      setAl
66d0: 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b  lPagerFlags(db);
66e0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
66f0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
6700: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
6710: 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29 0a 20  .]mmap_size(N). 
6720: 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20 74 6f   **.  ** Used to
6730: 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73 69 7a   set mapping siz
6740: 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d 61 70  e limit. The map
6750: 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 20  ping size limit 
6760: 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74 6f 20  is.  ** used to 
6770: 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72 65 67  limit the aggreg
6780: 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20  ate size of all 
6790: 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20 72 65  memory mapped re
67a0: 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20 20 2a  gions of the.  *
67b0: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  * database file.
67c0: 20 49 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   If this paramet
67d0: 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a 65 72  er is set to zer
67e0: 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d  o, then memory m
67f0: 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73 20 6e  apping.  ** is n
6800: 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 2e 20  ot used at all. 
6810: 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76   If N is negativ
6820: 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61  e, then the defa
6830: 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20  ult memory map. 
6840: 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65 72 6d   ** limit determ
6850: 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  ined by sqlite3_
6860: 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
6870: 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 29 20  NFIG_MMAP_SIZE) 
6880: 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54 68 65  is set..  ** The
6890: 20 70 61 72 61 6d 65 74 65 72 20 4e 20 69 73 20   parameter N is 
68a0: 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79 74 65  measured in byte
68b0: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  s..  **.  ** Thi
68c0: 73 20 76 61 6c 75 65 20 69 73 20 61 64 76 69 73  s value is advis
68d0: 6f 72 79 2e 20 20 54 68 65 20 75 6e 64 65 72 6c  ory.  The underl
68e0: 79 69 6e 67 20 56 46 53 20 69 73 20 66 72 65 65  ying VFS is free
68f0: 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20   to memory map. 
6900: 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20 6f 72   ** as little or
6910: 20 61 73 20 6d 75 63 68 20 61 73 20 69 74 20 77   as much as it w
6920: 61 6e 74 73 2e 20 20 45 78 63 65 70 74 2c 20 69  ants.  Except, i
6930: 66 20 4e 20 69 73 20 73 65 74 20 74 6f 20 30 20  f N is set to 0 
6940: 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 75 70  then the.  ** up
6950: 70 65 72 20 6c 61 79 65 72 73 20 77 69 6c 6c 20  per layers will 
6960: 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 74 68 65  never invoke the
6970: 20 78 46 65 74 63 68 20 69 6e 74 65 72 66 61 63   xFetch interfac
6980: 65 73 20 74 6f 20 74 68 65 20 56 46 53 2e 0a 20  es to the VFS.. 
6990: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
69a0: 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a  yp_MMAP_SIZE: {.
69b0: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
69c0: 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49 54 45  4 sz;.#if SQLITE
69d0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30  _MAX_MMAP_SIZE>0
69e0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
69f0: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
6a00: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
6a10: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
6a20: 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  t ){.      int i
6a30: 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  i;.      sqlite3
6a40: 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52  DecOrHexToI64(zR
6a50: 69 67 68 74 2c 20 26 73 7a 29 3b 0a 20 20 20 20  ight, &sz);.    
6a60: 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20    if( sz<0 ) sz 
6a70: 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  = sqlite3GlobalC
6a80: 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20  onfig.szMmap;.  
6a90: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
6aa0: 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20  =0 ) db->szMmap 
6ab0: 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28  = sz;.      for(
6ac0: 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69  ii=db->nDb-1; ii
6ad0: 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20  >=0; ii--){.    
6ae0: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
6af0: 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d  ii].pBt && (ii==
6b00: 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d  iDb || pId2->n==
6b10: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  0) ){.          
6b20: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 4d  sqlite3BtreeSetM
6b30: 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62  mapLimit(db->aDb
6b40: 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20  [ii].pBt, sz);. 
6b50: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
6b60: 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20  .    }.    sz = 
6b70: 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  -1;.    rc = sql
6b80: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
6b90: 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54  l(db, zDb, SQLIT
6ba0: 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a  E_FCNTL_MMAP_SIZ
6bb0: 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a 20  E, &sz);.#else. 
6bc0: 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 72     sz = 0;.    r
6bd0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23  c = SQLITE_OK;.#
6be0: 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 72 63  endif.    if( rc
6bf0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
6c00: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
6c10: 65 49 6e 74 28 76 2c 20 22 6d 6d 61 70 5f 73 69  eInt(v, "mmap_si
6c20: 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65  ze", sz);.    }e
6c30: 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49  lse if( rc!=SQLI
6c40: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
6c50: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72       pParse->nEr
6c60: 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73  r++;.      pPars
6c70: 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  e->rc = rc;.    
6c80: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
6c90: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
6ca0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a  AGMA temp_store.
6cb0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
6cc0: 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61  mp_store = "defa
6cd0: 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66  ult"|"memory"|"f
6ce0: 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ile".  **.  ** R
6cf0: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
6d00: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
6d10: 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66  the temp_store f
6d20: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
6d30: 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61   ** the local va
6d40: 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b  lue does not mak
6d50: 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
6d60: 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74   disk file and t
6d70: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
6d80: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65  value will be re
6d90: 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20  stored the next 
6da0: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
6db0: 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a  e is opened..  *
6dc0: 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74  *.  ** Note that
6dd0: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
6de0: 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79 20  for the library 
6df0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
6e00: 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65  ions to.  ** ove
6e10: 72 72 69 64 65 20 74 68 69 73 20 73 65 74 74 69  rride this setti
6e20: 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  ng.  */.  case P
6e30: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
6e40: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  E: {.    if( !zR
6e50: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
6e60: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
6e70: 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 20 64   "temp_store", d
6e80: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 29 3b 0a  b->temp_store);.
6e90: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6ea0: 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61   changeTempStora
6eb0: 67 65 28 70 50 61 72 73 65 2c 20 7a 52 69 67 68  ge(pParse, zRigh
6ec0: 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  t);.    }.    br
6ed0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
6ee0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
6ef0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
6f00: 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  y.  **   PRAGMA 
6f10: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
6f20: 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63  tory = ""|"direc
6f30: 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a  tory_name".  **.
6f40: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
6f50: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
6f60: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
6f70: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66  tore_directory f
6f80: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
6f90: 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65   ** the value se
6fa0: 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64 69  ts a specific di
6fb0: 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73  rectory to be us
6fc0: 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
6fd0: 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53 65 74   files..  ** Set
6fe0: 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73  ting to a null s
6ff0: 74 72 69 6e 67 20 72 65 76 65 72 74 73 20 74 6f  tring reverts to
7000: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 6d   the default tem
7010: 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79  porary directory
7020: 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20 49 66   search..  ** If
7030: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
7040: 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 2c  tory is changed,
7050: 20 74 68 65 6e 20 69 6e 76 61 6c 69 64 61 74 65   then invalidate
7060: 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20 20 2a  TempStorage..  *
7070: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
7080: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
7090: 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20  _DIRECTORY: {.  
70a0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
70b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
70c0: 67 6c 65 54 65 78 74 28 76 2c 20 22 74 65 6d 70  gleText(v, "temp
70d0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
70e0: 22 2c 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ", sqlite3_temp_
70f0: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
7100: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
7110: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
7120: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
7130: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
7140: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
7150: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
7160: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
7170: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
7180: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
7190: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
71a0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
71b0: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
71c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
71d0: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
71e0: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
71f0: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
7200: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
7210: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
7220: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
7230: 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  f( SQLITE_TEMP_S
7240: 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20 20 7c  TORE==0.       |
7250: 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  | (SQLITE_TEMP_S
7260: 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d 3e 74  TORE==1 && db->t
7270: 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a 20 20  emp_store<=1).  
7280: 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f       || (SQLITE_
7290: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20 26 26  TEMP_STORE==2 &&
72a0: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d   db->temp_store=
72b0: 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  =1).      ){.   
72c0: 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74 65 54       invalidateT
72d0: 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73  empStorage(pPars
72e0: 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
72f0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73    sqlite3_free(s
7300: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
7310: 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66  ctory);.      if
7320: 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20  ( zRight[0] ){. 
7330: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74         sqlite3_t
7340: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  emp_directory = 
7350: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
7360: 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20  "%s", zRight);. 
7370: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
7380: 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 6d 70      sqlite3_temp
7390: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a  _directory = 0;.
73a0: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f        }.#endif /
73b0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  * SQLITE_OMIT_WS
73c0: 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62  D */.    }.    b
73d0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 53  reak;.  }..#if S
73e0: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 2f  QLITE_OS_WIN.  /
73f0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
7400: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
7410: 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47  tory.  **   PRAG
7420: 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  MA data_store_di
7430: 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69  rectory = ""|"di
7440: 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20  rectory_name".  
7450: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
7460: 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20  r set the local 
7470: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
7480: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
7490: 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  y flag.  Changin
74a0: 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  g.  ** the value
74b0: 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63   sets a specific
74c0: 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65   directory to be
74d0: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
74e0: 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a 20 20  se files that.  
74f0: 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66 69 65  ** were specifie
7500: 64 20 77 69 74 68 20 61 20 72 65 6c 61 74 69 76  d with a relativ
7510: 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53 65 74  e pathname.  Set
7520: 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73  ting to a null s
7530: 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a 20 20  tring reverts.  
7540: 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ** to the defaul
7550: 74 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63  t database direc
7560: 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f 72 20  tory, which for 
7570: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 73  database files s
7580: 70 65 63 69 66 69 65 64 20 77 69 74 68 0a 20 20  pecified with.  
7590: 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20 70 61  ** a relative pa
75a0: 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62 6c 79  th will probably
75b0: 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65   be based on the
75c0: 20 63 75 72 72 65 6e 74 20 64 69 72 65 63 74 6f   current directo
75d0: 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ry for the.  ** 
75e0: 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61 62 61  process.  Databa
75f0: 73 65 20 66 69 6c 65 20 73 70 65 63 69 66 69 65  se file specifie
7600: 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f 6c 75  d with an absolu
7610: 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f 74 20  te path are not 
7620: 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20 62 79  impacted.  ** by
7630: 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c 20 72   this setting, r
7640: 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69 74 73  egardless of its
7650: 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20 20 2a   value..  **.  *
7660: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
7670: 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49 52 45  _DATA_STORE_DIRE
7680: 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28  CTORY: {.    if(
7690: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
76a0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65    returnSingleTe
76b0: 78 74 28 76 2c 20 22 64 61 74 61 5f 73 74 6f 72  xt(v, "data_stor
76c0: 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 73 71  e_directory", sq
76d0: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
76e0: 74 6f 72 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tory);.    }else
76f0: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
7700: 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20  _OMIT_WSD.      
7710: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
7720: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73  .        int res
7730: 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
7740: 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64  qlite3OsAccess(d
7750: 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c  b->pVfs, zRight,
7760: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52   SQLITE_ACCESS_R
7770: 45 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b  EADWRITE, &res);
7780: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
7790: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65  =SQLITE_OK || re
77a0: 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
77b0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
77c0: 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61  g(pParse, "not a
77d0: 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74   writable direct
77e0: 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ory");.         
77f0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
7800: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
7810: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
7820: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64  3_free(sqlite3_d
7830: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  ata_directory);.
7840: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
7850: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
7860: 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65  qlite3_data_dire
7870: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
7880: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
7890: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
78a0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
78b0: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
78c0: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
78d0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
78e0: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
78f0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
7900: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  }.#endif..#if SQ
7910: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b  LITE_ENABLE_LOCK
7920: 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20  ING_STYLE.  /*. 
7930: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
7940: 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  hema.]lock_proxy
7950: 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41  _file.  **   PRA
7960: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63  GMA [schema.]loc
7970: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d 20 22  k_proxy_file = "
7980: 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f 66 69  :auto:"|"lock_fi
7990: 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a 0a 20 20  le_path".  **.  
79a0: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
79b0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
79c0: 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  e lock_proxy_fil
79d0: 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  e flag.  Changin
79e0: 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  g.  ** the value
79f0: 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63   sets a specific
7a00: 20 66 69 6c 65 20 74 6f 20 62 65 20 75 73 65 64   file to be used
7a10: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 61 63   for database ac
7a20: 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 2a 2a  cess locks..  **
7a30: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
7a40: 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58 59 5f  gTyp_LOCK_PROXY_
7a50: 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69 66 28 20  FILE: {.    if( 
7a60: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
7a70: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
7a80: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
7a90: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
7aa0: 20 20 20 20 63 68 61 72 20 2a 70 72 6f 78 79 5f      char *proxy_
7ab0: 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e 55 4c 4c  file_path = NULL
7ac0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
7ad0: 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71  file *pFile = sq
7ae0: 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70  lite3PagerFile(p
7af0: 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 73 71  Pager);.      sq
7b00: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
7b10: 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c 20 53 51  olHint(pFile, SQ
7b20: 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f  LITE_GET_LOCKPRO
7b30: 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20  XYFILE, .       
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 20 20 26 70 72 6f 78 79 5f 66 69 6c 65 5f      &proxy_file_
7b60: 70 61 74 68 29 3b 0a 20 20 20 20 20 20 72 65 74  path);.      ret
7b70: 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c  urnSingleText(v,
7b80: 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c   "lock_proxy_fil
7b90: 65 22 2c 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70  e", proxy_file_p
7ba0: 61 74 68 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ath);.    }else{
7bb0: 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50  .      Pager *pP
7bc0: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
7bd0: 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42  reePager(pDb->pB
7be0: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
7bf0: 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20  3_file *pFile = 
7c00: 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
7c10: 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20  (pPager);.      
7c20: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 69  int res;.      i
7c30: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
7c40: 20 20 20 20 20 20 20 20 72 65 73 3d 73 71 6c 69          res=sqli
7c50: 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c  te3OsFileControl
7c60: 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53  (pFile, SQLITE_S
7c70: 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45  ET_LOCKPROXYFILE
7c80: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ca0: 20 20 20 20 20 20 20 20 7a 52 69 67 68 74 29 3b          zRight);
7cb0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  .      } else {.
7cc0: 20 20 20 20 20 20 20 20 72 65 73 3d 73 71 6c 69          res=sqli
7cd0: 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c  te3OsFileControl
7ce0: 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53  (pFile, SQLITE_S
7cf0: 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45  ET_LOCKPROXYFILE
7d00: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
7d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d20: 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b 0a 20          NULL);. 
7d30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
7d40: 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   res!=SQLITE_OK 
7d50: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7d60: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
7d70: 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 73 65  e, "failed to se
7d80: 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c  t lock proxy fil
7d90: 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  e");.        got
7da0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
7db0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
7dc0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
7dd0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
7de0: 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45  LE_LOCKING_STYLE
7df0: 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20 0a 20   */      .    . 
7e00: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
7e10: 41 20 5b 73 63 68 65 6d 61 2e 5d 73 79 6e 63 68  A [schema.]synch
7e20: 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52  ronous.  **   PR
7e30: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 79  AGMA [schema.]sy
7e40: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e  nchronous=OFF|ON
7e50: 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a  |NORMAL|FULL.  *
7e60: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
7e70: 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76   set the local v
7e80: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e 63  alue of the sync
7e90: 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43  hronous flag.  C
7ea0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
7eb0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65   local value doe
7ec0: 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67  s not make chang
7ed0: 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66  es to the disk f
7ee0: 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a  ile and the.  **
7ef0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77   default value w
7f00: 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20  ill be restored 
7f10: 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68  the next time th
7f20: 65 20 64 61 74 61 62 61 73 65 20 69 73 0a 20 20  e database is.  
7f30: 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a  ** opened..  */.
7f40: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53    case PragTyp_S
7f50: 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20  YNCHRONOUS: {.  
7f60: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
7f70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7f80: 67 6c 65 49 6e 74 28 76 2c 20 22 73 79 6e 63 68  gleInt(v, "synch
7f90: 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61  ronous", pDb->sa
7fa0: 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20  fety_level-1);. 
7fb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7fc0: 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
7fd0: 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73  mit ){.        s
7fe0: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7ff0: 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20  Parse, .        
8000: 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76 65      "Safety leve
8010: 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61  l may not be cha
8020: 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74 72  nged inside a tr
8030: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
8040: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8050: 20 20 69 6e 74 20 69 4c 65 76 65 6c 20 3d 20 28    int iLevel = (
8060: 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a  getSafetyLevel(z
8070: 52 69 67 68 74 2c 30 2c 31 29 2b 31 29 20 26 20  Right,0,1)+1) & 
8080: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
8090: 53 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20 20  S_MASK;.        
80a0: 69 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20  if( iLevel==0 ) 
80b0: 69 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20  iLevel = 1;.    
80c0: 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f      pDb->safety_
80d0: 6c 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a  level = iLevel;.
80e0: 20 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61          setAllPa
80f0: 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20  gerFlags(db);.  
8100: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
8110: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
8120: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
8130: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
8140: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
8150: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
8160: 4d 41 53 0a 20 20 63 61 73 65 20 50 72 61 67 54  MAS.  case PragT
8170: 79 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69  yp_FLAG: {.    i
8180: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a  f( zRight==0 ){.
8190: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
81a0: 6c 65 49 6e 74 28 76 2c 20 70 50 72 61 67 6d 61  leInt(v, pPragma
81b0: 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e 66 6c  ->zName, (db->fl
81c0: 61 67 73 20 26 20 70 50 72 61 67 6d 61 2d 3e 69  ags & pPragma->i
81d0: 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d  Arg)!=0 );.    }
81e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
81f0: 6d 61 73 6b 20 3d 20 70 50 72 61 67 6d 61 2d 3e  mask = pPragma->
8200: 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73 6b  iArg;    /* Mask
8210: 20 6f 66 20 62 69 74 73 20 74 6f 20 73 65 74 20   of bits to set 
8220: 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20  or clear. */.   
8230: 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
8240: 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ommit==0 ){.    
8250: 20 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20 6b      /* Foreign k
8260: 65 79 20 73 75 70 70 6f 72 74 20 6d 61 79 20 6e  ey support may n
8270: 6f 74 20 62 65 20 65 6e 61 62 6c 65 64 20 6f 72  ot be enabled or
8280: 20 64 69 73 61 62 6c 65 64 20 77 68 69 6c 65 20   disabled while 
8290: 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  not.        ** i
82a0: 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f  n auto-commit mo
82b0: 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20  de.  */.        
82c0: 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45  mask &= ~(SQLITE
82d0: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20  _ForeignKeys);. 
82e0: 20 20 20 20 20 7d 0a 23 69 66 20 53 51 4c 49 54       }.#if SQLIT
82f0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
8300: 41 54 49 4f 4e 0a 20 20 20 20 20 20 69 66 28 20  ATION.      if( 
8310: 64 62 2d 3e 61 75 74 68 2e 61 75 74 68 4c 65 76  db->auth.authLev
8320: 65 6c 3d 3d 55 41 55 54 48 5f 55 73 65 72 20 29  el==UAUTH_User )
8330: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20  {.        /* Do 
8340: 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64  not allow non-ad
8350: 6d 69 6e 20 75 73 65 72 73 20 74 6f 20 6d 6f 64  min users to mod
8360: 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20 61  ify the schema a
8370: 72 62 69 74 72 61 72 69 6c 79 20 2a 2f 0a 20 20  rbitrarily */.  
8380: 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28        mask &= ~(
8390: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
83a0: 6d 61 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  ma);.      }.#en
83b0: 64 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20 73  dif..      if( s
83c0: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
83d0: 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20  (zRight, 0) ){. 
83e0: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
83f0: 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20   |= mask;.      
8400: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
8410: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73  b->flags &= ~mas
8420: 6b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6d  k;.        if( m
8430: 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65  ask==SQLITE_Defe
8440: 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65 66 65  rFKs ) db->nDefe
8450: 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b  rredImmCons = 0;
8460: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
8470: 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65 20 66  /* Many of the f
8480: 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69  lag-pragmas modi
8490: 66 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  fy the code gene
84a0: 72 61 74 65 64 20 62 79 20 74 68 65 20 53 51 4c  rated by the SQL
84b0: 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69   .      ** compi
84c0: 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63  ler (eg. count_c
84d0: 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64 64 20  hanges). So add 
84e0: 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65 78 70  an opcode to exp
84f0: 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a  ire all.      **
8500: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
8510: 61 74 65 6d 65 6e 74 73 20 61 66 74 65 72 20 6d  atements after m
8520: 6f 64 69 66 79 69 6e 67 20 61 20 70 72 61 67 6d  odifying a pragm
8530: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a  a value..      *
8540: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
8550: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8560: 45 78 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20  Expire, 0, 0);. 
8570: 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72       setAllPager
8580: 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d  Flags(db);.    }
8590: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
85a0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
85b0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
85c0: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
85d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
85e0: 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  A_PRAGMAS.  /*. 
85f0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61 62   **   PRAGMA tab
8600: 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29  le_info(<table>)
8610: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
8620: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66  n a single row f
8630: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  or each column o
8640: 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  f the named tabl
8650: 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  e. The columns o
8660: 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75 72  f.  ** the retur
8670: 6e 65 64 20 64 61 74 61 20 73 65 74 20 61 72 65  ned data set are
8680: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a  :.  **.  ** cid:
8690: 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69          Column i
86a0: 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  d (numbered from
86b0: 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c 20   left to right, 
86c0: 73 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a 20  starting at 0). 
86d0: 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20 20   ** name:       
86e0: 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a  Column name.  **
86f0: 20 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f 6c   type:       Col
8700: 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  umn declaration 
8710: 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75  type..  ** notnu
8720: 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20 27  ll:    True if '
8730: 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61 72  NOT NULL' is par
8740: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
8750: 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c  aration.  ** dfl
8760: 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65 66  t_value: The def
8770: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
8780: 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e  he column, if an
8790: 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  y..  */.  case P
87a0: 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46  ragTyp_TABLE_INF
87b0: 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  O: if( zRight ){
87c0: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
87d0: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
87e0: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
87f0: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
8800: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
8810: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
8820: 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d  st char *azCol[]
8830: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 22 63   = {.         "c
8840: 69 64 22 2c 20 22 6e 61 6d 65 22 2c 20 22 74 79  id", "name", "ty
8850: 70 65 22 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20  pe", "notnull", 
8860: 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20 22 70  "dflt_value", "p
8870: 6b 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  k".      };.    
8880: 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20    int i, k;.    
8890: 20 20 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20    int nHidden = 
88a0: 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  0;.      Column 
88b0: 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64  *pCol;.      Ind
88c0: 65 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74 65  ex *pPk = sqlite
88d0: 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
88e0: 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 70 50  (pTab);.      pP
88f0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
8900: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
8910: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
8920: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
8930: 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
8940: 6d 65 73 28 76 2c 20 36 2c 20 61 7a 43 6f 6c 29  mes(v, 6, azCol)
8950: 3b 20 61 73 73 65 72 74 28 20 36 3d 3d 41 72 72  ; assert( 6==Arr
8960: 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
8970: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 69  .      sqlite3Vi
8980: 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
8990: 28 70 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a  (pParse, pTab);.
89a0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 70        for(i=0, p
89b0: 43 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b 20  Col=pTab->aCol; 
89c0: 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b  i<pTab->nCol; i+
89d0: 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20  +, pCol++){.    
89e0: 20 20 20 20 69 66 28 20 49 73 48 69 64 64 65 6e      if( IsHidden
89f0: 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a  Column(pCol) ){.
8a00: 20 20 20 20 20 20 20 20 20 20 6e 48 69 64 64 65            nHidde
8a10: 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63  n++;.          c
8a20: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
8a30: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28   }.        if( (
8a40: 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  pCol->colFlags &
8a50: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
8a60: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
8a70: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    k = 0;.       
8a80: 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d   }else if( pPk==
8a90: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
8aa0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
8ab0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
8ac0: 6f 72 28 6b 3d 31 3b 20 6b 3c 3d 70 54 61 62 2d  or(k=1; k<=pTab-
8ad0: 3e 6e 43 6f 6c 20 26 26 20 70 50 6b 2d 3e 61 69  >nCol && pPk->ai
8ae0: 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20  Column[k-1]!=i; 
8af0: 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d  k++){}.        }
8b00: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8b10: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
8b20: 20 31 2c 20 22 69 73 73 69 73 69 22 2c 0a 20 20   1, "issisi",.  
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 2d 6e               i-n
8b40: 48 69 64 64 65 6e 2c 0a 20 20 20 20 20 20 20 20  Hidden,.        
8b50: 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 4e 61         pCol->zNa
8b60: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
8b70: 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f     pCol->zType ?
8b80: 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22   pCol->zType : "
8b90: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
8ba0: 20 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20    pCol->notNull 
8bb0: 3f 20 31 20 3a 20 30 2c 0a 20 20 20 20 20 20 20  ? 1 : 0,.       
8bc0: 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 44          pCol->zD
8bd0: 66 6c 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  flt,.           
8be0: 20 20 20 20 6b 29 3b 0a 20 20 20 20 20 20 20 20      k);.        
8bf0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8c00: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
8c10: 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20  w, 1, 6);.      
8c20: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
8c30: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
8c40: 67 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20  gTyp_STATS: {.  
8c50: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
8c60: 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b  har *azCol[] = {
8c70: 20 22 74 61 62 6c 65 22 2c 20 22 69 6e 64 65 78   "table", "index
8c80: 22 2c 20 22 77 69 64 74 68 22 2c 20 22 68 65 69  ", "width", "hei
8c90: 67 68 74 22 20 7d 3b 0a 20 20 20 20 49 6e 64 65  ght" };.    Inde
8ca0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 48 61 73  x *pIdx;.    Has
8cb0: 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20  hElem *i;.    v 
8cc0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
8cd0: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 70 50  (pParse);.    pP
8ce0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a  arse->nMem = 4;.
8cf0: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
8d00: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
8d10: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 65  se, iDb);.    se
8d20: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
8d30: 76 2c 20 34 2c 20 61 7a 43 6f 6c 29 3b 20 20 61  v, 4, azCol);  a
8d40: 73 73 65 72 74 28 20 34 3d 3d 41 72 72 61 79 53  ssert( 4==ArrayS
8d50: 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
8d60: 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61    for(i=sqliteHa
8d70: 73 68 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53  shFirst(&pDb->pS
8d80: 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b  chema->tblHash);
8d90: 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68   i; i=sqliteHash
8da0: 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20  Next(i)){.      
8db0: 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
8dc0: 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b  liteHashData(i);
8dd0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8de0: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
8df0: 2c 20 22 73 73 69 69 22 2c 0a 20 20 20 20 20 20  , "ssii",.      
8e00: 20 20 20 20 20 70 54 61 62 2d 3e 7a 4e 61 6d 65       pTab->zName
8e10: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 30 2c 0a  ,.           0,.
8e20: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
8e30: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
8e40: 6e 74 28 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f  nt(pTab->szTabRo
8e50: 77 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28  w),.           (
8e60: 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73  int)sqlite3LogEs
8e70: 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 6e 52 6f  tToInt(pTab->nRo
8e80: 77 4c 6f 67 45 73 74 29 29 3b 0a 20 20 20 20 20  wLogEst));.     
8e90: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8ea0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
8eb0: 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20  ow, 1, 4);.     
8ec0: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
8ed0: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
8ee0: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b  dx=pIdx->pNext){
8ef0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8f00: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
8f10: 20 32 2c 20 22 73 69 69 22 2c 0a 20 20 20 20 20   2, "sii",.     
8f20: 20 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d        pIdx->zNam
8f30: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 69  e,.           (i
8f40: 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  nt)sqlite3LogEst
8f50: 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64  ToInt(pIdx->szId
8f60: 78 52 6f 77 29 2c 0a 20 20 20 20 20 20 20 20 20  xRow),.         
8f70: 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f    (int)sqlite3Lo
8f80: 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e  gEstToInt(pIdx->
8f90: 61 69 52 6f 77 4c 6f 67 45 73 74 5b 30 5d 29 29  aiRowLogEst[0]))
8fa0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
8fb0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8fc0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
8fd0: 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  4);.      }.    
8fe0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
8ff0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
9000: 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a  NDEX_INFO: if( z
9010: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64  Right ){.    Ind
9020: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61  ex *pIdx;.    Ta
9030: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
9040: 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Idx = sqlite3Fin
9050: 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68  dIndex(db, zRigh
9060: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
9070: 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20 73   pIdx ){.      s
9080: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
9090: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20   *azCol[] = {.  
90a0: 20 20 20 20 20 20 20 22 73 65 71 6e 6f 22 2c 20         "seqno", 
90b0: 22 63 69 64 22 2c 20 22 6e 61 6d 65 22 2c 20 22  "cid", "name", "
90c0: 64 65 73 63 22 2c 20 22 63 6f 6c 6c 22 2c 20 22  desc", "coll", "
90d0: 6b 65 79 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20  key".      };.  
90e0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
90f0: 20 69 6e 74 20 6d 78 3b 0a 20 20 20 20 20 20 69   int mx;.      i
9100: 66 28 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67  f( pPragma->iArg
9110: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 50   ){.        /* P
9120: 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66  RAGMA index_xinf
9130: 6f 20 28 6e 65 77 65 72 20 76 65 72 73 69 6f 6e  o (newer version
9140: 20 77 69 74 68 20 6d 6f 72 65 20 72 6f 77 73 20   with more rows 
9150: 61 6e 64 20 63 6f 6c 75 6d 6e 73 29 20 2a 2f 0a  and columns) */.
9160: 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49 64          mx = pId
9170: 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20  x->nColumn;.    
9180: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
9190: 20 3d 20 36 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 6;.      }els
91a0: 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 50 52  e{.        /* PR
91b0: 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20  AGMA index_info 
91c0: 28 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 29  (legacy version)
91d0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20 3d   */.        mx =
91e0: 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a   pIdx->nKeyCol;.
91f0: 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
9200: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20  nMem = 3;.      
9210: 7d 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 70  }.      pTab = p
9220: 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20  Idx->pTable;.   
9230: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
9240: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
9250: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 61  e, iDb);.      a
9260: 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e  ssert( pParse->n
9270: 4d 65 6d 3c 3d 41 72 72 61 79 53 69 7a 65 28 61  Mem<=ArraySize(a
9280: 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 73  zCol) );.      s
9290: 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
92a0: 28 76 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  (v, pParse->nMem
92b0: 2c 20 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20  , azCol);.      
92c0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6d 78 3b 20 69  for(i=0; i<mx; i
92d0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 31 36  ++){.        i16
92e0: 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69   cnum = pIdx->ai
92f0: 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20  Column[i];.     
9300: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
9310: 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69  ltiLoad(v, 1, "i
9320: 69 73 22 2c 20 69 2c 20 63 6e 75 6d 2c 0a 20 20  is", i, cnum,.  
9330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9340: 20 20 20 20 20 20 20 20 20 20 20 63 6e 75 6d 3c             cnum<
9350: 30 20 3f 20 30 20 3a 20 70 54 61 62 2d 3e 61 43  0 ? 0 : pTab->aC
9360: 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 29 3b  ol[cnum].zName);
9370: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 72  .        if( pPr
9380: 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20  agma->iArg ){.  
9390: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
93a0: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
93b0: 34 2c 20 22 69 73 69 22 2c 0a 20 20 20 20 20 20  4, "isi",.      
93c0: 20 20 20 20 20 20 70 49 64 78 2d 3e 61 53 6f 72        pIdx->aSor
93d0: 74 4f 72 64 65 72 5b 69 5d 2c 0a 20 20 20 20 20  tOrder[i],.     
93e0: 20 20 20 20 20 20 20 70 49 64 78 2d 3e 61 7a 43         pIdx->azC
93f0: 6f 6c 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20  oll[i],.        
9400: 20 20 20 20 69 3c 70 49 64 78 2d 3e 6e 4b 65 79      i<pIdx->nKey
9410: 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  Col);.        }.
9420: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9430: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9440: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 70 50  ResultRow, 1, pP
9450: 61 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20 20 20  arse->nMem);.   
9460: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
9470: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
9480: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49  PragTyp_INDEX_LI
9490: 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  ST: if( zRight )
94a0: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
94b0: 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  x;.    Table *pT
94c0: 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20  ab;.    int i;. 
94d0: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
94e0: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
94f0: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
9500: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
9510: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
9520: 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20  char *azCol[] = 
9530: 7b 0a 20 20 20 20 20 20 20 20 22 73 65 71 22 2c  {.        "seq",
9540: 20 22 6e 61 6d 65 22 2c 20 22 75 6e 69 71 75 65   "name", "unique
9550: 22 2c 20 22 6f 72 69 67 69 6e 22 2c 20 22 70 61  ", "origin", "pa
9560: 72 74 69 61 6c 22 0a 20 20 20 20 20 20 7d 3b 0a  rtial".      };.
9570: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
9580: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
9590: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
95a0: 6e 4d 65 6d 20 3d 20 35 3b 0a 20 20 20 20 20 20  nMem = 5;.      
95b0: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
95c0: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
95d0: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 65 74 41  iDb);.      setA
95e0: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
95f0: 20 35 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73   5, azCol);  ass
9600: 65 72 74 28 20 35 3d 3d 41 72 72 61 79 53 69 7a  ert( 5==ArraySiz
9610: 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
9620: 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d    for(pIdx=pTab-
9630: 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49  >pIndex, i=0; pI
9640: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
9650: 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20  Next, i++){.    
9660: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
9670: 61 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22  azOrigin[] = { "
9680: 63 22 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b  c", "u", "pk" };
9690: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
96a0: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
96b0: 20 31 2c 20 22 69 73 69 73 69 22 2c 0a 20 20 20   1, "isisi",.   
96c0: 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20          i,.     
96d0: 20 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d        pIdx->zNam
96e0: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 49 73  e,.           Is
96f0: 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78  UniqueIndex(pIdx
9700: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 61 7a  ),.           az
9710: 4f 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78  Origin[pIdx->idx
9720: 54 79 70 65 5d 2c 0a 20 20 20 20 20 20 20 20 20  Type],.         
9730: 20 20 70 49 64 78 2d 3e 70 50 61 72 74 49 64 78    pIdx->pPartIdx
9740: 57 68 65 72 65 21 3d 30 29 3b 0a 20 20 20 20 20  Where!=0);.     
9750: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9760: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9770: 74 52 6f 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20  tRow, 1, 5);.   
9780: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
9790: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
97a0: 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53 45  PragTyp_DATABASE
97b0: 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 73 74 61  _LIST: {.    sta
97c0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
97d0: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65 71  azCol[] = { "seq
97e0: 22 2c 20 22 6e 61 6d 65 22 2c 20 22 66 69 6c 65  ", "name", "file
97f0: 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  " };.    int i;.
9800: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
9810: 20 3d 20 33 3b 0a 20 20 20 20 73 65 74 41 6c 6c   = 3;.    setAll
9820: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 33  ColumnNames(v, 3
9830: 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74  , azCol); assert
9840: 28 20 33 3d 3d 41 72 72 61 79 53 69 7a 65 28 61  ( 3==ArraySize(a
9850: 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72  zCol) );.    for
9860: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
9870: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
9880: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d   db->aDb[i].pBt=
9890: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
98a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
98b0: 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30  >aDb[i].zName!=0
98c0: 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
98d0: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
98e0: 2c 20 31 2c 20 22 69 73 73 22 2c 0a 20 20 20 20  , 1, "iss",.    
98f0: 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20       i,.        
9900: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
9910: 65 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69  e,.         sqli
9920: 74 65 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e  te3BtreeGetFilen
9930: 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  ame(db->aDb[i].p
9940: 42 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Bt));.      sqli
9950: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9960: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9970: 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , 3);.    }.  }.
9980: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65    break;..  case
9990: 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49   PragTyp_COLLATI
99a0: 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 73  ON_LIST: {.    s
99b0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
99c0: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73   *azCol[] = { "s
99d0: 65 71 22 2c 20 22 6e 61 6d 65 22 20 7d 3b 0a 20  eq", "name" };. 
99e0: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
99f0: 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20    HashElem *p;. 
9a00: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
9a10: 3d 20 32 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43  = 2;.    setAllC
9a20: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 32 2c  olumnNames(v, 2,
9a30: 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28   azCol); assert(
9a40: 20 32 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a   2==ArraySize(az
9a50: 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28  Col) );.    for(
9a60: 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  p=sqliteHashFirs
9a70: 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29  t(&db->aCollSeq)
9a80: 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73  ; p; p=sqliteHas
9a90: 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20  hNext(p)){.     
9aa0: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20   CollSeq *pColl 
9ab0: 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c  = (CollSeq *)sql
9ac0: 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a  iteHashData(p);.
9ad0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9ae0: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
9af0: 20 22 69 73 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c   "is", i++, pCol
9b00: 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  l->zName);.     
9b10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9b20: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
9b30: 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d  ow, 1, 2);.    }
9b40: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
9b50: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
9b60: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
9b70: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
9b80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
9b90: 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72  GN_KEY.  case Pr
9ba0: 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45  agTyp_FOREIGN_KE
9bb0: 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67  Y_LIST: if( zRig
9bc0: 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a  ht ){.    FKey *
9bd0: 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  pFK;.    Table *
9be0: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
9bf0: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
9c00: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
9c10: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
9c20: 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71   ){.      v = sq
9c30: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
9c40: 72 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20  rse);.      pFK 
9c50: 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20  = pTab->pFKey;. 
9c60: 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a       if( pFK ){.
9c70: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
9c80: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
9c90: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20  [] = {.         
9ca0: 20 20 22 69 64 22 2c 20 22 73 65 71 22 2c 20 22    "id", "seq", "
9cb0: 74 61 62 6c 65 22 2c 20 22 66 72 6f 6d 22 2c 20  table", "from", 
9cc0: 22 74 6f 22 2c 20 22 6f 6e 5f 75 70 64 61 74 65  "to", "on_update
9cd0: 22 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 0a  ", "on_delete",.
9ce0: 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63             "matc
9cf0: 68 22 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20  h".        };.  
9d00: 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b        int i = 0;
9d10: 20 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65   .        pParse
9d20: 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20  ->nMem = 8;.    
9d30: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
9d40: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
9d50: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
9d60: 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
9d70: 6d 65 73 28 76 2c 20 38 2c 20 61 7a 43 6f 6c 29  mes(v, 8, azCol)
9d80: 3b 20 61 73 73 65 72 74 28 20 38 3d 3d 41 72 72  ; assert( 8==Arr
9d90: 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
9da0: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 70  .        while(p
9db0: 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  FK){.          i
9dc0: 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20  nt j;.          
9dd0: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e  for(j=0; j<pFK->
9de0: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
9df0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9e00: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
9e10: 31 2c 20 22 69 69 73 73 73 73 73 73 22 2c 0a 20  1, "iissssss",. 
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e30: 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20 20    i,.           
9e40: 20 20 20 20 20 20 20 20 6a 2c 0a 20 20 20 20 20          j,.     
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46                pF
9e60: 4b 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20 20 20 20  K->zTo,.        
9e70: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
9e80: 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b  >aCol[pFK->aCol[
9e90: 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c  j].iFrom].zName,
9ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9eb0: 20 20 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d      pFK->aCol[j]
9ec0: 2e 7a 43 6f 6c 2c 0a 20 20 20 20 20 20 20 20 20  .zCol,.         
9ed0: 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e            action
9ee0: 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f  Name(pFK->aActio
9ef0: 6e 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20 55 50  n[1]),  /* ON UP
9f00: 44 41 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20  DATE */.        
9f10: 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f             actio
9f20: 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69  nName(pFK->aActi
9f30: 6f 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e 20 44  on[0]),  /* ON D
9f40: 45 4c 45 54 45 20 2a 2f 0a 20 20 20 20 20 20 20  ELETE */.       
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 4f 4e              "NON
9f60: 45 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  E");.           
9f70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9f80: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
9f90: 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20  ow, 1, 8);.     
9fa0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
9fb0: 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20   ++i;.          
9fc0: 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74  pFK = pFK->pNext
9fd0: 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  From;.        }.
9fe0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9ff0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
a000: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
a010: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
a020: 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64  N_KEY) */..#ifnd
a030: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
a040: 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64  OREIGN_KEY.#ifnd
a050: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
a060: 52 49 47 47 45 52 0a 20 20 63 61 73 65 20 50 72  RIGGER.  case Pr
a070: 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45  agTyp_FOREIGN_KE
a080: 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46  Y_CHECK: {.    F
a090: 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20  Key *pFK;       
a0a0: 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69        /* A forei
a0b0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
a0c0: 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  t */.    Table *
a0d0: 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
a0e0: 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63  /* Child table c
a0f0: 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43  ontain "REFERENC
a100: 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20  ES" keyword */. 
a110: 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e     Table *pParen
a120: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72  t;        /* Par
a130: 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20 63  ent table that c
a140: 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a  hild points to *
a150: 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  /.    Index *pId
a160: 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  x;           /* 
a170: 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61 72  Index in the par
a180: 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  ent table */.   
a190: 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
a1a0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
a1b0: 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67  counter:  Foreig
a1c0: 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72  n key number for
a1d0: 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74   pTab */.    int
a1e0: 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
a1f0: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
a200: 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74  ter:  Field of t
a210: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a  he foreign key *
a220: 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  /.    HashElem *
a230: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  k;           /* 
a240: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e  Loop counter:  N
a250: 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68  ext table in sch
a260: 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78  ema */.    int x
a270: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a280: 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69    /* result vari
a290: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
a2a0: 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20  regResult;      
a2b0: 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72     /* 3 register
a2c0: 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75  s to hold a resu
a2d0: 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e  lt row */.    in
a2e0: 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20  t regKey;       
a2f0: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
a300: 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72   to hold key for
a310: 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b   checking the FK
a320: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
a330: 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ow;            /
a340: 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f 20 68  * Registers to h
a350: 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70  old a row from p
a360: 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  Tab */.    int a
a370: 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20  ddrTop;         
a380: 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f    /* Top of a lo
a390: 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65  op checking fore
a3a0: 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20  ign keys */.    
a3b0: 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20  int addrOk;     
a3c0: 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
a3d0: 65 72 65 20 69 66 20 74 68 65 20 6b 65 79 20 69  ere if the key i
a3e0: 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20  s OK */.    int 
a3f0: 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20  *aiCols;        
a400: 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70     /* child to p
a410: 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70  arent column map
a420: 70 69 6e 67 20 2a 2f 0a 20 20 20 20 73 74 61 74  ping */.    stat
a430: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
a440: 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c  zCol[] = { "tabl
a450: 65 22 2c 20 22 72 6f 77 69 64 22 2c 20 22 70 61  e", "rowid", "pa
a460: 72 65 6e 74 22 2c 20 22 66 6b 69 64 22 20 7d 3b  rent", "fkid" };
a470: 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74 20  ..    regResult 
a480: 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31  = pParse->nMem+1
a490: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
a4a0: 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67  em += 4;.    reg
a4b0: 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Key = ++pParse->
a4c0: 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77  nMem;.    regRow
a4d0: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
a4e0: 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  m;.    v = sqlit
a4f0: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
a500: 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  );.    setAllCol
a510: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61  umnNames(v, 4, a
a520: 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 34  zCol); assert( 4
a530: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
a540: 6c 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  l) );.    sqlite
a550: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
a560: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
a570: 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61      k = sqliteHa
a580: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62  shFirst(&db->aDb
a590: 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74  [iDb].pSchema->t
a5a0: 62 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69  blHash);.    whi
a5b0: 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69  le( k ){.      i
a5c0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
a5d0: 20 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69       pTab = sqli
a5e0: 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70  te3LocateTable(p
a5f0: 50 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74  Parse, 0, zRight
a600: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , zDb);.        
a610: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  k = 0;.      }el
a620: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62  se{.        pTab
a630: 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74   = (Table*)sqlit
a640: 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20  eHashData(k);.  
a650: 20 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65        k = sqlite
a660: 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20  HashNext(k);.   
a670: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
a680: 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e  Tab==0 || pTab->
a690: 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69  pFKey==0 ) conti
a6a0: 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
a6b0: 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72  e3TableLock(pPar
a6c0: 73 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74  se, iDb, pTab->t
a6d0: 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e  num, 0, pTab->zN
a6e0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ame);.      if( 
a6f0: 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f  pTab->nCol+regRo
a700: 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29  w>pParse->nMem )
a710: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
a720: 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67  pTab->nCol + reg
a730: 52 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Row;.      sqlit
a740: 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72  e3OpenTable(pPar
a750: 73 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62  se, 0, iDb, pTab
a760: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
a770: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a780: 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 72  eLoadString(v, r
a790: 65 67 52 65 73 75 6c 74 2c 20 70 54 61 62 2d 3e  egResult, pTab->
a7a0: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f  zName);.      fo
a7b0: 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d  r(i=1, pFK=pTab-
a7c0: 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b  >pFKey; pFK; i++
a7d0: 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74  , pFK=pFK->pNext
a7e0: 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70  From){.        p
a7f0: 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33  Parent = sqlite3
a800: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46  FindTable(db, pF
a810: 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20  K->zTo, zDb);.  
a820: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
a830: 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  t==0 ) continue;
a840: 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20  .        pIdx = 
a850: 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  0;.        sqlit
a860: 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72  e3TableLock(pPar
a870: 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74  se, iDb, pParent
a880: 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65  ->tnum, 0, pPare
a890: 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  nt->zName);.    
a8a0: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
a8b0: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
a8c0: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
a8d0: 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20  K, &pIdx, 0);.  
a8e0: 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29        if( x==0 )
a8f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
a900: 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20  pIdx==0 ){.     
a910: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70         sqlite3Op
a920: 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  enTable(pParse, 
a930: 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c  i, iDb, pParent,
a940: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
a950: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
a960: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a970: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
a980: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c   OP_OpenRead, i,
a990: 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62   pIdx->tnum, iDb
a9a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
a9b0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b  qlite3VdbeSetP4K
a9c0: 65 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70  eyInfo(pParse, p
a9d0: 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Idx);.          
a9e0: 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
a9f0: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
aa00: 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
aa10: 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
aa20: 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
aa30: 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e  t( pParse->nErr>
aa40: 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20  0 || pFK==0 );. 
aa50: 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62       if( pFK ) b
aa60: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
aa70: 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29  pParse->nTab<i )
aa80: 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20   pParse->nTab = 
aa90: 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70  i;.      addrTop
aaa0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
aab0: 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e  dOp1(v, OP_Rewin
aac0: 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72  d, 0); VdbeCover
aad0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f  age(v);.      fo
aae0: 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d  r(i=1, pFK=pTab-
aaf0: 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b  >pFKey; pFK; i++
ab00: 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74  , pFK=pFK->pNext
ab10: 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70  From){.        p
ab20: 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33  Parent = sqlite3
ab30: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46  FindTable(db, pF
ab40: 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20  K->zTo, zDb);.  
ab50: 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a        pIdx = 0;.
ab60: 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d          aiCols =
ab70: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
ab80: 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20  pParent ){.     
ab90: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
aba0: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
abb0: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
abc0: 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f  FK, &pIdx, &aiCo
abd0: 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  ls);.          a
abe0: 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20  ssert( x==0 );. 
abf0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ac00: 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65   addrOk = sqlite
ac10: 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76  3VdbeMakeLabel(v
ac20: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
ac30: 50 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d  Parent && pIdx==
ac40: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  0 ){.          i
ac50: 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61  nt iKey = pFK->a
ac60: 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20  Col[0].iFrom;.  
ac70: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
ac80: 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c  iKey>=0 && iKey<
ac90: 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20  pTab->nCol );.  
aca0: 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79          if( iKey
acb0: 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b  !=pTab->iPKey ){
acc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
acd0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
ace0: 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20  , OP_Column, 0, 
acf0: 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20  iKey, regRow);. 
ad00: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ad10: 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
ad20: 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72  v, pTab, iKey, r
ad30: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
ad40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ad50: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
ad60: 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72  ll, regRow, addr
ad70: 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  Ok); VdbeCoverag
ad80: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
ad90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ada0: 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65  Op2(v, OP_MustBe
adb0: 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20  Int, regRow, .  
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
add0: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
ade0: 64 64 72 28 76 29 2b 33 29 3b 20 56 64 62 65 43  ddr(v)+3); VdbeC
adf0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ae00: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
ae10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ae20: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ae30: 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f  _Rowid, 0, regRo
ae40: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  w);.          }.
ae50: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ae60: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
ae70: 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20  P_NotExists, i, 
ae80: 30 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65  0, regRow); Vdbe
ae90: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
aea0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
aeb0: 62 65 47 6f 74 6f 28 76 2c 20 61 64 64 72 4f 6b  beGoto(v, addrOk
aec0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
aed0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
aee0: 28 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43  (v, sqlite3VdbeC
aef0: 75 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29  urrentAddr(v)-2)
af00: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
af10: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a  .          for(j
af20: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
af30: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
af40: 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f     sqlite3ExprCo
af50: 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
af60: 6c 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20  le(v, pTab, 0,. 
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af80: 20 20 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c             aiCol
af90: 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20  s ? aiCols[j] : 
afa0: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72  pFK->aCol[j].iFr
afb0: 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20  om, regRow+j);. 
afc0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
afd0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
afe0: 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f  OP_IsNull, regRo
aff0: 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64  w+j, addrOk); Vd
b000: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
b010: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
b020: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
b030: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
b040: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b050: 34 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  4(v, OP_MakeReco
b060: 72 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d  rd, regRow, pFK-
b070: 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20  >nCol, regKey,. 
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
b0a0: 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
b0b0: 79 53 74 72 28 64 62 2c 70 49 64 78 29 2c 20 70  yStr(db,pIdx), p
b0c0: 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20  FK->nCol);.     
b0d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b0e0: 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f  beAddOp4Int(v, O
b0f0: 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72  P_Found, i, addr
b100: 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a  Ok, regKey, 0);.
b110: 20 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65              Vdbe
b120: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
b130: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
b140: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
b150: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b160: 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67  OP_Rowid, 0, reg
b170: 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20  Result+1);.     
b180: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
b190: 6c 74 69 4c 6f 61 64 28 76 2c 20 72 65 67 52 65  ltiLoad(v, regRe
b1a0: 73 75 6c 74 2b 32 2c 20 22 73 69 22 2c 20 70 46  sult+2, "si", pF
b1b0: 4b 2d 3e 7a 54 6f 2c 20 69 2d 31 29 3b 0a 20 20  K->zTo, i-1);.  
b1c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b1d0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
b1e0: 73 75 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75  sultRow, regResu
b1f0: 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  lt, 4);.        
b200: 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c  sqlite3VdbeResol
b210: 76 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f  veLabel(v, addrO
b220: 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  k);.        sqli
b230: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 69  te3DbFree(db, ai
b240: 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Cols);.      }. 
b250: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b260: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78  AddOp2(v, OP_Nex
b270: 74 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29  t, 0, addrTop+1)
b280: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
b290: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
b2a0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
b2b0: 61 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a  addrTop);.    }.
b2c0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
b2d0: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
b2e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
b2f0: 47 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  GER) */.#endif /
b300: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
b310: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
b320: 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  EY) */..#ifndef 
b330: 4e 44 45 42 55 47 0a 20 20 63 61 73 65 20 50 72  NDEBUG.  case Pr
b340: 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41  agTyp_PARSER_TRA
b350: 43 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  CE: {.    if( zR
b360: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
b370: 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  ( sqlite3GetBool
b380: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29  ean(zRight, 0) )
b390: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
b3a0: 33 50 61 72 73 65 72 54 72 61 63 65 28 73 74 64  3ParserTrace(std
b3b0: 6f 75 74 2c 20 22 70 61 72 73 65 72 3a 20 22 29  out, "parser: ")
b3c0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
b3d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
b3e0: 72 73 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b  rserTrace(0, 0);
b3f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
b400: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
b410: 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61  if..  /* Reinsta
b420: 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64 20  ll the LIKE and 
b430: 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20  GLOB functions. 
b440: 20 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66 20   The variant of 
b450: 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20 77  LIKE.  ** used w
b460: 69 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e 73  ill be case sens
b470: 69 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65 70  itive or not dep
b480: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52 48  ending on the RH
b490: 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  S..  */.  case P
b4a0: 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53  ragTyp_CASE_SENS
b4b0: 49 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20  ITIVE_LIKE: {.  
b4c0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
b4d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 67        sqlite3Reg
b4e0: 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
b4f0: 6e 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65  ns(db, sqlite3Ge
b500: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
b510: 20 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   0));.    }.  }.
b520: 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65    break;..#ifnde
b530: 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  f SQLITE_INTEGRI
b540: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
b550: 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  AX.# define SQLI
b560: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
b570: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30  CK_ERROR_MAX 100
b580: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
b590: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
b5a0: 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f  EGRITY_CHECK.  /
b5b0: 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f  * Pragma "quick_
b5c0: 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63 65  check" is reduce
b5d0: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20  d version of .  
b5e0: 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  ** integrity_che
b5f0: 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64  ck designed to d
b600: 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62  etect most datab
b610: 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20  ase corruption. 
b620: 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74   ** without most
b630: 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61 64   of the overhead
b640: 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67   of a full integ
b650: 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f  rity-check..  */
b660: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
b670: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a  INTEGRITY_CHECK:
b680: 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c   {.    int i, j,
b690: 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20   addr, mxErr;.. 
b6a0: 20 20 20 2f 2a 20 43 6f 64 65 20 74 68 61 74 20     /* Code that 
b6b0: 61 70 70 65 61 72 73 20 61 74 20 74 68 65 20 65  appears at the e
b6c0: 6e 64 20 6f 66 20 74 68 65 20 69 6e 74 65 67 72  nd of the integr
b6d0: 69 74 79 20 63 68 65 63 6b 2e 20 20 49 66 20 6e  ity check.  If n
b6e0: 6f 20 65 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d  o error.    ** m
b6f0: 65 73 73 61 67 65 73 20 68 61 76 65 20 62 65 65  essages have bee
b700: 6e 20 67 65 6e 65 72 61 74 65 64 2c 20 6f 75 74  n generated, out
b710: 70 75 74 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69  put OK.  Otherwi
b720: 73 65 20 6f 75 74 70 75 74 20 74 68 65 0a 20 20  se output the.  
b730: 20 20 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73 61    ** error messa
b740: 67 65 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 74  ge.    */.    st
b750: 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69  atic const int i
b760: 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54  Ln = VDBE_OFFSET
b770: 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20  _LINENO(2);.    
b780: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
b790: 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b  eOpList endCode[
b7a0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50  ] = {.      { OP
b7b0: 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c  _AddImm,      1,
b7c0: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   0,        0},  
b7d0: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
b7e0: 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20  { OP_If,        
b7f0: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30    1, 0,        0
b800: 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
b810: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38      { OP_String8
b820: 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20 20  ,     0, 3,     
b830: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a     0},    /* 2 *
b840: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73  /.      { OP_Res
b850: 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20  ultRow,   3, 1, 
b860: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d         0},.    }
b870: 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51 75 69  ;..    int isQui
b880: 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c  ck = (sqlite3Tol
b890: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
b8a0: 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  'q');..    /* If
b8b0: 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d   the PRAGMA comm
b8c0: 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65 20 66  and was of the f
b8d0: 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64 62 3e  orm "PRAGMA <db>
b8e0: 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
b8f0: 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20 69  ",.    ** then i
b900: 44 62 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  Db is set to the
b910: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
b920: 74 61 62 61 73 65 20 69 64 65 6e 74 69 66 69 65  tabase identifie
b930: 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a  d by <db>..    *
b940: 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  * In this case, 
b950: 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66  the integrity of
b960: 20 64 61 74 61 62 61 73 65 20 69 44 62 20 6f 6e   database iDb on
b970: 6c 79 20 69 73 20 76 65 72 69 66 69 65 64 20 62  ly is verified b
b980: 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44 42  y.    ** the VDB
b990: 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f 77 2e  E created below.
b9a0: 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f  .    **.    ** O
b9b0: 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65  therwise, if the
b9c0: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d   command was sim
b9d0: 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e 74 65  ply "PRAGMA inte
b9e0: 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28 6f 72  grity_check" (or
b9f0: 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d 41 20  .    ** "PRAGMA 
ba00: 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74  quick_check"), t
ba10: 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74  hen iDb is set t
ba20: 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63 61 73  o 0. In this cas
ba30: 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20 20 2a  e, set iDb.    *
ba40: 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f  * to -1 here, to
ba50: 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 74   indicate that t
ba60: 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64 20 76  he VDBE should v
ba70: 65 72 69 66 79 20 74 68 65 20 69 6e 74 65 67 72  erify the integr
ba80: 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c  ity.    ** of al
ba90: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
baa0: 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73  ases.  */.    as
bab0: 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a  sert( iDb>=0 );.
bac0: 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
bad0: 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b  =0 || pId2->z );
bae0: 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 7a  .    if( pId2->z
baf0: 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a  ==0 ) iDb = -1;.
bb00: 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
bb10: 7a 65 20 74 68 65 20 56 44 42 45 20 70 72 6f 67  ze the VDBE prog
bb20: 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72 73  ram */.    pPars
bb30: 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20  e->nMem = 6;.   
bb40: 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d   setOneColumnNam
bb50: 65 28 76 2c 20 22 69 6e 74 65 67 72 69 74 79 5f  e(v, "integrity_
bb60: 63 68 65 63 6b 22 29 3b 0a 0a 20 20 20 20 2f 2a  check");..    /*
bb70: 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   Set the maximum
bb80: 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a   error count */.
bb90: 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49      mxErr = SQLI
bba0: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
bbb0: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20  CK_ERROR_MAX;.  
bbc0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
bbd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65 74        sqlite3Get
bbe0: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d  Int32(zRight, &m
bbf0: 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28  xErr);.      if(
bc00: 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20   mxErr<=0 ){.   
bc10: 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c       mxErr = SQL
bc20: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
bc30: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20  ECK_ERROR_MAX;. 
bc40: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
bc50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bc60: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
bc70: 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a  , mxErr, 1);  /*
bc80: 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72   reg[1] holds er
bc90: 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20  rors left */..  
bca0: 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67    /* Do an integ
bcb0: 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61  rity check on ea
bcc0: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
bcd0: 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
bce0: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
bcf0: 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d  {.      HashElem
bd00: 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20   *x;.      Hash 
bd10: 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e  *pTbls;.      in
bd20: 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  t cnt = 0;..    
bd30: 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44    if( OMIT_TEMPD
bd40: 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74  B && i==1 ) cont
bd50: 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20  inue;.      if( 
bd60: 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62  iDb>=0 && i!=iDb
bd70: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20   ) continue;..  
bd80: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
bd90: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
bda0: 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64  se, i);.      ad
bdb0: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
bdc0: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
bdd0: 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20  os, 1); /* Halt 
bde0: 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73  if out of errors
bdf0: 20 2a 2f 0a 20 20 20 20 20 20 56 64 62 65 43 6f   */.      VdbeCo
be00: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
be10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
be20: 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30  p2(v, OP_Halt, 0
be30: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
be40: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
be50: 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20  v, addr);..     
be60: 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72   /* Do an integr
be70: 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65  ity check of the
be80: 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2a   B-Tree.      **
be90: 0a 20 20 20 20 20 20 2a 2a 20 42 65 67 69 6e 20  .      ** Begin 
bea0: 62 79 20 66 69 6c 6c 69 6e 67 20 72 65 67 69 73  by filling regis
beb0: 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77  ters 2, 3, ... w
bec0: 69 74 68 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ith the root pag
bed0: 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20 20 20  es numbers.     
bee0: 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c   ** for all tabl
bef0: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69  es and indices i
bf00: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  n the database..
bf10: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
bf20: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
bf30: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
bf40: 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20 20 20  , i, 0) );.     
bf50: 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44   pTbls = &db->aD
bf60: 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62  b[i].pSchema->tb
bf70: 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66 6f 72  lHash;.      for
bf80: 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (x=sqliteHashFir
bf90: 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d  st(pTbls); x; x=
bfa0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78  sqliteHashNext(x
bfb0: 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c  )){.        Tabl
bfc0: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
bfd0: 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20  HashData(x);.   
bfe0: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78       Index *pIdx
bff0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 48 61  ;.        if( Ha
c000: 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a  sRowid(pTab) ){.
c010: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c020: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c030: 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61 62 2d  P_Integer, pTab-
c040: 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20  >tnum, 2+cnt);. 
c050: 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d           VdbeCom
c060: 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70  ment((v, "%s", p
c070: 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20  Tab->zName));.  
c080: 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20          cnt++;. 
c090: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c0a0: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
c0b0: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
c0c0: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b  dx=pIdx->pNext){
c0d0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
c0e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c0f0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78  OP_Integer, pIdx
c100: 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a  ->tnum, 2+cnt);.
c110: 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f            VdbeCo
c120: 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20  mment((v, "%s", 
c130: 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20  pIdx->zName));. 
c140: 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a           cnt++;.
c150: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
c160: 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  }..      /* Make
c170: 20 73 75 72 65 20 73 75 66 66 69 63 69 65 6e 74   sure sufficient
c180: 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   number of regis
c190: 74 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 61  ters have been a
c1a0: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20  llocated */.    
c1b0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
c1c0: 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d   MAX( pParse->nM
c1d0: 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a 20 20  em, cnt+8 );..  
c1e0: 20 20 20 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d      /* Do the b-
c1f0: 74 72 65 65 20 69 6e 74 65 67 72 69 74 79 20 63  tree integrity c
c200: 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73  hecks */.      s
c210: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
c220: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  (v, OP_Integrity
c230: 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a  Ck, 2, cnt, 1);.
c240: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c250: 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28 75 38  eChangeP5(v, (u8
c260: 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20  )i);.      addr 
c270: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
c280: 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op1(v, OP_IsNull
c290: 2c 20 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 2); VdbeCovera
c2a0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c  ge(v);.      sql
c2b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
c2c0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
c2d0: 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   3, 0,.         
c2e0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
c2f0: 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62  b, "*** in datab
c300: 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64  ase %s ***\n", d
c310: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29  b->aDb[i].zName)
c320: 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f 44 59  ,.         P4_DY
c330: 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 73 71  NAMIC);.      sq
c340: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
c350: 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34  v, OP_Move, 2, 4
c360: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
c370: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
c380: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33   OP_Concat, 4, 3
c390: 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 2);.      sqli
c3a0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c3b0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32   OP_ResultRow, 2
c3c0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
c3d0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
c3e0: 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20  v, addr);..     
c3f0: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
c400: 6c 20 74 68 65 20 69 6e 64 69 63 65 73 20 61 72  l the indices ar
c410: 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f  e constructed co
c420: 72 72 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a  rrectly..      *
c430: 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71  /.      for(x=sq
c440: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54  liteHashFirst(pT
c450: 62 6c 73 29 3b 20 78 20 26 26 20 21 69 73 51 75  bls); x && !isQu
c460: 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ick; x=sqliteHas
c470: 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
c480: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
c490: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
c4a0: 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
c4b0: 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20  x *pIdx, *pPk;. 
c4c0: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50         Index *pP
c4d0: 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  rior = 0;.      
c4e0: 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20    int loopTop;. 
c4f0: 20 20 20 20 20 20 20 69 6e 74 20 69 44 61 74 61         int iData
c500: 43 75 72 2c 20 69 49 64 78 43 75 72 3b 0a 20 20  Cur, iIdxCur;.  
c510: 20 20 20 20 20 20 69 6e 74 20 72 31 20 3d 20 2d        int r1 = -
c520: 31 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20  1;..        if( 
c530: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20  pTab->pIndex==0 
c540: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
c550: 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52 6f 77      pPk = HasRow
c560: 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a 20 73  id(pTab) ? 0 : s
c570: 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
c580: 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20  Index(pTab);.   
c590: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
c5a0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
c5b0: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20   OP_IfPos, 1);  
c5c0: 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74 20 6f  /* Stop if out o
c5d0: 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20  f errors */.    
c5e0: 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65      VdbeCoverage
c5f0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  (v);.        sql
c600: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c610: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
c620: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c630: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
c640: 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20   addr);.        
c650: 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
c660: 43 6c 65 61 72 28 70 50 61 72 73 65 29 3b 0a 20  Clear(pParse);. 
c670: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70         sqlite3Op
c680: 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
c690: 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 2c 20  s(pParse, pTab, 
c6a0: 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 30 2c 0a  OP_OpenRead, 0,.
c6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 20 20 31 2c 20 30 2c 20 26 69 44 61 74 61 43     1, 0, &iDataC
c6e0: 75 72 2c 20 26 69 49 64 78 43 75 72 29 3b 0a 20  ur, &iIdxCur);. 
c6f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c700: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c710: 6e 74 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20  nteger, 0, 7);. 
c720: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20         for(j=0, 
c730: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
c740: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
c750: 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b  dx->pNext, j++){
c760: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
c770: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c780: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 38  OP_Integer, 0, 8
c790: 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e  +j); /* index en
c7a0: 74 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f  tries counter */
c7b0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
c7c0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
c7d0: 3d 20 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d  = MAX(pParse->nM
c7e0: 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20  em, 8+j);.      
c7f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c800: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op2(v, OP_Rewind
c810: 2c 20 69 44 61 74 61 43 75 72 2c 20 30 29 3b 20  , iDataCur, 0); 
c820: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
c830: 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70  .        loopTop
c840: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
c850: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
c860: 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20  m, 7, 1);.      
c870: 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74    /* Verify that
c880: 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f   all NOT NULL co
c890: 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72 65  lumns really are
c8a0: 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20   NOT NULL */.   
c8b0: 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
c8c0: 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29  pTab->nCol; j++)
c8d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72  {.          char
c8e0: 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20   *zErr;.        
c8f0: 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33    int jmp2, jmp3
c900: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
c910: 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29  j==pTab->iPKey )
c920: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
c930: 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61       if( pTab->a
c940: 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d  Col[j].notNull==
c950: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
c960: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
c970: 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
c980: 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c  OfTable(v, pTab,
c990: 20 69 44 61 74 61 43 75 72 2c 20 6a 2c 20 33 29   iDataCur, j, 3)
c9a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
c9b0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
c9c0: 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  v, OPFLAG_TYPEOF
c9d0: 41 52 47 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ARG);.          
c9e0: 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp2 = sqlite3Vd
c9f0: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e  beAddOp1(v, OP_N
ca00: 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56 64 62 65  otNull, 3); Vdbe
ca10: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ca20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ca30: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
ca40: 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f  ddImm, 1, -1); /
ca50: 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f  * Decrement erro
ca60: 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20  r limit */.     
ca70: 20 20 20 20 20 7a 45 72 72 20 3d 20 73 71 6c 69       zErr = sqli
ca80: 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22  te3MPrintf(db, "
ca90: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 25 73  NULL value in %s
caa0: 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  .%s", pTab->zNam
cab0: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cad0: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a   pTab->aCol[j].z
cae0: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20  Name);.         
caf0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cb00: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
cb10: 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c  , 0, 3, 0, zErr,
cb20: 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20   P4_DYNAMIC);.  
cb30: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cb40: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
cb50: 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29  ResultRow, 3, 1)
cb60: 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 33  ;.          jmp3
cb70: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
cb80: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
cb90: 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 1); VdbeCovera
cba0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
cbb0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cbc0: 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a  p0(v, OP_Halt);.
cbd0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cbe0: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
cbf0: 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20   jmp2);.        
cc00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
cc10: 70 48 65 72 65 28 76 2c 20 6a 6d 70 33 29 3b 0a  pHere(v, jmp3);.
cc20: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
cc30: 20 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 69 6e    /* Validate in
cc40: 64 65 78 20 65 6e 74 72 69 65 73 20 66 6f 72 20  dex entries for 
cc50: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
cc60: 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  */.        for(j
cc70: 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
cc80: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
cc90: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
cca0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
ccb0: 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a  nt jmp2, jmp3, j
ccc0: 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20  mp4, jmp5;.     
ccd0: 20 20 20 20 20 69 6e 74 20 63 6b 55 6e 69 71 20       int ckUniq 
cce0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b  = sqlite3VdbeMak
ccf0: 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20  eLabel(v);.     
cd00: 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49       if( pPk==pI
cd10: 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  dx ) continue;. 
cd20: 20 20 20 20 20 20 20 20 20 72 31 20 3d 20 73 71           r1 = sq
cd30: 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
cd40: 65 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49  exKey(pParse, pI
cd50: 64 78 2c 20 69 44 61 74 61 43 75 72 2c 20 30 2c  dx, iDataCur, 0,
cd60: 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20   0, &jmp3,.     
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd90: 20 20 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20    pPrior, r1);. 
cda0: 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 20           pPrior 
cdb0: 3d 20 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20  = pIdx;.        
cdc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cdd0: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
cde0: 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69  , 8+j, 1);  /* i
cdf0: 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63  ncrement entry c
ce00: 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  ount */.        
ce10: 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74    /* Verify that
ce20: 20 61 6e 20 69 6e 64 65 78 20 65 6e 74 72 79 20   an index entry 
ce30: 65 78 69 73 74 73 20 66 6f 72 20 74 68 65 20 63  exists for the c
ce40: 75 72 72 65 6e 74 20 74 61 62 6c 65 20 72 6f 77  urrent table row
ce50: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d   */.          jm
ce60: 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p2 = sqlite3Vdbe
ce70: 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f  AddOp4Int(v, OP_
ce80: 46 6f 75 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a  Found, iIdxCur+j
ce90: 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20  , ckUniq, r1,.  
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cec0: 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d      pIdx->nColum
ced0: 6e 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  n); VdbeCoverage
cee0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
cef0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cf00: 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
cf10: 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d  , -1); /* Decrem
cf20: 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20  ent error limit 
cf30: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  */.          sql
cf40: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
cf50: 6e 67 28 76 2c 20 33 2c 20 22 72 6f 77 20 22 29  ng(v, 3, "row ")
cf60: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cf70: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
cf80: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33   OP_Concat, 7, 3
cf90: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
cfa0: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
cfb0: 74 72 69 6e 67 28 76 2c 20 34 2c 20 22 20 6d 69  tring(v, 4, " mi
cfc0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
cfd0: 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   ");.          s
cfe0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
cff0: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34  (v, OP_Concat, 4
d000: 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
d010: 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69 74 65     jmp5 = sqlite
d020: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
d030: 76 2c 20 34 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  v, 4, pIdx->zNam
d040: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  e);.          sq
d050: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
d060: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c  v, OP_Concat, 4,
d070: 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   3, 3);.        
d080: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d090: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
d0a0: 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20  Row, 3, 1);.    
d0b0: 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73 71 6c        jmp4 = sql
d0c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
d0d0: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
d0e0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d0f0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d100: 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20  e3VdbeAddOp0(v, 
d110: 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20  OP_Halt);.      
d120: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
d130: 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29  umpHere(v, jmp2)
d140: 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;.          /* F
d150: 6f 72 20 55 4e 49 51 55 45 20 69 6e 64 65 78 65  or UNIQUE indexe
d160: 73 2c 20 76 65 72 69 66 79 20 74 68 61 74 20 6f  s, verify that o
d170: 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20 65 78  nly one entry ex
d180: 69 73 74 73 20 77 69 74 68 20 74 68 65 0a 20 20  ists with the.  
d190: 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65          ** curre
d1a0: 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65 6e 74  nt key.  The ent
d1b0: 72 79 20 69 73 20 75 6e 69 71 75 65 20 69 66 20  ry is unique if 
d1c0: 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 69  (1) any column i
d1d0: 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20  s NULL.         
d1e0: 20 2a 2a 20 6f 72 20 28 32 29 20 74 68 65 20 6e   ** or (2) the n
d1f0: 65 78 74 20 65 6e 74 72 79 20 68 61 73 20 61 20  ext entry has a 
d200: 64 69 66 66 65 72 65 6e 74 20 6b 65 79 20 2a 2f  different key */
d210: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 49  .          if( I
d220: 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64  sUniqueIndex(pId
d230: 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  x) ){.          
d240: 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d 20 73    int uniqOk = s
d250: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
d260: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
d270: 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a 20 20      int jmp6;.  
d280: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b 6b            int kk
d290: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ;.            fo
d2a0: 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78 2d  r(kk=0; kk<pIdx-
d2b0: 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b  >nKeyCol; kk++){
d2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
d2d0: 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64 78 2d 3e  nt iCol = pIdx->
d2e0: 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20  aiColumn[kk];.  
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
d300: 72 74 28 20 69 43 6f 6c 21 3d 58 4e 5f 52 4f 57  rt( iCol!=XN_ROW
d310: 49 44 20 26 26 20 69 43 6f 6c 3c 70 54 61 62 2d  ID && iCol<pTab-
d320: 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20  >nCol );.       
d330: 20 20 20 20 20 20 20 69 66 28 20 69 43 6f 6c 3e         if( iCol>
d340: 3d 30 20 26 26 20 70 54 61 62 2d 3e 61 43 6f 6c  =0 && pTab->aCol
d350: 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20 29  [iCol].notNull )
d360: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
d370: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d380: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d390: 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c 20  _IsNull, r1+kk, 
d3a0: 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20  uniqOk);.       
d3b0: 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
d3c0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
d3d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
d3e0: 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65 33    jmp6 = sqlite3
d3f0: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
d400: 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b 6a  _Next, iIdxCur+j
d410: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
d420: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
d430: 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28  sqlite3VdbeGoto(
d440: 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20  v, uniqOk);.    
d450: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d460: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
d470: 6d 70 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp6);.          
d480: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d490: 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78  Op4Int(v, OP_Idx
d4a0: 47 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 75  GT, iIdxCur+j, u
d4b0: 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20  niqOk, r1,.     
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78              pIdx
d4e0: 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65  ->nKeyCol); Vdbe
d4f0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
d500: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d510: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d520: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
d530: 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72   /* Decrement er
d540: 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20  ror limit */.   
d550: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d560: 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76  VdbeLoadString(v
d570: 2c 20 33 2c 20 22 6e 6f 6e 2d 75 6e 69 71 75 65  , 3, "non-unique
d580: 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20   entry in index 
d590: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
d5a0: 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28  sqlite3VdbeGoto(
d5b0: 76 2c 20 6a 6d 70 35 29 3b 0a 20 20 20 20 20 20  v, jmp5);.      
d5c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d5d0: 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c  eResolveLabel(v,
d5e0: 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20   uniqOk);.      
d5f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
d600: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
d610: 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20  ere(v, jmp4);.  
d620: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52          sqlite3R
d630: 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62  esolvePartIdxLab
d640: 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70 33 29  el(pParse, jmp3)
d650: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
d660: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d670: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp2(v, OP_Next
d680: 2c 20 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70  , iDataCur, loop
d690: 54 6f 70 29 3b 20 56 64 62 65 43 6f 76 65 72 61  Top); VdbeCovera
d6a0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73  ge(v);.        s
d6b0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
d6c0: 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29  re(v, loopTop-1)
d6d0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
d6e0: 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
d6f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d700: 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76  VdbeLoadString(v
d710: 2c 20 32 2c 20 22 77 72 6f 6e 67 20 23 20 6f 66  , 2, "wrong # of
d720: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
d730: 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  x ");.        fo
d740: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
d750: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
d760: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
d770: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
d780: 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20    if( pPk==pIdx 
d790: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
d7a0: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
d7b0: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
d7c0: 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20 20 20  ddr(v);.        
d7d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d7e0: 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op2(v, OP_IfPos,
d7f0: 20 31 2c 20 61 64 64 72 2b 32 29 3b 20 56 64 62   1, addr+2); Vdb
d800: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d810: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d820: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d830: 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
d840: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d850: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43  beAddOp2(v, OP_C
d860: 6f 75 6e 74 2c 20 69 49 64 78 43 75 72 2b 6a 2c  ount, iIdxCur+j,
d870: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
d880: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
d890: 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c 20  (v, OP_Eq, 8+j, 
d8a0: 61 64 64 72 2b 38 2c 20 33 29 3b 20 56 64 62 65  addr+8, 3); Vdbe
d8b0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
d8c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d8d0: 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 53 51  beChangeP5(v, SQ
d8e0: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a 20  LITE_NOTNULL);. 
d8f0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d900: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d910: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
d920: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d930: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
d940: 28 76 2c 20 33 2c 20 70 49 64 78 2d 3e 7a 4e 61  (v, 3, pIdx->zNa
d950: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  me);.          s
d960: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
d970: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33  (v, OP_Concat, 3
d980: 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20  , 2, 7);.       
d990: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d9a0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
d9b0: 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20  tRow, 7, 1);.   
d9c0: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a       }.#endif /*
d9d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
d9e0: 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20  EECOUNT */.     
d9f0: 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64   } .    }.    ad
da00: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
da10: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
da20: 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c  aySize(endCode),
da30: 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a   endCode, iLn);.
da40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
da50: 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2c  hangeP2(v, addr,
da60: 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71   -mxErr);.    sq
da70: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
da80: 65 28 76 2c 20 61 64 64 72 2b 31 29 3b 0a 20 20  e(v, addr+1);.  
da90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
daa0: 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP4(v, addr+2,
dab0: 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49 43   "ok", P4_STATIC
dac0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
dad0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
dae0: 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
daf0: 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65  CHECK */..#ifnde
db00: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
db10: 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  F16.  /*.  **   
db20: 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a  PRAGMA encoding.
db30: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
db40: 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22  coding = "utf-8"
db50: 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31  |"utf-16"|"utf-1
db60: 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a  6le"|"utf-16be".
db70: 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73    **.  ** In its
db80: 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69   first form, thi
db90: 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73  s pragma returns
dba0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
dbb0: 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64   the main.  ** d
dbc0: 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
dbd0: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
dbe0: 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20  initialized, it 
dbf0: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e  is initialized n
dc00: 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ow..  **.  ** Th
dc10: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
dc20: 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20   this pragma is 
dc30: 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d  a no-op if the m
dc40: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
dc50: 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61  e.  ** has not a
dc60: 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74  lready been init
dc70: 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73  ialized. In this
dc80: 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74 68   case it sets th
dc90: 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65  e default.  ** e
dca0: 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c  ncoding that wil
dcb0: 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  l be used for th
dcc0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
dcd0: 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69  file if a new fi
dce0: 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74  le.  ** is creat
dcf0: 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69  ed. If an existi
dd00: 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  ng main database
dd10: 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c   file is opened,
dd20: 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64   then the.  ** d
dd30: 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f  efault text enco
dd40: 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69  ding for the exi
dd50: 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 69  sting database i
dd60: 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20  s used..  ** .  
dd70: 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20  ** In all cases 
dd80: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63 72  new databases cr
dd90: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
dda0: 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61  ATTACH command a
ddb0: 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20  re.  ** created 
ddc0: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20  to use the same 
ddd0: 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
dde0: 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69  oding as the mai
ddf0: 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20  n database. If. 
de00: 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74   ** the main dat
de10: 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65  abase has not be
de20: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61  en initialized a
de30: 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68  nd/or created wh
de40: 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69  en ATTACH.  ** i
de50: 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73  s executed, this
de60: 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20   is done before 
de70: 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72 61  the ATTACH opera
de80: 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
de90: 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f  In the second fo
dea0: 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20 73  rm this pragma s
deb0: 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e 63  ets the text enc
dec0: 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  oding to be used
ded0: 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74   in.  ** new dat
dee0: 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65 61  abase files crea
def0: 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64  ted using this d
df00: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
df10: 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20  It is only.  ** 
df20: 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65  useful if invoke
df30: 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66  d immediately af
df40: 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ter the main dat
df50: 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63  abase i.  */.  c
df60: 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f  ase PragTyp_ENCO
df70: 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74  DING: {.    stat
df80: 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
df90: 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20  EncName {.      
dfa0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20  char *zName;.   
dfb0: 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d     u8 enc;.    }
dfc0: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a   encnames[] = {.
dfd0: 20 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20        { "UTF8", 
dfe0: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20      SQLITE_UTF8 
dff0: 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
e000: 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51  { "UTF-8",    SQ
e010: 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20  LITE_UTF8       
e020: 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
e030: 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20  element [1] */. 
e040: 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65       { "UTF-16le
e050: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ", SQLITE_UTF16L
e060: 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73  E     },  /* Mus
e070: 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d  t be element [2]
e080: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
e090: 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55  -16be", SQLITE_U
e0a0: 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f  TF16BE     },  /
e0b0: 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e  * Must be elemen
e0c0: 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b  t [3] */.      {
e0d0: 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c   "UTF16le",  SQL
e0e0: 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20  ITE_UTF16LE     
e0f0: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31  },.      { "UTF1
e100: 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54  6be",  SQLITE_UT
e110: 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20  F16BE     },.   
e120: 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20     { "UTF-16",  
e130: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
e140: 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45      }, /* SQLITE
e150: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a  _UTF16NATIVE */.
e160: 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c        { "UTF16",
e170: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
e180: 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c         }, /* SQL
e190: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
e1a0: 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20  */.      { 0, 0 
e1b0: 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e  }.    };.    con
e1c0: 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d  st struct EncNam
e1d0: 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28  e *pEnc;.    if(
e1e0: 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f   !zRight ){    /
e1f0: 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  * "PRAGMA encodi
e200: 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ng" */.      if(
e210: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
e220: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
e230: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
e240: 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
e250: 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38  ames[SQLITE_UTF8
e260: 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ].enc==SQLITE_UT
e270: 46 38 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  F8 );.      asse
e280: 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
e290: 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63  ITE_UTF16LE].enc
e2a0: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  ==SQLITE_UTF16LE
e2b0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
e2c0: 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54  ( encnames[SQLIT
e2d0: 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d  E_UTF16BE].enc==
e2e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
e2f0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  ;.      returnSi
e300: 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 65 6e 63  ngleText(v, "enc
e310: 6f 64 69 6e 67 22 2c 20 65 6e 63 6e 61 6d 65 73  oding", encnames
e320: 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29  [ENC(pParse->db)
e330: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 65  ].zName);.    }e
e340: 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20 20  lse{            
e350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22              /* "
e360: 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20  PRAGMA encoding 
e370: 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20  = XXX" */.      
e380: 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74  /* Only change t
e390: 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  he value of sqli
e3a0: 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61  te.enc if the da
e3b0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73  tabase handle is
e3c0: 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e   not.      ** in
e3d0: 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68  itialized. If th
e3e0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
e3f0: 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20  exists, the new 
e400: 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65  sqlite.enc value
e410: 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62  .      ** will b
e420: 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68  e overwritten wh
e430: 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69 73  en the schema is
e440: 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66   next loaded. If
e450: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20   it does not.   
e460: 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78     ** already ex
e470: 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65  ists, it will be
e480: 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20   created to use 
e490: 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67  the new encoding
e4a0: 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f   value..      */
e4b0: 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20 20 20  .      if( .    
e4c0: 20 20 20 20 21 28 44 62 48 61 73 50 72 6f 70 65      !(DbHasPrope
e4d0: 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63  rty(db, 0, DB_Sc
e4e0: 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20  hemaLoaded)) || 
e4f0: 0a 20 20 20 20 20 20 20 20 44 62 48 61 73 50 72  .        DbHasPr
e500: 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42  operty(db, 0, DB
e510: 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29  _Empty) .      )
e520: 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 45  {.        for(pE
e530: 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b  nc=&encnames[0];
e540: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45   pEnc->zName; pE
e550: 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  nc++){.         
e560: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
e570: 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70  trICmp(zRight, p
e580: 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20  Enc->zName) ){. 
e590: 20 20 20 20 20 20 20 20 20 20 20 53 43 48 45 4d             SCHEM
e5a0: 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e 43 28  A_ENC(db) = ENC(
e5b0: 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20 20 20  db) =.          
e5c0: 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20        pEnc->enc 
e5d0: 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51  ? pEnc->enc : SQ
e5e0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
e5f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
e600: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
e610: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
e620: 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e     if( !pEnc->zN
e630: 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ame ){.         
e640: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
e650: 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70  (pParse, "unsupp
e660: 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20  orted encoding: 
e670: 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  %s", zRight);.  
e680: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
e690: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
e6a0: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
e6b0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
e6c0: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
e6d0: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
e6e0: 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20  RSION_PRAGMAS.  
e6f0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
e700: 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d 61   [schema.]schema
e710: 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  _version.  **   
e720: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
e730: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d  schema_version =
e740: 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
e750: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
e760: 63 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65 72 73  chema.]user_vers
e770: 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
e780: 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f  A [schema.]user_
e790: 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67  version = <integ
e7a0: 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  er>.  **.  **   
e7b0: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
e7c0: 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d  freelist_count =
e7d0: 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
e7e0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
e7f0: 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69  chema.]applicati
e800: 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41  on_id.  **   PRA
e810: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 70 70  GMA [schema.]app
e820: 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69  lication_id = <i
e830: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
e840: 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73  * The pragma's s
e850: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e  chema_version an
e860: 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61  d user_version a
e870: 72 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f  re used to set o
e880: 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76  r get.  ** the v
e890: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65  alue of the sche
e8a0: 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75  ma-version and u
e8b0: 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73  ser-version, res
e8c0: 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a  pectively. Both.
e8d0: 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d    ** the schema-
e8e0: 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  version and the 
e8f0: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65  user-version are
e900: 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69   32-bit signed i
e910: 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f  ntegers.  ** sto
e920: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
e930: 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a  ase header..  **
e940: 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61  .  ** The schema
e950: 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c  -cookie is usual
e960: 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61  ly only manipula
e970: 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  ted internally b
e980: 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a  y SQLite. It.  *
e990: 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  * is incremented
e9a0: 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65   by SQLite whene
e9b0: 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
e9c0: 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66   schema is modif
e9d0: 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65  ied (by.  ** cre
e9e0: 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e  ating or droppin
e9f0: 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  g a table or ind
ea00: 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20  ex). The schema 
ea10: 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20  version is used 
ea20: 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65  by.  ** SQLite e
ea30: 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79  ach time a query
ea40: 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20   is executed to 
ea50: 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
ea60: 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20  internal cache. 
ea70: 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d   ** of the schem
ea80: 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70  a used when comp
ea90: 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75  iling the SQL qu
eaa0: 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20  ery matches the 
eab0: 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74  schema of.  ** t
eac0: 68 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69  he database agai
ead0: 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f  nst which the co
eae0: 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20  mpiled query is 
eaf0: 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65  actually execute
eb00: 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69  d..  ** Subverti
eb10: 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73  ng this mechanis
eb20: 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47  m by using "PRAG
eb30: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
eb40: 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a  n" to modify.  *
eb50: 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  * the schema-ver
eb60: 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61  sion is potentia
eb70: 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e  lly dangerous an
eb80: 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72  d may lead to pr
eb90: 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68  ogram.  ** crash
eba0: 65 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63  es or database c
ebb0: 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77  orruption. Use w
ebc0: 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a  ith caution!.  *
ebd0: 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d  *.  ** The user-
ebe0: 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75  version is not u
ebf0: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  sed internally b
ec00: 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79  y SQLite. It may
ec10: 20 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   be used by.  **
ec20: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f   applications fo
ec30: 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20  r any purpose.. 
ec40: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
ec50: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a  yp_HEADER_VALUE:
ec60: 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b   {.    int iCook
ec70: 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41  ie = pPragma->iA
ec80: 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20 63 6f  rg;  /* Which co
ec90: 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f 72 20  okie to read or 
eca0: 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c  write */.    sql
ecb0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
ecc0: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
ecd0: 66 28 20 7a 52 69 67 68 74 20 26 26 20 28 70 50  f( zRight && (pP
ece0: 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67  ragma->mPragFlag
ecf0: 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64   & PragFlag_Read
ed00: 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Only)==0 ){.    
ed10: 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73    /* Write the s
ed20: 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20  pecified cookie 
ed30: 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73  value */.      s
ed40: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
ed50: 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65  OpList setCookie
ed60: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
ed70: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
ed80: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
ed90: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
eda0: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
edb0: 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20          0,  1,  
edc0: 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
edd0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43         { OP_SetC
ede0: 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
edf0: 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20  0,  1},    /* 2 
ee00: 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  */.      };.    
ee10: 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c    int addr = sql
ee20: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
ee30: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
ee40: 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f  etCookie), setCo
ee50: 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  okie, 0);.      
ee60: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
ee70: 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62  eP1(v, addr, iDb
ee80: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ee90: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
eea0: 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65 33 41  addr+1, sqlite3A
eeb0: 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
eec0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
eed0: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
eee0: 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  2, iDb);.      s
eef0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
ef00: 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 43  P2(v, addr+2, iC
ef10: 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73  ookie);.    }els
ef20: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64  e{.      /* Read
ef30: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
ef40: 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20  ookie value */. 
ef50: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
ef60: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61  t VdbeOpList rea
ef70: 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20  dCookie[] = {.  
ef80: 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
ef90: 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20  action,     0,  
efa0: 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20  0,  0},    /* 0 
efb0: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
efc0: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20  ReadCookie,     
efd0: 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
efe0: 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 1 */.        
eff0: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
f000: 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d        1,  1,  0}
f010: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
f020: 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74  int addr = sqlit
f030: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
f040: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61  v, ArraySize(rea
f050: 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f  dCookie), readCo
f060: 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  okie, 0);.      
f070: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
f080: 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62  eP1(v, addr, iDb
f090: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
f0a0: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
f0b0: 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20  addr+1, iDb);.  
f0c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
f0d0: 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b  hangeP3(v, addr+
f0e0: 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20  1, iCookie);.   
f0f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
f100: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
f110: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f120: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
f130: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
f140: 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
f150: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a  ANSIENT);.    }.
f160: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
f170: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
f180: 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
f190: 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  N_PRAGMAS */..#i
f1a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
f1b0: 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
f1c0: 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  DIAGS.  /*.  ** 
f1d0: 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65    PRAGMA compile
f1e0: 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20  _options.  **.  
f1f0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
f200: 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69  mes of all compi
f210: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options 
f220: 75 73 65 64 20 69 6e 20 74 68 69 73 20 62 75 69  used in this bui
f230: 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74  ld,.  ** one opt
f240: 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a  ion per row..  *
f250: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
f260: 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53  _COMPILE_OPTIONS
f270: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20  : {.    int i = 
f280: 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  0;.    const cha
f290: 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 70 50 61  r *zOpt;.    pPa
f2a0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20  rse->nMem = 1;. 
f2b0: 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e     setOneColumnN
f2c0: 61 6d 65 28 76 2c 20 22 63 6f 6d 70 69 6c 65 5f  ame(v, "compile_
f2d0: 6f 70 74 69 6f 6e 22 29 3b 0a 20 20 20 20 77 68  option");.    wh
f2e0: 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c  ile( (zOpt = sql
f2f0: 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
f300: 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20  on_get(i++))!=0 
f310: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
f320: 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76  VdbeLoadString(v
f330: 2c 20 31 2c 20 7a 4f 70 74 29 3b 0a 20 20 20 20  , 1, zOpt);.    
f340: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
f350: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
f360: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
f370: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
f380: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
f390: 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
f3a0: 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66  ON_DIAGS */..#if
f3b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
f3c0: 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WAL.  /*.  **  
f3d0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
f3e0: 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20  ]wal_checkpoint 
f3f0: 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72  = passive|full|r
f400: 65 73 74 61 72 74 7c 74 72 75 6e 63 61 74 65 0a  estart|truncate.
f410: 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70    **.  ** Checkp
f420: 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62 61 73  oint the databas
f430: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
f440: 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b  ragTyp_WAL_CHECK
f450: 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 73 74 61  POINT: {.    sta
f460: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
f470: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 62 75 73  azCol[] = { "bus
f480: 79 22 2c 20 22 6c 6f 67 22 2c 20 22 63 68 65 63  y", "log", "chec
f490: 6b 70 6f 69 6e 74 65 64 22 20 7d 3b 0a 20 20 20  kpointed" };.   
f4a0: 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49 64 32   int iBt = (pId2
f4b0: 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d  ->z?iDb:SQLITE_M
f4c0: 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a 20 20  AX_ATTACHED);.  
f4d0: 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51    int eMode = SQ
f4e0: 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
f4f0: 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69 66 28  PASSIVE;.    if(
f500: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
f510: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
f520: 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66 75 6c  Cmp(zRight, "ful
f530: 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  l")==0 ){.      
f540: 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45    eMode = SQLITE
f550: 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c  _CHECKPOINT_FULL
f560: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
f570: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
f580: 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74 61 72  (zRight, "restar
f590: 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  t")==0 ){.      
f5a0: 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45    eMode = SQLITE
f5b0: 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
f5c0: 41 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ART;.      }else
f5d0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
f5e0: 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 74 72 75  Cmp(zRight, "tru
f5f0: 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20  ncate")==0 ){.  
f600: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51        eMode = SQ
f610: 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
f620: 54 52 55 4e 43 41 54 45 3b 0a 20 20 20 20 20 20  TRUNCATE;.      
f630: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 41  }.    }.    setA
f640: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
f650: 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73   3, azCol);  ass
f660: 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53 69 7a  ert( 3==ArraySiz
f670: 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
f680: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
f690: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
f6a0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68  eAddOp3(v, OP_Ch
f6b0: 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65  eckpoint, iBt, e
f6c0: 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20 73 71  Mode, 1);.    sq
f6d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
f6e0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
f6f0: 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72   1, 3);.  }.  br
f700: 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  eak;..  /*.  ** 
f710: 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74    PRAGMA wal_aut
f720: 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a  ocheckpoint.  **
f730: 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75     PRAGMA wal_au
f740: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e  tocheckpoint = N
f750: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69  .  **.  ** Confi
f760: 67 75 72 65 20 61 20 64 61 74 61 62 61 73 65 20  gure a database 
f770: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75  connection to au
f780: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63  tomatically chec
f790: 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73  kpoint a databas
f7a0: 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63  e.  ** after acc
f7b0: 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d  umulating N fram
f7c0: 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f  es in the log. O
f7d0: 72 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 20  r query for the 
f7e0: 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20  current value.  
f7f0: 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20  ** of N..  */.  
f800: 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c  case PragTyp_WAL
f810: 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a  _AUTOCHECKPOINT:
f820: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
f830: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
f840: 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  e3_wal_autocheck
f850: 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69 74 65  point(db, sqlite
f860: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
f870: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
f880: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 77 61  SingleInt(v, "wa
f890: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
f8a0: 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78  ", .       db->x
f8b0: 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c  WalCallback==sql
f8c0: 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
f8d0: 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20  ok ? .          
f8e0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
f8f0: 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20  NT(db->pWalArg) 
f900: 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  : 0);.  }.  brea
f910: 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a  k;.#endif..  /*.
f920: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72    **  PRAGMA shr
f930: 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a  ink_memory.  **.
f940: 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
f950: 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35 2d  ION-OF: R-23445-
f960: 34 36 31 30 39 20 54 68 69 73 20 70 72 61 67 6d  46109 This pragm
f970: 61 20 63 61 75 73 65 73 20 74 68 65 20 64 61 74  a causes the dat
f980: 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e 65  abase.  ** conne
f990: 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20 69  ction on which i
f9a0: 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20  t is invoked to 
f9b0: 66 72 65 65 20 75 70 20 61 73 20 6d 75 63 68 20  free up as much 
f9c0: 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20 20 2a  memory as it.  *
f9d0: 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69 6e  * can, by callin
f9e0: 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c  g sqlite3_db_rel
f9f0: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a 20  ease_memory().. 
fa00: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
fa10: 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59  yp_SHRINK_MEMORY
fa20: 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
fa30: 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72  db_release_memor
fa40: 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  y(db);.    break
fa50: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
fa60: 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74     PRAGMA busy_t
fa70: 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52  imeout.  **   PR
fa80: 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
fa90: 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  t = N.  **.  ** 
faa0: 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75 73  Call sqlite3_bus
fab0: 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29  y_timeout(db, N)
fac0: 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63 75  .  Return the cu
fad0: 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76 61  rrent timeout va
fae0: 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20  lue.  ** if one 
faf0: 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20 62  is set.  If no b
fb00: 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20 61  usy handler or a
fb10: 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79 20   different busy 
fb20: 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a 20  handler is set. 
fb30: 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72 65   ** then 0 is re
fb40: 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e 67  turned.  Setting
fb50: 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f 75   the busy_timeou
fb60: 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74 69  t to 0 or negati
fb70: 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 73  ve.  ** disables
fb80: 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20   the timeout..  
fb90: 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61 67  */.  /*case Prag
fba0: 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54  Typ_BUSY_TIMEOUT
fbb0: 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20  */ default: {.  
fbc0: 20 20 61 73 73 65 72 74 28 20 70 50 72 61 67 6d    assert( pPragm
fbd0: 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50 72 61  a->ePragTyp==Pra
fbe0: 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
fbf0: 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  T );.    if( zRi
fc00: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
fc10: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
fc20: 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f  t(db, sqlite3Ato
fc30: 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
fc40: 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
fc50: 6c 65 49 6e 74 28 76 2c 20 22 74 69 6d 65 6f 75  leInt(v, "timeou
fc60: 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54 69 6d  t",  db->busyTim
fc70: 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  eout);.    break
fc80: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
fc90: 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68     PRAGMA soft_h
fca0: 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20  eap_limit.  **  
fcb0: 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61   PRAGMA soft_hea
fcc0: 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a  p_limit = N.  **
fcd0: 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  .  ** IMPLEMENTA
fce0: 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33 34 33  TION-OF: R-26343
fcf0: 2d 34 35 39 33 30 20 54 68 69 73 20 70 72 61 67  -45930 This prag
fd00: 6d 61 20 69 6e 76 6f 6b 65 73 20 74 68 65 0a 20  ma invokes the. 
fd10: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74   ** sqlite3_soft
fd20: 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 29 20  _heap_limit64() 
fd30: 69 6e 74 65 72 66 61 63 65 20 77 69 74 68 20 74  interface with t
fd40: 68 65 20 61 72 67 75 6d 65 6e 74 20 4e 2c 20 69  he argument N, i
fd50: 66 20 4e 20 69 73 0a 20 20 2a 2a 20 73 70 65 63  f N is.  ** spec
fd60: 69 66 69 65 64 20 61 6e 64 20 69 73 20 61 20 6e  ified and is a n
fd70: 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
fd80: 67 65 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d  ger..  ** IMPLEM
fd90: 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 36  ENTATION-OF: R-6
fda0: 34 34 35 31 2d 30 37 31 36 33 20 54 68 65 20 73  4451-07163 The s
fdb0: 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 70  oft_heap_limit p
fdc0: 72 61 67 6d 61 20 61 6c 77 61 79 73 0a 20 20 2a  ragma always.  *
fdd0: 2a 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 61  * returns the sa
fde0: 6d 65 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  me integer that 
fdf0: 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65  would be returne
fe00: 64 20 62 79 20 74 68 65 0a 20 20 2a 2a 20 73 71  d by the.  ** sq
fe10: 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
fe20: 6c 69 6d 69 74 36 34 28 2d 31 29 20 43 2d 6c 61  limit64(-1) C-la
fe30: 6e 67 75 61 67 65 20 66 75 6e 63 74 69 6f 6e 2e  nguage function.
fe40: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
fe50: 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c  gTyp_SOFT_HEAP_L
fe60: 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69  IMIT: {.    sqli
fe70: 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20  te3_int64 N;.   
fe80: 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 73   if( zRight && s
fe90: 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
fea0: 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d  I64(zRight, &N)=
feb0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
fec0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74      sqlite3_soft
fed0: 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29  _heap_limit64(N)
fee0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
fef0: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
ff00: 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22  soft_heap_limit"
ff10: 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f  ,  sqlite3_soft_
ff20: 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29  heap_limit64(-1)
ff30: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
ff40: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  }..  /*.  **   P
ff50: 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a 20 20  RAGMA threads.  
ff60: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72 65  **   PRAGMA thre
ff70: 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  ads = N.  **.  *
ff80: 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20  * Configure the 
ff90: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
ffa0: 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61 64 73  f worker threads
ffb0: 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e 65  .  Return the ne
ffc0: 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c 20  w.  ** maximum, 
ffd0: 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 6c  which might be l
ffe0: 65 73 73 20 74 68 61 6e 20 72 65 71 75 65 73 74  ess than request
fff0: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
10000 50 72 61 67 54 79 70 5f 54 48 52 45 41 44 53 3a  PragTyp_THREADS:
10010 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69   {.    sqlite3_i
10020 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20  nt64 N;.    if( 
10030 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26 20 73  zRight.     && s
10040 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
10050 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d  I64(zRight, &N)=
10060 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20  =SQLITE_OK.     
10070 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a 20  && N>=0.    ){. 
10080 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d       sqlite3_lim
10090 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49  it(db, SQLITE_LI
100a0 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
100b0 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78 37 66  DS, (int)(N&0x7f
100c0 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20 7d 0a  ffffff));.    }.
100d0 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
100e0 49 6e 74 28 76 2c 20 22 74 68 72 65 61 64 73 22  Int(v, "threads"
100f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
10100 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
10110 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c  mit(db, SQLITE_L
10120 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
10130 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62  ADS, -1));.    b
10140 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64  reak;.  }..#if d
10150 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
10160 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
10170 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f  SQLITE_TEST).  /
10180 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68  *.  ** Report th
10190 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20  e current state 
101a0 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72  of file logs for
101b0 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20   all databases. 
101c0 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
101d0 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20  yp_LOCK_STATUS: 
101e0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
101f0 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61  st char *const a
10200 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zLockName[] = {.
10210 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22        "unlocked"
10220 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72 65 73  , "shared", "res
10230 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67  erved", "pending
10240 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20  ", "exclusive". 
10250 20 20 20 7d 3b 0a 20 20 20 20 73 74 61 74 69 63     };.    static
10260 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
10270 6f 6c 5b 5d 20 3d 20 7b 20 22 64 61 74 61 62 61  ol[] = { "databa
10280 73 65 22 2c 20 22 73 74 61 74 75 73 22 20 7d 3b  se", "status" };
10290 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
102a0 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65  setAllColumnName
102b0 73 28 76 2c 20 32 2c 20 61 7a 43 6f 6c 29 3b 20  s(v, 2, azCol); 
102c0 61 73 73 65 72 74 28 20 32 3d 3d 41 72 72 61 79  assert( 2==Array
102d0 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20  Size(azCol) );. 
102e0 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
102f0 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  = 2;.    for(i=0
10300 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
10310 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a  ){.      Btree *
10320 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  pBt;.      const
10330 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20   char *zState = 
10340 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20  "unknown";.     
10350 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66   int j;.      if
10360 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ( db->aDb[i].zNa
10370 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  me==0 ) continue
10380 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62  ;.      pBt = db
10390 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20  ->aDb[i].pBt;.  
103a0 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c      if( pBt==0 |
103b0 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  | sqlite3BtreePa
103c0 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20  ger(pBt)==0 ){. 
103d0 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
103e0 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20  "closed";.      
103f0 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
10400 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
10410 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69  b, i ? db->aDb[i
10420 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20  ].zName : 0, .  
10430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10450 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f     SQLITE_FCNTL_
10460 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d  LOCKSTATE, &j)==
10470 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
10480 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61        zState = a
10490 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20  zLockName[j];.  
104a0 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
104b0 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
104c0 28 76 2c 20 31 2c 20 22 73 73 22 2c 20 64 62 2d  (v, 1, "ss", db-
104d0 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a  >aDb[i].zName, z
104e0 53 74 61 74 65 29 3b 0a 20 20 20 20 20 20 73 71  State);.      sq
104f0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10500 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
10510 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20   1, 2);.    }.  
10520 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
10530 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
10540 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63  TE_HAS_CODEC.  c
10550 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a  ase PragTyp_KEY:
10560 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
10570 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f  t ) sqlite3_key_
10580 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
10590 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
105a0 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
105b0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
105c0 61 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45  ase PragTyp_REKE
105d0 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
105e0 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65  ght ) sqlite3_re
105f0 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
10600 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53  zRight, sqlite3S
10610 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29  trlen30(zRight))
10620 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
10630 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10640 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66  HEXKEY: {.    if
10650 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
10660 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20    u8 iByte;.    
10670 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63    int i;.      c
10680 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20  har zKey[40];.  
10690 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79      for(i=0, iBy
106a0 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a  te=0; i<sizeof(z
106b0 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65  Key)*2 && sqlite
106c0 33 49 73 78 64 69 67 69 74 28 7a 52 69 67 68 74  3Isxdigit(zRight
106d0 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  [i]); i++){.    
106e0 20 20 20 20 69 42 79 74 65 20 3d 20 28 69 42 79      iByte = (iBy
106f0 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33  te<<4) + sqlite3
10700 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b  HexToInt(zRight[
10710 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  i]);.        if(
10720 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79   (i&1)!=0 ) zKey
10730 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20  [i/2] = iByte;. 
10740 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
10750 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66   (zLeft[3] & 0xf
10760 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20  )==0xb ){.      
10770 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32    sqlite3_key_v2
10780 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20  (db, zDb, zKey, 
10790 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  i/2);.      }els
107a0 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
107b0 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20  e3_rekey_v2(db, 
107c0 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b  zDb, zKey, i/2);
107d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
107e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
107f0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
10800 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45  (SQLITE_HAS_CODE
10810 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  C) || defined(SQ
10820 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f  LITE_ENABLE_CERO
10830 44 29 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  D).  case PragTy
10840 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e  p_ACTIVATE_EXTEN
10850 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68  SIONS: if( zRigh
10860 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  t ){.#ifdef SQLI
10870 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20  TE_HAS_CODEC.   
10880 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
10890 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65  ICmp(zRight, "se
108a0 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20  e-", 4)==0 ){.  
108b0 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69      sqlite3_acti
108c0 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74  vate_see(&zRight
108d0 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [4]);.    }.#end
108e0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
108f0 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20  _ENABLE_CEROD.  
10900 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
10910 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63  NICmp(zRight, "c
10920 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b  erod-", 6)==0 ){
10930 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61  .      sqlite3_a
10940 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a  ctivate_cerod(&z
10950 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d  Right[6]);.    }
10960 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
10970 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d  eak;.#endif..  }
10980 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50   /* End of the P
10990 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a  RAGMA switch */.
109a0 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73  .pragma_out:.  s
109b0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
109c0 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74   zLeft);.  sqlit
109d0 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52 69  e3DbFree(db, zRi
109e0 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  ght);.}..#endif 
109f0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
10a00 52 41 47 4d 41 20 2a 2f 0a                       RAGMA */.