/ Hex Artifact Content
Login

Artifact f3e7147299ca05ef4304a36f1fd6e002729c72c6:


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 72 65 74 75 72  t ){.      retur
5fe0: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 63  nSingleInt(v, "c
5ff0: 61 63 68 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d  ache_size", pDb-
6000: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
6010: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  size);.    }else
6020: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
6030: 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a   = sqlite3Atoi(z
6040: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 70 44  Right);.      pD
6050: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
6060: 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20  e_size = size;. 
6070: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
6080: 65 53 65 74 43 61 63 68 65 53 69 7a 65 28 70 44  eSetCacheSize(pD
6090: 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53 63  b->pBt, pDb->pSc
60a0: 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65  hema->cache_size
60b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  );.    }.    bre
60c0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
60d0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
60e0: 6d 61 2e 5d 63 61 63 68 65 5f 73 70 69 6c 6c 0a  ma.]cache_spill.
60f0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 63 61 63    **  PRAGMA cac
6100: 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e  he_spill=BOOLEAN
6110: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
6120: 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 70 69  chema.]cache_spi
6130: 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ll=N.  **.  ** T
6140: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
6150: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
6160: 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20  t local setting 
6170: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67  for the.  ** pag
6180: 65 20 63 61 63 68 65 20 73 70 69 6c 6c 20 73 69  e cache spill si
6190: 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66  ze. The second f
61a0: 6f 72 6d 20 74 75 72 6e 73 20 63 61 63 68 65 20  orm turns cache 
61b0: 73 70 69 6c 6c 20 6f 6e 0a 20 20 2a 2a 20 6f 72  spill on.  ** or
61c0: 20 6f 66 66 2e 20 20 57 68 65 6e 20 74 75 72 6e   off.  When turn
61d0: 6e 69 6e 67 20 63 61 63 68 65 20 73 70 69 6c 6c  ning cache spill
61e0: 20 6f 6e 2c 20 74 68 65 20 73 69 7a 65 20 69 73   on, the size is
61f0: 20 73 65 74 20 74 6f 20 74 68 65 0a 20 20 2a 2a   set to the.  **
6200: 20 63 75 72 72 65 6e 74 20 63 61 63 68 65 5f 73   current cache_s
6210: 69 7a 65 2e 20 20 54 68 65 20 74 68 69 72 64 20  ize.  The third 
6220: 66 6f 72 6d 20 73 65 74 73 20 61 20 73 70 69 6c  form sets a spil
6230: 6c 20 73 69 7a 65 20 74 68 61 74 0a 20 20 2a 2a  l size that.  **
6240: 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e   may be differen
6250: 74 20 66 6f 72 6d 20 74 68 65 20 63 61 63 68 65  t form the cache
6260: 20 73 69 7a 65 2e 0a 20 20 2a 2a 20 49 66 20 4e   size..  ** If N
6270: 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65   is positive the
6280: 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20  n that is the.  
6290: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
62a0: 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e  es in the cache.
62b0: 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69    If N is negati
62c0: 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  ve, then the.  *
62d0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
62e0: 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f  s is adjusted so
62f0: 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20   that the cache 
6300: 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65  uses -N kibibyte
6310: 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79  s.  ** of memory
6320: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20 74  ..  **.  ** If t
6330: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63  he number of cac
6340: 68 65 5f 73 70 69 6c 6c 20 70 61 67 65 73 20 69  he_spill pages i
6350: 73 20 6c 65 73 73 20 74 68 65 6e 20 74 68 65 20  s less then the 
6360: 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 63  number of.  ** c
6370: 61 63 68 65 5f 73 69 7a 65 20 70 61 67 65 73 2c  ache_size pages,
6380: 20 6e 6f 20 73 70 69 6c 6c 69 6e 67 20 6f 63 63   no spilling occ
6390: 75 72 73 20 75 6e 74 69 6c 20 74 68 65 20 70 61  urs until the pa
63a0: 67 65 20 63 6f 75 6e 74 20 65 78 63 65 65 64 73  ge count exceeds
63b0: 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  .  ** the number
63c0: 20 6f 66 20 63 61 63 68 65 5f 73 69 7a 65 20 70   of cache_size p
63d0: 61 67 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ages..  **.  ** 
63e0: 54 68 65 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d  The cache_spill=
63f0: 42 4f 4f 4c 45 41 4e 20 73 65 74 74 69 6e 67 20  BOOLEAN setting 
6400: 61 70 70 6c 69 65 73 20 74 6f 20 61 6c 6c 20 61  applies to all a
6410: 74 74 61 63 68 65 64 20 73 63 68 65 6d 61 73 2c  ttached schemas,
6420: 0a 20 20 2a 2a 20 6e 6f 74 20 6a 75 73 74 20 74  .  ** not just t
6430: 68 65 20 73 63 68 65 6d 61 20 73 70 65 63 69 66  he schema specif
6440: 69 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ied..  */.  case
6450: 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53   PragTyp_CACHE_S
6460: 50 49 4c 4c 3a 20 7b 0a 20 20 20 20 61 73 73 65  PILL: {.    asse
6470: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
6480: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
6490: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
64a0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
64b0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
64c0: 6e 74 28 76 2c 20 22 63 61 63 68 65 5f 73 70 69  nt(v, "cache_spi
64d0: 6c 6c 22 2c 20 0a 20 20 20 20 20 20 20 20 20 28  ll", .         (
64e0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
64f0: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 29 3d 3d  TE_CacheSpill)==
6500: 30 20 3f 20 30 20 3a 20 0a 20 20 20 20 20 20 20  0 ? 0 : .       
6510: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
6520: 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28 70 44  eSetSpillSize(pD
6530: 62 2d 3e 70 42 74 2c 30 29 29 3b 0a 20 20 20 20  b->pBt,0));.    
6540: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
6550: 20 73 69 7a 65 20 3d 20 31 3b 0a 20 20 20 20 20   size = 1;.     
6560: 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 49   if( sqlite3GetI
6570: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 73 69  nt32(zRight, &si
6580: 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ze) ){.        s
6590: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 53 70  qlite3BtreeSetSp
65a0: 69 6c 6c 53 69 7a 65 28 70 44 62 2d 3e 70 42 74  illSize(pDb->pBt
65b0: 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 20 20 7d  , size);.      }
65c0: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
65d0: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
65e0: 67 68 74 2c 20 73 69 7a 65 21 3d 30 29 20 29 7b  ght, size!=0) ){
65f0: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61  .        db->fla
6600: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 43 61 63  gs |= SQLITE_Cac
6610: 68 65 53 70 69 6c 6c 3b 0a 20 20 20 20 20 20 7d  heSpill;.      }
6620: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62  else{.        db
6630: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49  ->flags &= ~SQLI
6640: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20  TE_CacheSpill;. 
6650: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74       }.      set
6660: 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62  AllPagerFlags(db
6670: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  );.    }.    bre
6680: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
6690: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
66a0: 6d 61 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29  ma.]mmap_size(N)
66b0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20  .  **.  ** Used 
66c0: 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73  to set mapping s
66d0: 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d  ize limit. The m
66e0: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
66f0: 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74  t is.  ** used t
6700: 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72  o limit the aggr
6710: 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c  egate size of al
6720: 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20  l memory mapped 
6730: 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20  regions of the. 
6740: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c   ** database fil
6750: 65 2e 20 49 66 20 74 68 69 73 20 70 61 72 61 6d  e. If this param
6760: 65 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a  eter is set to z
6770: 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79  ero, then memory
6780: 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73   mapping.  ** is
6790: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
67a0: 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74  .  If N is negat
67b0: 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65  ive, then the de
67c0: 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70  fault memory map
67d0: 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65  .  ** limit dete
67e0: 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65  rmined by sqlite
67f0: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
6800: 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45  CONFIG_MMAP_SIZE
6810: 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54  ) is set..  ** T
6820: 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e 20 69  he parameter N i
6830: 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79  s measured in by
6840: 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  tes..  **.  ** T
6850: 68 69 73 20 76 61 6c 75 65 20 69 73 20 61 64 76  his value is adv
6860: 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e 64 65  isory.  The unde
6870: 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20 66 72  rlying VFS is fr
6880: 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70  ee to memory map
6890: 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20  .  ** as little 
68a0: 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20 69 74  or as much as it
68b0: 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70 74 2c   wants.  Except,
68c0: 20 69 66 20 4e 20 69 73 20 73 65 74 20 74 6f 20   if N is set to 
68d0: 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  0 then the.  ** 
68e0: 75 70 70 65 72 20 6c 61 79 65 72 73 20 77 69 6c  upper layers wil
68f0: 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 74  l never invoke t
6900: 68 65 20 78 46 65 74 63 68 20 69 6e 74 65 72 66  he xFetch interf
6910: 61 63 65 73 20 74 6f 20 74 68 65 20 56 46 53 2e  aces to the VFS.
6920: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
6930: 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20  gTyp_MMAP_SIZE: 
6940: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  {.    sqlite3_in
6950: 74 36 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49  t64 sz;.#if SQLI
6960: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6970: 3e 30 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  >0.    assert( s
6980: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
6990: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
69a0: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  ) );.    if( zRi
69b0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ght ){.      int
69c0: 20 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   ii;.      sqlit
69d0: 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
69e0: 7a 52 69 67 68 74 2c 20 26 73 7a 29 3b 0a 20 20  zRight, &sz);.  
69f0: 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73      if( sz<0 ) s
6a00: 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  z = sqlite3Globa
6a10: 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a  lConfig.szMmap;.
6a20: 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e        if( pId2->
6a30: 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61  n==0 ) db->szMma
6a40: 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f  p = sz;.      fo
6a50: 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20  r(ii=db->nDb-1; 
6a60: 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20  ii>=0; ii--){.  
6a70: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
6a80: 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69  b[ii].pBt && (ii
6a90: 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e  ==iDb || pId2->n
6aa0: 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ==0) ){.        
6ab0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
6ac0: 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61  tMmapLimit(db->a
6ad0: 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b  Db[ii].pBt, sz);
6ae0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
6af0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a 20   }.    }.    sz 
6b00: 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20 73  = -1;.    rc = s
6b10: 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
6b20: 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c  rol(db, zDb, SQL
6b30: 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53  ITE_FCNTL_MMAP_S
6b40: 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65  IZE, &sz);.#else
6b50: 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20  .    sz = 0;.   
6b60: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
6b70: 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
6b80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
6b90: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
6ba0: 67 6c 65 49 6e 74 28 76 2c 20 22 6d 6d 61 70 5f  gleInt(v, "mmap_
6bb0: 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20  size", sz);.    
6bc0: 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51  }else if( rc!=SQ
6bd0: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b  LITE_NOTFOUND ){
6be0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
6bf0: 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61  Err++;.      pPa
6c00: 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20  rse->rc = rc;.  
6c10: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
6c20: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
6c30: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6c40: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
6c50: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65  temp_store = "de
6c60: 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c  fault"|"memory"|
6c70: 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  "file".  **.  **
6c80: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
6c90: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
6ca0: 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65  f the temp_store
6cb0: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
6cc0: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
6cd0: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
6ce0: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
6cf0: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
6d00: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
6d10: 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  * value will be 
6d20: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
6d30: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
6d40: 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20  ase is opened.. 
6d50: 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68   **.  ** Note th
6d60: 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  at it is possibl
6d70: 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72  e for the librar
6d80: 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  y compile-time o
6d90: 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f  ptions to.  ** o
6da0: 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65 74  verride this set
6db0: 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ting.  */.  case
6dc0: 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54   PragTyp_TEMP_ST
6dd0: 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORE: {.    if( !
6de0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6df0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
6e00: 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c  v, "temp_store",
6e10: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 29   db->temp_store)
6e20: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6e30: 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f     changeTempSto
6e40: 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a 52 69  rage(pParse, zRi
6e50: 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ght);.    }.    
6e60: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6e70: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
6e80: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6e90: 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ory.  **   PRAGM
6ea0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
6eb0: 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72  ectory = ""|"dir
6ec0: 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a  ectory_name".  *
6ed0: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
6ee0: 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76   set the local v
6ef0: 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70  alue of the temp
6f00: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
6f10: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
6f20: 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  .  ** the value 
6f30: 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20  sets a specific 
6f40: 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20  directory to be 
6f50: 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
6f60: 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53  ry files..  ** S
6f70: 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c  etting to a null
6f80: 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 20   string reverts 
6f90: 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20 74  to the default t
6fa0: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
6fb0: 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20  ry search..  ** 
6fc0: 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  If temporary dir
6fd0: 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65  ectory is change
6fe0: 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69 64 61  d, then invalida
6ff0: 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20  teTempStorage.. 
7000: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
7010: 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f  PragTyp_TEMP_STO
7020: 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a  RE_DIRECTORY: {.
7030: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
7040: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
7050: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 74 65  ingleText(v, "te
7060: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7070: 72 79 22 2c 20 73 71 6c 69 74 65 33 5f 74 65 6d  ry", sqlite3_tem
7080: 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  p_directory);.  
7090: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
70a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
70b0: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
70c0: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
70d0: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
70e0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
70f0: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
7100: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
7110: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
7120: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
7130: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
7140: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
7150: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
7160: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
7170: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
7180: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
7190: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
71a0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
71b0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
71c0: 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50   if( SQLITE_TEMP
71d0: 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20  _STORE==0.      
71e0: 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50   || (SQLITE_TEMP
71f0: 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d  _STORE==1 && db-
7200: 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a  >temp_store<=1).
7210: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
7220: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20  E_TEMP_STORE==2 
7230: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
7240: 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20  e==1).      ){. 
7250: 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74         invalidat
7260: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
7270: 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rse);.      }.  
7280: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
7290: 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69  (sqlite3_temp_di
72a0: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
72b0: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
72c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
72d0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
72e0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
72f0: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
7300: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
7310: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65        sqlite3_te
7320: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  mp_directory = 0
7330: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
7340: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
7350: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
7360: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
7370: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20   SQLITE_OS_WIN. 
7380: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
7390: 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  A data_store_dir
73a0: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
73b0: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
73c0: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
73d0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
73e0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
73f0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
7400: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  l value of the d
7410: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
7420: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
7430: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
7440: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
7450: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
7460: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
7470: 62 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a  base files that.
7480: 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66    ** were specif
7490: 69 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74  ied with a relat
74a0: 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53  ive pathname.  S
74b0: 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c  etting to a null
74c0: 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a   string reverts.
74d0: 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61    ** to the defa
74e0: 75 6c 74 20 64 61 74 61 62 61 73 65 20 64 69 72  ult database dir
74f0: 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f  ectory, which fo
7500: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
7510: 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 0a   specified with.
7520: 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20    ** a relative 
7530: 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62  path will probab
7540: 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ly be based on t
7550: 68 65 20 63 75 72 72 65 6e 74 20 64 69 72 65 63  he current direc
7560: 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a  tory for the.  *
7570: 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61  * process.  Data
7580: 62 61 73 65 20 66 69 6c 65 20 73 70 65 63 69 66  base file specif
7590: 69 65 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f  ied with an abso
75a0: 6c 75 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f  lute path are no
75b0: 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20  t impacted.  ** 
75c0: 62 79 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c  by this setting,
75d0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69   regardless of i
75e0: 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20  ts value..  **. 
75f0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7600: 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49  yp_DATA_STORE_DI
7610: 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69  RECTORY: {.    i
7620: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
7630: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
7640: 54 65 78 74 28 76 2c 20 22 64 61 74 61 5f 73 74  Text(v, "data_st
7650: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20  ore_directory", 
7660: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
7670: 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 7d 65 6c  ectory);.    }el
7680: 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  se{.#ifndef SQLI
7690: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20  TE_OMIT_WSD.    
76a0: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
76b0: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  ){.        int r
76c0: 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  es;.        rc =
76d0: 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73   sqlite3OsAccess
76e0: 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68  (db->pVfs, zRigh
76f0: 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53  t, SQLITE_ACCESS
7700: 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72 65 73  _READWRITE, &res
7710: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
7720: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
7730: 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
7740: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
7750: 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74  Msg(pParse, "not
7760: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
7770: 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20  ctory");.       
7780: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
7790: 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ut;.        }.  
77a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
77b0: 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33  te3_free(sqlite3
77c0: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29  _data_directory)
77d0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  ;.      if( zRig
77e0: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
77f0: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
7800: 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65  rectory = sqlite
7810: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
7820: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
7830: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
7840: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7850: 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  tory = 0;.      
7860: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
7870: 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20  TE_OMIT_WSD */. 
7880: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
7890: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20    }.#endif..#if 
78a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
78b0: 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a  CKING_STYLE.  /*
78c0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
78d0: 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f  schema.]lock_pro
78e0: 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50  xy_file.  **   P
78f0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c  RAGMA [schema.]l
7900: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d  ock_proxy_file =
7910: 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f   ":auto:"|"lock_
7920: 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a 0a  file_path".  **.
7930: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
7940: 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
7950: 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  the lock_proxy_f
7960: 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ile flag.  Chang
7970: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
7980: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
7990: 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20 75 73  ic file to be us
79a0: 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ed for database 
79b0: 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20 20  access locks..  
79c0: 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  **.  */.  case P
79d0: 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58  ragTyp_LOCK_PROX
79e0: 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69 66  Y_FILE: {.    if
79f0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
7a00: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
7a10: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
7a20: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
7a30: 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f 78        char *prox
7a40: 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e 55  y_file_path = NU
7a50: 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  LL;.      sqlite
7a60: 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20  3_file *pFile = 
7a70: 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
7a80: 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20  (pPager);.      
7a90: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7aa0: 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c 20  trolHint(pFile, 
7ab0: 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50  SQLITE_GET_LOCKP
7ac0: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69 6c        &proxy_fil
7af0: 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20 72  e_path);.      r
7b00: 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28  eturnSingleText(
7b10: 76 2c 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  v, "lock_proxy_f
7b20: 69 6c 65 22 2c 20 70 72 6f 78 79 5f 66 69 6c 65  ile", proxy_file
7b30: 5f 70 61 74 68 29 3b 0a 20 20 20 20 7d 65 6c 73  _path);.    }els
7b40: 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  e{.      Pager *
7b50: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
7b60: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
7b70: 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  pBt);.      sqli
7b80: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
7b90: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
7ba0: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
7bb0: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
7bc0: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
7bd0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
7be0: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
7bf0: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
7c00: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
7c10: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c30: 20 20 20 20 20 20 20 20 20 20 7a 52 69 67 68 74            zRight
7c40: 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  );.      } else 
7c50: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
7c60: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
7c70: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
7c80: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
7c90: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b            NULL);
7cc0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
7cd0: 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f  f( res!=SQLITE_O
7ce0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
7cf0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
7d00: 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  rse, "failed to 
7d10: 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66  set lock proxy f
7d20: 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67  ile");.        g
7d30: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
7d40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
7d50: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
7d60: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
7d70: 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59  ABLE_LOCKING_STY
7d80: 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20  LE */      .    
7d90: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7da0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 79 6e  GMA [schema.]syn
7db0: 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 20  chronous.  **   
7dc0: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
7dd0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c  synchronous=OFF|
7de0: 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20  ON|NORMAL|FULL. 
7df0: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
7e00: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
7e10: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79   value of the sy
7e20: 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20  nchronous flag. 
7e30: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
7e40: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64  he local value d
7e50: 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61  oes not make cha
7e60: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b  nges to the disk
7e70: 20 66 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20   file and the.  
7e80: 2a 2a 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ** default value
7e90: 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65   will be restore
7ea0: 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
7eb0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 0a  the database is.
7ec0: 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a    ** opened..  *
7ed0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
7ee0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a  _SYNCHRONOUS: {.
7ef0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
7f00: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
7f10: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 73 79 6e  ingleInt(v, "syn
7f20: 63 68 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e  chronous", pDb->
7f30: 73 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b  safety_level-1);
7f40: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7f50: 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
7f60: 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
7f70: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
7f80: 28 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20  (pParse, .      
7f90: 20 20 20 20 20 20 22 53 61 66 65 74 79 20 6c 65        "Safety le
7fa0: 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63  vel may not be c
7fb0: 68 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20  hanged inside a 
7fc0: 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20  transaction");. 
7fd0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
7fe0: 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 20 3d      int iLevel =
7ff0: 20 28 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c   (getSafetyLevel
8000: 28 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 29 20  (zRight,0,1)+1) 
8010: 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  & PAGER_SYNCHRON
8020: 4f 55 53 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20  OUS_MASK;.      
8030: 20 20 69 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20    if( iLevel==0 
8040: 29 20 69 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20  ) iLevel = 1;.  
8050: 20 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74        pDb->safet
8060: 79 5f 6c 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c  y_level = iLevel
8070: 3b 0a 20 20 20 20 20 20 20 20 73 65 74 41 6c 6c  ;.        setAll
8080: 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a  PagerFlags(db);.
8090: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
80a0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
80b0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
80c0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
80d0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
80e0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
80f0: 41 47 4d 41 53 0a 20 20 63 61 73 65 20 50 72 61  AGMAS.  case Pra
8100: 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20  gTyp_FLAG: {.   
8110: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29   if( zRight==0 )
8120: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
8130: 6e 67 6c 65 49 6e 74 28 76 2c 20 70 50 72 61 67  ngleInt(v, pPrag
8140: 6d 61 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e  ma->zName, (db->
8150: 66 6c 61 67 73 20 26 20 70 50 72 61 67 6d 61 2d  flags & pPragma-
8160: 3e 69 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20  >iArg)!=0 );.   
8170: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
8180: 74 20 6d 61 73 6b 20 3d 20 70 50 72 61 67 6d 61  t mask = pPragma
8190: 2d 3e 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61  ->iArg;    /* Ma
81a0: 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20 73 65  sk of bits to se
81b0: 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20  t or clear. */. 
81c0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
81d0: 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20  oCommit==0 ){.  
81e0: 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e        /* Foreign
81f0: 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d 61 79   key support may
8200: 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65 64 20   not be enabled 
8210: 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68 69 6c  or disabled whil
8220: 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a  e not.        **
8230: 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20   in auto-commit 
8240: 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mode.  */.      
8250: 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49    mask &= ~(SQLI
8260: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b  TE_ForeignKeys);
8270: 0a 20 20 20 20 20 20 7d 0a 23 69 66 20 53 51 4c  .      }.#if SQL
8280: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
8290: 49 43 41 54 49 4f 4e 0a 20 20 20 20 20 20 69 66  ICATION.      if
82a0: 28 20 64 62 2d 3e 61 75 74 68 2e 61 75 74 68 4c  ( db->auth.authL
82b0: 65 76 65 6c 3d 3d 55 41 55 54 48 5f 55 73 65 72  evel==UAUTH_User
82c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44   ){.        /* D
82d0: 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d  o not allow non-
82e0: 61 64 6d 69 6e 20 75 73 65 72 73 20 74 6f 20 6d  admin users to m
82f0: 6f 64 69 66 79 20 74 68 65 20 73 63 68 65 6d 61  odify the schema
8300: 20 61 72 62 69 74 72 61 72 69 6c 79 20 2a 2f 0a   arbitrarily */.
8310: 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20          mask &= 
8320: 7e 28 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  ~(SQLITE_WriteSc
8330: 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 7d 0a 23  hema);.      }.#
8340: 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 69 66 28  endif..      if(
8350: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
8360: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b  an(zRight, 0) ){
8370: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61  .        db->fla
8380: 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20  gs |= mask;.    
8390: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
83a0: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d   db->flags &= ~m
83b0: 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ask;.        if(
83c0: 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65   mask==SQLITE_De
83d0: 66 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65  ferFKs ) db->nDe
83e0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
83f0: 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  0;.      }..    
8400: 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65    /* Many of the
8410: 20 66 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f   flag-pragmas mo
8420: 64 69 66 79 20 74 68 65 20 63 6f 64 65 20 67 65  dify the code ge
8430: 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 53  nerated by the S
8440: 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d  QL .      ** com
8450: 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74  piler (eg. count
8460: 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64  _changes). So ad
8470: 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65  d an opcode to e
8480: 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20  xpire all.      
8490: 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20  ** compiled SQL 
84a0: 73 74 61 74 65 6d 65 6e 74 73 20 61 66 74 65 72  statements after
84b0: 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 70 72 61   modifying a pra
84c0: 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 20  gma value..     
84d0: 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
84e0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
84f0: 50 5f 45 78 70 69 72 65 2c 20 30 2c 20 30 29 3b  P_Expire, 0, 0);
8500: 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67  .      setAllPag
8510: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
8520: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
8530: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
8540: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
8550: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
8560: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
8570: 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  EMA_PRAGMAS.  /*
8580: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
8590: 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65  able_info(<table
85a0: 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  >).  **.  ** Ret
85b0: 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  urn a single row
85c0: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
85d0: 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   of the named ta
85e0: 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73  ble. The columns
85f0: 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74   of.  ** the ret
8600: 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20 61  urned data set a
8610: 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69  re:.  **.  ** ci
8620: 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  d:        Column
8630: 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72   id (numbered fr
8640: 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
8650: 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30 29  , starting at 0)
8660: 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20  .  ** name:     
8670: 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20    Column name.  
8680: 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20 43  ** type:       C
8690: 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f  olumn declaratio
86a0: 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74  n type..  ** not
86b0: 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66  null:    True if
86c0: 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70   'NOT NULL' is p
86d0: 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65  art of column de
86e0: 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64  claration.  ** d
86f0: 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64  flt_value: The d
8700: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
8710: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20   the column, if 
8720: 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  any..  */.  case
8730: 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49   PragTyp_TABLE_I
8740: 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20  NFO: if( zRight 
8750: 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  ){.    Table *pT
8760: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
8770: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
8780: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
8790: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
87a0: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
87b0: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
87c0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20  [] = {.         
87d0: 22 63 69 64 22 2c 20 22 6e 61 6d 65 22 2c 20 22  "cid", "name", "
87e0: 74 79 70 65 22 2c 20 22 6e 6f 74 6e 75 6c 6c 22  type", "notnull"
87f0: 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20  , "dflt_value", 
8800: 22 70 6b 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20  "pk".      };.  
8810: 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20      int i, k;.  
8820: 20 20 20 20 69 6e 74 20 6e 48 69 64 64 65 6e 20      int nHidden 
8830: 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d  = 0;.      Colum
8840: 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49  n *pCol;.      I
8850: 6e 64 65 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69  ndex *pPk = sqli
8860: 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
8870: 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20  ex(pTab);.      
8880: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36  pParse->nMem = 6
8890: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
88a0: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
88b0: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
88c0: 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e      setAllColumn
88d0: 4e 61 6d 65 73 28 76 2c 20 36 2c 20 61 7a 43 6f  Names(v, 6, azCo
88e0: 6c 29 3b 20 61 73 73 65 72 74 28 20 36 3d 3d 41  l); assert( 6==A
88f0: 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20  rraySize(azCol) 
8900: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8910: 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
8920: 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 29  es(pParse, pTab)
8930: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c  ;.      for(i=0,
8940: 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c   pCol=pTab->aCol
8950: 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20  ; i<pTab->nCol; 
8960: 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20  i++, pCol++){.  
8970: 20 20 20 20 20 20 69 66 28 20 49 73 48 69 64 64        if( IsHidd
8980: 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29  enColumn(pCol) )
8990: 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 48 69 64  {.          nHid
89a0: 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20  den++;.         
89b0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
89c0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
89d0: 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73   (pCol->colFlags
89e0: 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b   & COLFLAG_PRIMK
89f0: 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  EY)==0 ){.      
8a00: 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20      k = 0;.     
8a10: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b     }else if( pPk
8a20: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
8a30: 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20   k = 1;.        
8a40: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
8a50: 20 66 6f 72 28 6b 3d 31 3b 20 6b 3c 3d 70 54 61   for(k=1; k<=pTa
8a60: 62 2d 3e 6e 43 6f 6c 20 26 26 20 70 50 6b 2d 3e  b->nCol && pPk->
8a70: 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69  aiColumn[k-1]!=i
8a80: 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20  ; k++){}.       
8a90: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
8aa0: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
8ab0: 76 2c 20 31 2c 20 22 69 73 73 69 73 69 22 2c 0a  v, 1, "issisi",.
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8ad0: 2d 6e 48 69 64 64 65 6e 2c 0a 20 20 20 20 20 20  -nHidden,.      
8ae0: 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a           pCol->z
8af0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
8b00: 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65       pCol->zType
8b10: 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a   ? pCol->zType :
8b20: 20 22 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20   "",.           
8b30: 20 20 20 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c      pCol->notNul
8b40: 6c 20 3f 20 31 20 3a 20 30 2c 0a 20 20 20 20 20  l ? 1 : 0,.     
8b50: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e            pCol->
8b60: 7a 44 66 6c 74 2c 0a 20 20 20 20 20 20 20 20 20  zDflt,.         
8b70: 20 20 20 20 20 20 6b 29 3b 0a 20 20 20 20 20 20        k);.      
8b80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8b90: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
8ba0: 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20  Row, 1, 6);.    
8bb0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
8bc0: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
8bd0: 72 61 67 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a  ragTyp_STATS: {.
8be0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
8bf0: 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d   char *azCol[] =
8c00: 20 7b 20 22 74 61 62 6c 65 22 2c 20 22 69 6e 64   { "table", "ind
8c10: 65 78 22 2c 20 22 77 69 64 74 68 22 2c 20 22 68  ex", "width", "h
8c20: 65 69 67 68 74 22 20 7d 3b 0a 20 20 20 20 49 6e  eight" };.    In
8c30: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 48  dex *pIdx;.    H
8c40: 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20  ashElem *i;.    
8c50: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
8c60: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
8c70: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34  pParse->nMem = 4
8c80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64  ;.    sqlite3Cod
8c90: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
8ca0: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
8cb0: 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65  setAllColumnName
8cc0: 73 28 76 2c 20 34 2c 20 61 7a 43 6f 6c 29 3b 20  s(v, 4, azCol); 
8cd0: 20 61 73 73 65 72 74 28 20 34 3d 3d 41 72 72 61   assert( 4==Arra
8ce0: 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a  ySize(azCol) );.
8cf0: 20 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65      for(i=sqlite
8d00: 48 61 73 68 46 69 72 73 74 28 26 70 44 62 2d 3e  HashFirst(&pDb->
8d10: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
8d20: 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61  ); i; i=sqliteHa
8d30: 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20  shNext(i)){.    
8d40: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
8d50: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69  sqliteHashData(i
8d60: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8d70: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
8d80: 20 31 2c 20 22 73 73 69 69 22 2c 0a 20 20 20 20   1, "ssii",.    
8d90: 20 20 20 20 20 20 20 70 54 61 62 2d 3e 7a 4e 61         pTab->zNa
8da0: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 30  me,.           0
8db0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 6e  ,.           (in
8dc0: 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  t)sqlite3LogEstT
8dd0: 6f 49 6e 74 28 70 54 61 62 2d 3e 73 7a 54 61 62  oInt(pTab->szTab
8de0: 52 6f 77 29 2c 0a 20 20 20 20 20 20 20 20 20 20  Row),.          
8df0: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
8e00: 45 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 6e  EstToInt(pTab->n
8e10: 52 6f 77 4c 6f 67 45 73 74 29 29 3b 0a 20 20 20  RowLogEst));.   
8e20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8e30: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
8e40: 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20  tRow, 1, 4);.   
8e50: 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62     for(pIdx=pTab
8e60: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
8e70: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
8e80: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
8e90: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
8ea0: 76 2c 20 32 2c 20 22 73 69 69 22 2c 0a 20 20 20  v, 2, "sii",.   
8eb0: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e          pIdx->zN
8ec0: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
8ed0: 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45  (int)sqlite3LogE
8ee0: 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73 7a  stToInt(pIdx->sz
8ef0: 49 64 78 52 6f 77 29 2c 0a 20 20 20 20 20 20 20  IdxRow),.       
8f00: 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33      (int)sqlite3
8f10: 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78  LogEstToInt(pIdx
8f20: 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 30 5d  ->aiRowLogEst[0]
8f30: 29 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ));.        sqli
8f40: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8f50: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
8f60: 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 4);.      }.  
8f70: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
8f80: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
8f90: 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66 28  _INDEX_INFO: if(
8fa0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49   zRight ){.    I
8fb0: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
8fc0: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
8fd0: 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46   pIdx = sqlite3F
8fe0: 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69  indIndex(db, zRi
8ff0: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
9000: 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20  f( pIdx ){.     
9010: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
9020: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a  ar *azCol[] = {.
9030: 20 20 20 20 20 20 20 20 20 22 73 65 71 6e 6f 22           "seqno"
9040: 2c 20 22 63 69 64 22 2c 20 22 6e 61 6d 65 22 2c  , "cid", "name",
9050: 20 22 64 65 73 63 22 2c 20 22 63 6f 6c 6c 22 2c   "desc", "coll",
9060: 20 22 6b 65 79 22 0a 20 20 20 20 20 20 7d 3b 0a   "key".      };.
9070: 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
9080: 20 20 20 69 6e 74 20 6d 78 3b 0a 20 20 20 20 20     int mx;.     
9090: 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69 41   if( pPragma->iA
90a0: 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  rg ){.        /*
90b0: 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69   PRAGMA index_xi
90c0: 6e 66 6f 20 28 6e 65 77 65 72 20 76 65 72 73 69  nfo (newer versi
90d0: 6f 6e 20 77 69 74 68 20 6d 6f 72 65 20 72 6f 77  on with more row
90e0: 73 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 29 20 2a  s and columns) *
90f0: 2f 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70  /.        mx = p
9100: 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20  Idx->nColumn;.  
9110: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
9120: 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 7d 65  em = 6;.      }e
9130: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
9140: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66  PRAGMA index_inf
9150: 6f 20 28 6c 65 67 61 63 79 20 76 65 72 73 69 6f  o (legacy versio
9160: 6e 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78  n) */.        mx
9170: 20 3d 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c   = pIdx->nKeyCol
9180: 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65  ;.        pParse
9190: 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
91a0: 20 20 7d 0a 20 20 20 20 20 20 70 54 61 62 20 3d    }.      pTab =
91b0: 20 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20   pIdx->pTable;. 
91c0: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
91d0: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
91e0: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
91f0: 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d   assert( pParse-
9200: 3e 6e 4d 65 6d 3c 3d 41 72 72 61 79 53 69 7a 65  >nMem<=ArraySize
9210: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20  (azCol) );.     
9220: 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d   setAllColumnNam
9230: 65 73 28 76 2c 20 70 50 61 72 73 65 2d 3e 6e 4d  es(v, pParse->nM
9240: 65 6d 2c 20 61 7a 43 6f 6c 29 3b 0a 20 20 20 20  em, azCol);.    
9250: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6d 78 3b    for(i=0; i<mx;
9260: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
9270: 31 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e  16 cnum = pIdx->
9280: 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20  aiColumn[i];.   
9290: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
92a0: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
92b0: 22 69 69 73 22 2c 20 69 2c 20 63 6e 75 6d 2c 0a  "iis", i, cnum,.
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6e 75               cnu
92e0: 6d 3c 30 20 3f 20 30 20 3a 20 70 54 61 62 2d 3e  m<0 ? 0 : pTab->
92f0: 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65  aCol[cnum].zName
9300: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
9310: 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a  Pragma->iArg ){.
9320: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9330: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
9340: 2c 20 34 2c 20 22 69 73 69 22 2c 0a 20 20 20 20  , 4, "isi",.    
9350: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 61 53          pIdx->aS
9360: 6f 72 74 4f 72 64 65 72 5b 69 5d 2c 0a 20 20 20  ortOrder[i],.   
9370: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 61           pIdx->a
9380: 7a 43 6f 6c 6c 5b 69 5d 2c 0a 20 20 20 20 20 20  zColl[i],.      
9390: 20 20 20 20 20 20 69 3c 70 49 64 78 2d 3e 6e 4b        i<pIdx->nK
93a0: 65 79 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20  eyCol);.        
93b0: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
93c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
93d0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
93e0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20  pParse->nMem);. 
93f0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
9400: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
9410: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
9420: 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74  LIST: if( zRight
9430: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
9440: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
9450: 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b  pTab;.    int i;
9460: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
9470: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
9480: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
9490: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
94a0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
94b0: 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20  t char *azCol[] 
94c0: 3d 20 7b 0a 20 20 20 20 20 20 20 20 22 73 65 71  = {.        "seq
94d0: 22 2c 20 22 6e 61 6d 65 22 2c 20 22 75 6e 69 71  ", "name", "uniq
94e0: 75 65 22 2c 20 22 6f 72 69 67 69 6e 22 2c 20 22  ue", "origin", "
94f0: 70 61 72 74 69 61 6c 22 0a 20 20 20 20 20 20 7d  partial".      }
9500: 3b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69  ;.      v = sqli
9510: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
9520: 65 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  e);.      pParse
9530: 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20 20 20 20  ->nMem = 5;.    
9540: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
9550: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
9560: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 65  , iDb);.      se
9570: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
9580: 76 2c 20 35 2c 20 61 7a 43 6f 6c 29 3b 20 20 61  v, 5, azCol);  a
9590: 73 73 65 72 74 28 20 35 3d 3d 41 72 72 61 79 53  ssert( 5==ArrayS
95a0: 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
95b0: 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61      for(pIdx=pTa
95c0: 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20  b->pIndex, i=0; 
95d0: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
95e0: 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20  >pNext, i++){.  
95f0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
9600: 20 2a 61 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b   *azOrigin[] = {
9610: 20 22 63 22 2c 20 22 75 22 2c 20 22 70 6b 22 20   "c", "u", "pk" 
9620: 7d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  };.        sqlit
9630: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9640: 76 2c 20 31 2c 20 22 69 73 69 73 69 22 2c 0a 20  v, 1, "isisi",. 
9650: 20 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20            i,.   
9660: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e          pIdx->zN
9670: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
9680: 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49  IsUniqueIndex(pI
9690: 64 78 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  dx),.           
96a0: 61 7a 4f 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69  azOrigin[pIdx->i
96b0: 64 78 54 79 70 65 5d 2c 0a 20 20 20 20 20 20 20  dxType],.       
96c0: 20 20 20 20 70 49 64 78 2d 3e 70 50 61 72 74 49      pIdx->pPartI
96d0: 64 78 57 68 65 72 65 21 3d 30 29 3b 0a 20 20 20  dxWhere!=0);.   
96e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
96f0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
9700: 75 6c 74 52 6f 77 2c 20 31 2c 20 35 29 3b 0a 20  ultRow, 1, 5);. 
9710: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
9720: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
9730: 65 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41  e PragTyp_DATABA
9740: 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 73  SE_LIST: {.    s
9750: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
9760: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73   *azCol[] = { "s
9770: 65 71 22 2c 20 22 6e 61 6d 65 22 2c 20 22 66 69  eq", "name", "fi
9780: 6c 65 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69  le" };.    int i
9790: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
97a0: 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 65 74 41  em = 3;.    setA
97b0: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
97c0: 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65   3, azCol); asse
97d0: 72 74 28 20 33 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 3==ArraySize
97e0: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66  (azCol) );.    f
97f0: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
9800: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  b; i++){.      i
9810: 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  f( db->aDb[i].pB
9820: 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  t==0 ) continue;
9830: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
9840: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21  b->aDb[i].zName!
9850: 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =0 );.      sqli
9860: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
9870: 28 76 2c 20 31 2c 20 22 69 73 73 22 2c 0a 20 20  (v, 1, "iss",.  
9880: 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20         i,.      
9890: 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e     db->aDb[i].zN
98a0: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 73 71  ame,.         sq
98b0: 6c 69 74 65 33 42 74 72 65 65 47 65 74 46 69 6c  lite3BtreeGetFil
98c0: 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d  ename(db->aDb[i]
98d0: 2e 70 42 74 29 29 3b 0a 20 20 20 20 20 20 73 71  .pBt));.      sq
98e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
98f0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9900: 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20   1, 3);.    }.  
9910: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
9920: 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41  se PragTyp_COLLA
9930: 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20  TION_LIST: {.   
9940: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
9950: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20  ar *azCol[] = { 
9960: 22 73 65 71 22 2c 20 22 6e 61 6d 65 22 20 7d 3b  "seq", "name" };
9970: 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a  .    int i = 0;.
9980: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b      HashElem *p;
9990: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
99a0: 6d 20 3d 20 32 3b 0a 20 20 20 20 73 65 74 41 6c  m = 2;.    setAl
99b0: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
99c0: 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  2, azCol); asser
99d0: 74 28 20 32 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 2==ArraySize(
99e0: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f  azCol) );.    fo
99f0: 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(p=sqliteHashFi
9a00: 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  rst(&db->aCollSe
9a10: 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48  q); p; p=sqliteH
9a20: 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20  ashNext(p)){.   
9a30: 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c     CollSeq *pCol
9a40: 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73  l = (CollSeq *)s
9a50: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 29  qliteHashData(p)
9a60: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9a70: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
9a80: 31 2c 20 22 69 73 22 2c 20 69 2b 2b 2c 20 70 43  1, "is", i++, pC
9a90: 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  oll->zName);.   
9aa0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9ab0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9ac0: 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20  tRow, 1, 2);.   
9ad0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
9ae0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
9af0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
9b00: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
9b10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
9b20: 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20  EIGN_KEY.  case 
9b30: 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f  PragTyp_FOREIGN_
9b40: 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52  KEY_LIST: if( zR
9b50: 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79  ight ){.    FKey
9b60: 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65   *pFK;.    Table
9b70: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62   *pTab;.    pTab
9b80: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
9b90: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
9ba0: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
9bb0: 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  ab ){.      v = 
9bc0: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
9bd0: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 46  Parse);.      pF
9be0: 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b  K = pTab->pFKey;
9bf0: 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29  .      if( pFK )
9c00: 7b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63  {.        static
9c10: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
9c20: 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ol[] = {.       
9c30: 20 20 20 20 22 69 64 22 2c 20 22 73 65 71 22 2c      "id", "seq",
9c40: 20 22 74 61 62 6c 65 22 2c 20 22 66 72 6f 6d 22   "table", "from"
9c50: 2c 20 22 74 6f 22 2c 20 22 6f 6e 5f 75 70 64 61  , "to", "on_upda
9c60: 74 65 22 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22  te", "on_delete"
9c70: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 22 6d 61  ,.           "ma
9c80: 74 63 68 22 0a 20 20 20 20 20 20 20 20 7d 3b 0a  tch".        };.
9c90: 20 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20          int i = 
9ca0: 30 3b 20 0a 20 20 20 20 20 20 20 20 70 50 61 72  0; .        pPar
9cb0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20  se->nMem = 8;.  
9cc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
9cd0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
9ce0: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
9cf0: 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e      setAllColumn
9d00: 4e 61 6d 65 73 28 76 2c 20 38 2c 20 61 7a 43 6f  Names(v, 8, azCo
9d10: 6c 29 3b 20 61 73 73 65 72 74 28 20 38 3d 3d 41  l); assert( 8==A
9d20: 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20  rraySize(azCol) 
9d30: 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  );.        while
9d40: 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20  (pFK){.         
9d50: 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20   int j;.        
9d60: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b    for(j=0; j<pFK
9d70: 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20  ->nCol; j++){.  
9d80: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9d90: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
9da0: 2c 20 31 2c 20 22 69 69 73 73 73 73 73 73 22 2c  , 1, "iissssss",
9db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9dc0: 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20      i,.         
9dd0: 20 20 20 20 20 20 20 20 20 20 6a 2c 0a 20 20 20            j,.   
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9df0: 70 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20 20  pFK->zTo,.      
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61               pTa
9e10: 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f  b->aCol[pFK->aCo
9e20: 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d  l[j].iFrom].zNam
9e30: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
9e40: 20 20 20 20 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b        pFK->aCol[
9e50: 6a 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20 20 20 20  j].zCol,.       
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69              acti
9e70: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
9e80: 69 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20  ion[1]),  /* ON 
9e90: 55 50 44 41 54 45 20 2a 2f 0a 20 20 20 20 20 20  UPDATE */.      
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74               act
9eb0: 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63  ionName(pFK->aAc
9ec0: 74 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e  tion[0]),  /* ON
9ed0: 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20 20 20 20   DELETE */.     
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
9ef0: 4f 4e 45 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ONE");.         
9f00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9f10: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9f20: 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20  tRow, 1, 8);.   
9f30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9f40: 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20     ++i;.        
9f50: 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65    pFK = pFK->pNe
9f60: 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  xtFrom;.        
9f70: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
9f80: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
9f90: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
9fa0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
9fb0: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
9fc0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9fd0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66  _FOREIGN_KEY.#if
9fe0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9ff0: 5f 54 52 49 47 47 45 52 0a 20 20 63 61 73 65 20  _TRIGGER.  case 
a000: 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f  PragTyp_FOREIGN_
a010: 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20  KEY_CHECK: {.   
a020: 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20   FKey *pFK;     
a030: 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72          /* A for
a040: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
a050: 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  int */.    Table
a060: 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
a070: 20 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65    /* Child table
a080: 20 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45   contain "REFERE
a090: 4e 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f  NCES" keyword */
a0a0: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72  .    Table *pPar
a0b0: 65 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  ent;        /* P
a0c0: 61 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74  arent table that
a0d0: 20 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f   child points to
a0e0: 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
a0f0: 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Idx;           /
a100: 2a 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70  * Index in the p
a110: 61 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20  arent table */. 
a120: 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20     int i;       
a130: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
a140: 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65  p counter:  Fore
a150: 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66  ign key number f
a160: 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69  or pTab */.    i
a170: 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  nt j;           
a180: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
a190: 75 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66  unter:  Field of
a1a0: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
a1b0: 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d   */.    HashElem
a1c0: 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f   *k;           /
a1d0: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
a1e0: 20 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73   Next table in s
a1f0: 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74  chema */.    int
a200: 20 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   x;             
a210: 20 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61      /* result va
a220: 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e  riable */.    in
a230: 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
a240: 20 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74       /* 3 regist
a250: 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65  ers to hold a re
a260: 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20  sult row */.    
a270: 69 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20  int regKey;     
a280: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
a290: 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66  er to hold key f
a2a0: 6f 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20  or checking the 
a2b0: 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  FK */.    int re
a2c0: 67 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20  gRow;           
a2d0: 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f   /* Registers to
a2e0: 20 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d   hold a row from
a2f0: 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74   pTab */.    int
a300: 20 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20   addrTop;       
a310: 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20      /* Top of a 
a320: 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f  loop checking fo
a330: 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20  reign keys */.  
a340: 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20    int addrOk;   
a350: 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
a360: 20 68 65 72 65 20 69 66 20 74 68 65 20 6b 65 79   here if the key
a370: 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e   is OK */.    in
a380: 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20  t *aiCols;      
a390: 20 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f       /* child to
a3a0: 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d   parent column m
a3b0: 61 70 70 69 6e 67 20 2a 2f 0a 20 20 20 20 73 74  apping */.    st
a3c0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
a3d0: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61  *azCol[] = { "ta
a3e0: 62 6c 65 22 2c 20 22 72 6f 77 69 64 22 2c 20 22  ble", "rowid", "
a3f0: 70 61 72 65 6e 74 22 2c 20 22 66 6b 69 64 22 20  parent", "fkid" 
a400: 7d 3b 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c  };..    regResul
a410: 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  t = pParse->nMem
a420: 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  +1;.    pParse->
a430: 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72  nMem += 4;.    r
a440: 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65  egKey = ++pParse
a450: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52  ->nMem;.    regR
a460: 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  ow = ++pParse->n
a470: 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c  Mem;.    v = sql
a480: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
a490: 73 65 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43  se);.    setAllC
a4a0: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c  olumnNames(v, 4,
a4b0: 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28   azCol); assert(
a4c0: 20 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a   4==ArraySize(az
a4d0: 43 6f 6c 29 20 29 3b 0a 20 20 20 20 73 71 6c 69  Col) );.    sqli
a4e0: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
a4f0: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
a500: 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65  ;.    k = sqlite
a510: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
a520: 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d  Db[iDb].pSchema-
a530: 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20 77  >tblHash);.    w
a540: 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20 20  hile( k ){.     
a550: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
a560: 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 73 71         pTab = sq
a570: 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
a580: 28 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69 67  (pParse, 0, zRig
a590: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20  ht, zDb);.      
a5a0: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d    k = 0;.      }
a5b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54  else{.        pT
a5c0: 61 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c  ab = (Table*)sql
a5d0: 69 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a  iteHashData(k);.
a5e0: 20 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c 69          k = sqli
a5f0: 74 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20  teHashNext(k);. 
a600: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
a610: 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62   pTab==0 || pTab
a620: 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e  ->pFKey==0 ) con
a630: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
a640: 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50  ite3TableLock(pP
a650: 61 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62 2d  arse, iDb, pTab-
a660: 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e  >tnum, 0, pTab->
a670: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66  zName);.      if
a680: 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67  ( pTab->nCol+reg
a690: 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  Row>pParse->nMem
a6a0: 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20   ) pParse->nMem 
a6b0: 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72  = pTab->nCol + r
a6c0: 65 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c  egRow;.      sql
a6d0: 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50  ite3OpenTable(pP
a6e0: 61 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70 54  arse, 0, iDb, pT
a6f0: 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29  ab, OP_OpenRead)
a700: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
a710: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
a720: 20 72 65 67 52 65 73 75 6c 74 2c 20 70 54 61 62   regResult, pTab
a730: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
a740: 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61  for(i=1, pFK=pTa
a750: 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69  b->pFKey; pFK; i
a760: 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65  ++, pFK=pFK->pNe
a770: 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20  xtFrom){.       
a780: 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74   pParent = sqlit
a790: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
a7a0: 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a  pFK->zTo, zDb);.
a7b0: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
a7c0: 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ent==0 ) continu
a7d0: 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  e;.        pIdx 
a7e0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  = 0;.        sql
a7f0: 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50  ite3TableLock(pP
a800: 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65  arse, iDb, pPare
a810: 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61  nt->tnum, 0, pPa
a820: 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  rent->zName);.  
a830: 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65        x = sqlite
a840: 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70  3FkLocateIndex(p
a850: 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20  Parse, pParent, 
a860: 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a  pFK, &pIdx, 0);.
a870: 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30          if( x==0
a880: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
a890: 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20  ( pIdx==0 ){.   
a8a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a8b0: 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65  OpenTable(pParse
a8c0: 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  , i, iDb, pParen
a8d0: 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b  t, OP_OpenRead);
a8e0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
a8f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
a900: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
a910: 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20  v, OP_OpenRead, 
a920: 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69  i, pIdx->tnum, i
a930: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Db);.           
a940: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 50   sqlite3VdbeSetP
a950: 34 4b 65 79 49 6e 66 6f 28 70 50 61 72 73 65 2c  4KeyInfo(pParse,
a960: 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20   pIdx);.        
a970: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
a980: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d  e{.          k =
a990: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72   0;.          br
a9a0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
a9b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
a9c0: 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72  ert( pParse->nEr
a9d0: 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b  r>0 || pFK==0 );
a9e0: 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29  .      if( pFK )
a9f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66   break;.      if
aa00: 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69  ( pParse->nTab<i
aa10: 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20   ) pParse->nTab 
aa20: 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54  = i;.      addrT
aa30: 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  op = sqlite3Vdbe
aa40: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77  AddOp1(v, OP_Rew
aa50: 69 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76  ind, 0); VdbeCov
aa60: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
aa70: 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61  for(i=1, pFK=pTa
aa80: 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69  b->pFKey; pFK; i
aa90: 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65  ++, pFK=pFK->pNe
aaa0: 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20  xtFrom){.       
aab0: 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74   pParent = sqlit
aac0: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
aad0: 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a  pFK->zTo, zDb);.
aae0: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
aaf0: 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73  ;.        aiCols
ab00: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66   = 0;.        if
ab10: 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20  ( pParent ){.   
ab20: 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74         x = sqlit
ab30: 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
ab40: 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c  pParse, pParent,
ab50: 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69   pFK, &pIdx, &ai
ab60: 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20  Cols);.         
ab70: 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b   assert( x==0 );
ab80: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
ab90: 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69     addrOk = sqli
aba0: 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
abb0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  (v);.        if(
abc0: 20 70 50 61 72 65 6e 74 20 26 26 20 70 49 64 78   pParent && pIdx
abd0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
abe0: 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d   int iKey = pFK-
abf0: 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a  >aCol[0].iFrom;.
ac00: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
ac10: 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65  ( iKey>=0 && iKe
ac20: 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a  y<pTab->nCol );.
ac30: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4b            if( iK
ac40: 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20  ey!=pTab->iPKey 
ac50: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
ac60: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
ac70: 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30  (v, OP_Column, 0
ac80: 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b  , iKey, regRow);
ac90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
aca0: 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c  ite3ColumnDefaul
acb0: 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c  t(v, pTab, iKey,
acc0: 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20   regRow);.      
acd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ace0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73  eAddOp2(v, OP_Is
acf0: 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64  Null, regRow, ad
ad00: 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72  drOk); VdbeCover
ad10: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
ad20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ad30: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74  ddOp2(v, OP_Must
ad40: 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a  BeInt, regRow, .
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ad60: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
ad70: 74 41 64 64 72 28 76 29 2b 33 29 3b 20 56 64 62  tAddr(v)+3); Vdb
ad80: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
ad90: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
ada0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
adb0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
adc0: 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67  OP_Rowid, 0, reg
add0: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
ade0: 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  }.          sqli
adf0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
ae00: 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69   OP_NotExists, i
ae10: 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 20 56 64  , 0, regRow); Vd
ae20: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
ae30: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ae40: 56 64 62 65 47 6f 74 6f 28 76 2c 20 61 64 64 72  VdbeGoto(v, addr
ae50: 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Ok);.          s
ae60: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
ae70: 72 65 28 76 2c 20 73 71 6c 69 74 65 33 56 64 62  re(v, sqlite3Vdb
ae80: 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 2d  eCurrentAddr(v)-
ae90: 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  2);.        }els
aea0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  e{.          for
aeb0: 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f  (j=0; j<pFK->nCo
aec0: 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  l; j++){.       
aed0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72       sqlite3Expr
aee0: 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
aef0: 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 30 2c  able(v, pTab, 0,
af00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 69 43               aiC
af20: 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20  ols ? aiCols[j] 
af30: 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69  : pFK->aCol[j].i
af40: 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b  From, regRow+j);
af50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
af60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
af70: 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67  , OP_IsNull, reg
af80: 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 20  Row+j, addrOk); 
af90: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
afa0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
afb0: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
afc0: 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  nt ){.          
afd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
afe0: 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65  Op4(v, OP_MakeRe
aff0: 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20 70 46  cord, regRow, pF
b000: 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 2c  K->nCol, regKey,
b010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b030: 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
b040: 69 74 79 53 74 72 28 64 62 2c 70 49 64 78 29 2c  ityStr(db,pIdx),
b050: 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20   pFK->nCol);.   
b060: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b070: 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c  VdbeAddOp4Int(v,
b080: 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64   OP_Found, i, ad
b090: 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29  drOk, regKey, 0)
b0a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 64  ;.            Vd
b0b0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
b0c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
b0d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
b0e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b0f0: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
b100: 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20  egResult+1);.   
b110: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b120: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 72 65 67  MultiLoad(v, reg
b130: 52 65 73 75 6c 74 2b 32 2c 20 22 73 69 22 2c 20  Result+2, "si", 
b140: 70 46 4b 2d 3e 7a 54 6f 2c 20 69 2d 31 29 3b 0a  pFK->zTo, i-1);.
b150: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b160: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b170: 52 65 73 75 6c 74 52 6f 77 2c 20 72 65 67 52 65  ResultRow, regRe
b180: 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20 20  sult, 4);.      
b190: 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73    sqlite3VdbeRes
b1a0: 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61 64 64  olveLabel(v, add
b1b0: 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71  rOk);.        sq
b1c0: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
b1d0: 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d  aiCols);.      }
b1e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
b1f0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e  beAddOp2(v, OP_N
b200: 65 78 74 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b  ext, 0, addrTop+
b210: 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  1); VdbeCoverage
b220: 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (v);.      sqlit
b230: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
b240: 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20 20 20 20  , addrTop);.    
b250: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
b260: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
b270: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
b280: 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66  IGGER) */.#endif
b290: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
b2a0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
b2b0: 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65  _KEY) */..#ifnde
b2c0: 66 20 4e 44 45 42 55 47 0a 20 20 63 61 73 65 20  f NDEBUG.  case 
b2d0: 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54  PragTyp_PARSER_T
b2e0: 52 41 43 45 3a 20 7b 0a 20 20 20 20 69 66 28 20  RACE: {.    if( 
b2f0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
b300: 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f  if( sqlite3GetBo
b310: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29  olean(zRight, 0)
b320: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
b330: 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 73  te3ParserTrace(s
b340: 74 64 6f 75 74 2c 20 22 70 61 72 73 65 72 3a 20  tdout, "parser: 
b350: 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ");.      }else{
b360: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b370: 50 61 72 73 65 72 54 72 61 63 65 28 30 2c 20 30  ParserTrace(0, 0
b380: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
b390: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
b3a0: 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73  ndif..  /* Reins
b3b0: 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e  tall the LIKE an
b3c0: 64 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73  d GLOB functions
b3d0: 2e 20 20 54 68 65 20 76 61 72 69 61 6e 74 20 6f  .  The variant o
b3e0: 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64  f LIKE.  ** used
b3f0: 20 77 69 6c 6c 20 62 65 20 63 61 73 65 20 73 65   will be case se
b400: 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f 74 20 64  nsitive or not d
b410: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
b420: 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  RHS..  */.  case
b430: 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45   PragTyp_CASE_SE
b440: 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a  NSITIVE_LIKE: {.
b450: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
b460: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
b470: 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
b480: 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69 74 65 33  ions(db, sqlite3
b490: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
b4a0: 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20  t, 0));.    }.  
b4b0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e  }.  break;..#ifn
b4c0: 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  def SQLITE_INTEG
b4d0: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
b4e0: 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51  _MAX.# define SQ
b4f0: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
b500: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31  HECK_ERROR_MAX 1
b510: 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  00.#endif..#ifnd
b520: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
b530: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20  NTEGRITY_CHECK. 
b540: 20 2f 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63   /* Pragma "quic
b550: 6b 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64 75  k_check" is redu
b560: 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a  ced version of .
b570: 20 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63    ** integrity_c
b580: 68 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f  heck designed to
b590: 20 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74   detect most dat
b5a0: 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
b5b0: 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f  .  ** without mo
b5c0: 73 74 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65  st of the overhe
b5d0: 61 64 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74  ad of a full int
b5e0: 65 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20  egrity-check..  
b5f0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
b600: 70 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  p_INTEGRITY_CHEC
b610: 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20  K: {.    int i, 
b620: 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a  j, addr, mxErr;.
b630: 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20 74 68 61  .    /* Code tha
b640: 74 20 61 70 70 65 61 72 73 20 61 74 20 74 68 65  t appears at the
b650: 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 74 65   end of the inte
b660: 67 72 69 74 79 20 63 68 65 63 6b 2e 20 20 49 66  grity check.  If
b670: 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20 20 2a 2a   no error.    **
b680: 20 6d 65 73 73 61 67 65 73 20 68 61 76 65 20 62   messages have b
b690: 65 65 6e 20 67 65 6e 65 72 61 74 65 64 2c 20 6f  een generated, o
b6a0: 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74 68 65 72  utput OK.  Other
b6b0: 77 69 73 65 20 6f 75 74 70 75 74 20 74 68 65 0a  wise output the.
b6c0: 20 20 20 20 2a 2a 20 65 72 72 6f 72 20 6d 65 73      ** error mes
b6d0: 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20 20 20 20  sage.    */.    
b6e0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
b6f0: 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53   iLn = VDBE_OFFS
b700: 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20  ET_LINENO(2);.  
b710: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
b720: 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64  dbeOpList endCod
b730: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  e[] = {.      { 
b740: 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20  OP_AddImm,      
b750: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 0,        0},
b760: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
b770: 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20    { OP_If,      
b780: 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20      1, 0,       
b790: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
b7a0: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
b7b0: 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20  g8,     0, 3,   
b7c0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32       0},    /* 2
b7d0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52   */.      { OP_R
b7e0: 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31  esultRow,   3, 1
b7f0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
b800: 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51   };..    int isQ
b810: 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54  uick = (sqlite3T
b820: 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29  olower(zLeft[0])
b830: 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20  =='q');..    /* 
b840: 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f  If the PRAGMA co
b850: 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65  mmand was of the
b860: 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64   form "PRAGMA <d
b870: 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65  b>.integrity_che
b880: 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e  ck",.    ** then
b890: 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 74   iDb is set to t
b8a0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
b8b0: 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69 66  database identif
b8c0: 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20  ied by <db>..   
b8d0: 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65   ** In this case
b8e0: 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  , the integrity 
b8f0: 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20  of database iDb 
b900: 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65 64  only is verified
b910: 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56   by.    ** the V
b920: 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f  DBE created belo
b930: 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  w..    **.    **
b940: 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74   Otherwise, if t
b950: 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73  he command was s
b960: 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e  imply "PRAGMA in
b970: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28  tegrity_check" (
b980: 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d  or.    ** "PRAGM
b990: 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c  A quick_check"),
b9a0: 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74   then iDb is set
b9b0: 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63   to 0. In this c
b9c0: 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20  ase, set iDb.   
b9d0: 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20   ** to -1 here, 
b9e0: 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
b9f0: 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64   the VDBE should
ba00: 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74 65   verify the inte
ba10: 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  grity.    ** of 
ba20: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
ba30: 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20  abases.  */.    
ba40: 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29  assert( iDb>=0 )
ba50: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  ;.    assert( iD
ba60: 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20  b==0 || pId2->z 
ba70: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d  );.    if( pId2-
ba80: 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31  >z==0 ) iDb = -1
ba90: 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
baa0: 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70 72  lize the VDBE pr
bab0: 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61  ogram */.    pPa
bac0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
bad0: 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e     setOneColumnN
bae0: 61 6d 65 28 76 2c 20 22 69 6e 74 65 67 72 69 74  ame(v, "integrit
baf0: 79 5f 63 68 65 63 6b 22 29 3b 0a 0a 20 20 20 20  y_check");..    
bb00: 2f 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d  /* Set the maxim
bb10: 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a  um error count *
bb20: 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51  /.    mxErr = SQ
bb30: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
bb40: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a  HECK_ERROR_MAX;.
bb50: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
bb60: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  {.      sqlite3G
bb70: 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20  etInt32(zRight, 
bb80: 26 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69  &mxErr);.      i
bb90: 66 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20  f( mxErr<=0 ){. 
bba0: 20 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53         mxErr = S
bbb0: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
bbc0: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b  CHECK_ERROR_MAX;
bbd0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
bbe0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bbf0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
bc00: 65 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20  er, mxErr, 1);  
bc10: 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20  /* reg[1] holds 
bc20: 65 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a  errors left */..
bc30: 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74      /* Do an int
bc40: 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20  egrity check on 
bc50: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  each database fi
bc60: 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d  le */.    for(i=
bc70: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
bc80: 2b 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c  +){.      HashEl
bc90: 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73  em *x;.      Has
bca0: 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20  h *pTbls;.      
bcb0: 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20  int cnt = 0;..  
bcc0: 20 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d      if( OMIT_TEM
bcd0: 50 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f  PDB && i==1 ) co
bce0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66  ntinue;.      if
bcf0: 28 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69  ( iDb>=0 && i!=i
bd00: 44 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a  Db ) continue;..
bd10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
bd20: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
bd30: 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20  arse, i);.      
bd40: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
bd50: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
bd60: 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c  fPos, 1); /* Hal
bd70: 74 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f  t if out of erro
bd80: 72 73 20 2a 2f 0a 20 20 20 20 20 20 56 64 62 65  rs */.      Vdbe
bd90: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
bda0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bdb0: 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
bdc0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71   0, 0);.      sq
bdd0: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
bde0: 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20  e(v, addr);..   
bdf0: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
be00: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74  grity check of t
be10: 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20  he B-Tree.      
be20: 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67 69  **.      ** Begi
be30: 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65 67  n by filling reg
be40: 69 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e  isters 2, 3, ...
be50: 20 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20 70   with the root p
be60: 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20  ages numbers.   
be70: 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61     ** for all ta
be80: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
be90: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
bea0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
beb0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
bec0: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
bed0: 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20  db, i, 0) );.   
bee0: 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e     pTbls = &db->
bef0: 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[i].pSchema->
bf00: 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66  tblHash;.      f
bf10: 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46  or(x=sqliteHashF
bf20: 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20  irst(pTbls); x; 
bf30: 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  x=sqliteHashNext
bf40: 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61  (x)){.        Ta
bf50: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
bf60: 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20  teHashData(x);. 
bf70: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
bf80: 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  dx;.        if( 
bf90: 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
bfa0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
bfb0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bfc0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61   OP_Integer, pTa
bfd0: 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b  b->tnum, 2+cnt);
bfe0: 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43  .          VdbeC
bff0: 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c  omment((v, "%s",
c000: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a   pTab->zName));.
c010: 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b            cnt++;
c020: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
c030: 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62     for(pIdx=pTab
c040: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
c050: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
c060: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
c070: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c080: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49  , OP_Integer, pI
c090: 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29  dx->tnum, 2+cnt)
c0a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65  ;.          Vdbe
c0b0: 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22  Comment((v, "%s"
c0c0: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b  , pIdx->zName));
c0d0: 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  .          cnt++
c0e0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
c0f0: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61    }..      /* Ma
c100: 6b 65 20 73 75 72 65 20 73 75 66 66 69 63 69 65  ke sure sufficie
c110: 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67  nt number of reg
c120: 69 73 74 65 72 73 20 68 61 76 65 20 62 65 65 6e  isters have been
c130: 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
c140: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
c150: 20 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e   = MAX( pParse->
c160: 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a  nMem, cnt+8 );..
c170: 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65 20        /* Do the 
c180: 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74 79  b-tree integrity
c190: 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20   checks */.     
c1a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c1b0: 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69  p3(v, OP_Integri
c1c0: 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29  tyCk, 2, cnt, 1)
c1d0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c1e0: 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28  dbeChangeP5(v, (
c1f0: 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64  u8)i);.      add
c200: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
c210: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp1(v, OP_IsNu
c220: 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76 65  ll, 2); VdbeCove
c230: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
c240: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
c250: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c260: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
c270: 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66    sqlite3MPrintf
c280: 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74  (db, "*** in dat
c290: 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c  abase %s ***\n",
c2a0: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
c2b0: 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f  e),.         P4_
c2c0: 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20  DYNAMIC);.      
c2d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c2e0: 33 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c  3(v, OP_Move, 2,
c2f0: 20 34 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71   4, 1);.      sq
c300: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
c310: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c  v, OP_Concat, 4,
c320: 20 33 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71   3, 2);.      sq
c330: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c340: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
c350: 20 32 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71   2, 1);.      sq
c360: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
c370: 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20  e(v, addr);..   
c380: 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
c390: 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73 20  all the indices 
c3a0: 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20  are constructed 
c3b0: 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20 20  correctly..     
c3c0: 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d   */.      for(x=
c3d0: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
c3e0: 70 54 62 6c 73 29 3b 20 78 20 26 26 20 21 69 73  pTbls); x && !is
c3f0: 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48  Quick; x=sqliteH
c400: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
c410: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
c420: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
c430: 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e  a(x);.        In
c440: 64 65 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b  dex *pIdx, *pPk;
c450: 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
c460: 70 50 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20  pPrior = 0;.    
c470: 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b      int loopTop;
c480: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 44 61  .        int iDa
c490: 74 61 43 75 72 2c 20 69 49 64 78 43 75 72 3b 0a  taCur, iIdxCur;.
c4a0: 20 20 20 20 20 20 20 20 69 6e 74 20 72 31 20 3d          int r1 =
c4b0: 20 2d 31 3b 0a 0a 20 20 20 20 20 20 20 20 69 66   -1;..        if
c4c0: 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d  ( pTab->pIndex==
c4d0: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
c4e0: 20 20 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52        pPk = HasR
c4f0: 6f 77 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a  owid(pTab) ? 0 :
c500: 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b   sqlite3PrimaryK
c510: 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20  eyIndex(pTab);. 
c520: 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
c530: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
c540: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
c550: 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74    /* Stop if out
c560: 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20   of errors */.  
c570: 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
c580: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73  ge(v);.        s
c590: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c5a0: 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
c5b0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
c5c0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
c5d0: 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20  v, addr);.      
c5e0: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63    sqlite3ExprCac
c5f0: 68 65 43 6c 65 61 72 28 70 50 61 72 73 65 29 3b  heClear(pParse);
c600: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
c610: 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
c620: 63 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62  ces(pParse, pTab
c630: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 30  , OP_OpenRead, 0
c640: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c660: 20 20 20 20 20 31 2c 20 30 2c 20 26 69 44 61 74       1, 0, &iDat
c670: 61 43 75 72 2c 20 26 69 49 64 78 43 75 72 29 3b  aCur, &iIdxCur);
c680: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
c690: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c6a0: 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37 29 3b  _Integer, 0, 7);
c6b0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
c6c0: 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  , pIdx=pTab->pIn
c6d0: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
c6e0: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b  pIdx->pNext, j++
c6f0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
c700: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c710: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c  , OP_Integer, 0,
c720: 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20   8+j); /* index 
c730: 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72 20  entries counter 
c740: 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  */.        }.   
c750: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
c760: 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65 2d 3e  m = MAX(pParse->
c770: 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20 20  nMem, 8+j);.    
c780: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c790: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77 69  ddOp2(v, OP_Rewi
c7a0: 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20 30 29  nd, iDataCur, 0)
c7b0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
c7c0: 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54  );.        loopT
c7d0: 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  op = sqlite3Vdbe
c7e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
c7f0: 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20  Imm, 7, 1);.    
c800: 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68      /* Verify th
c810: 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20  at all NOT NULL 
c820: 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20 61  columns really a
c830: 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20  re NOT NULL */. 
c840: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20         for(j=0; 
c850: 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b  j<pTab->nCol; j+
c860: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68  +){.          ch
c870: 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20  ar *zErr;.      
c880: 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d      int jmp2, jm
c890: 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  p3;.          if
c8a0: 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79  ( j==pTab->iPKey
c8b0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
c8c0: 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d         if( pTab-
c8d0: 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c  >aCol[j].notNull
c8e0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
c8f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c900: 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
c910: 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61  mnOfTable(v, pTa
c920: 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a 2c 20  b, iDataCur, j, 
c930: 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  3);.          sq
c940: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
c950: 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50 45  5(v, OPFLAG_TYPE
c960: 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20 20 20  OFARG);.        
c970: 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33    jmp2 = sqlite3
c980: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
c990: 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56 64  _NotNull, 3); Vd
c9a0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
c9b0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c9c0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c9d0: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
c9e0: 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72   /* Decrement er
c9f0: 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20  ror limit */.   
ca00: 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20 73 71         zErr = sq
ca10: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
ca20: 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20   "NULL value in 
ca30: 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e  %s.%s", pTab->zN
ca40: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca60: 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d     pTab->aCol[j]
ca70: 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  .zName);.       
ca80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ca90: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
caa0: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72  g8, 0, 3, 0, zEr
cab0: 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a  r, P4_DYNAMIC);.
cac0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cad0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cae0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20  P_ResultRow, 3, 
caf0: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d  1);.          jm
cb00: 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p3 = sqlite3Vdbe
cb10: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
cb20: 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65  os, 1); VdbeCove
cb30: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
cb40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cb50: 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29  dOp0(v, OP_Halt)
cb60: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cb70: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
cb80: 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20  v, jmp2);.      
cb90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
cba0: 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 33 29  umpHere(v, jmp3)
cbb0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
cbc0: 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65 20      /* Validate 
cbd0: 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 66 6f  index entries fo
cbe0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  r the current ro
cbf0: 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72  w */.        for
cc00: 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  (j=0, pIdx=pTab-
cc10: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
cc20: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
cc30: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
cc40: 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c   int jmp2, jmp3,
cc50: 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20   jmp4, jmp5;.   
cc60: 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55 6e 69         int ckUni
cc70: 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  q = sqlite3VdbeM
cc80: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
cc90: 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d         if( pPk==
cca0: 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b  pIdx ) continue;
ccb0: 0a 20 20 20 20 20 20 20 20 20 20 72 31 20 3d 20  .          r1 = 
ccc0: 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
ccd0: 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c 20  ndexKey(pParse, 
cce0: 70 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c 20  pIdx, iDataCur, 
ccf0: 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20  0, 0, &jmp3,.   
cd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd20: 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29 3b      pPrior, r1);
cd30: 0a 20 20 20 20 20 20 20 20 20 20 70 50 72 69 6f  .          pPrio
cd40: 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20 20  r = pIdx;.      
cd50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cd60: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
cd70: 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a  mm, 8+j, 1);  /*
cd80: 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79   increment entry
cd90: 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20   count */.      
cda0: 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68      /* Verify th
cdb0: 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e 74 72  at an index entr
cdc0: 79 20 65 78 69 73 74 73 20 66 6f 72 20 74 68 65  y exists for the
cdd0: 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20 72   current table r
cde0: 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ow */.          
cdf0: 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp2 = sqlite3Vd
ce00: 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f  beAddOp4Int(v, O
ce10: 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75 72  P_Found, iIdxCur
ce20: 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c 0a  +j, ckUniq, r1,.
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce50: 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c        pIdx->nCol
ce60: 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65 72 61  umn); VdbeCovera
ce70: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
ce80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ce90: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
cea0: 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72   1, -1); /* Decr
ceb0: 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69  ement error limi
cec0: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73  t */.          s
ced0: 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74  qlite3VdbeLoadSt
cee0: 72 69 6e 67 28 76 2c 20 33 2c 20 22 72 6f 77 20  ring(v, 3, "row 
cef0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  ");.          sq
cf00: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
cf10: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c  v, OP_Concat, 7,
cf20: 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   3, 3);.        
cf30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61    sqlite3VdbeLoa
cf40: 64 53 74 72 69 6e 67 28 76 2c 20 34 2c 20 22 20  dString(v, 4, " 
cf50: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
cf60: 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ex ");.         
cf70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cf80: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
cf90: 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
cfa0: 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69       jmp5 = sqli
cfb0: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
cfc0: 67 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e 7a 4e  g(v, 4, pIdx->zN
cfd0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ame);.          
cfe0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cff0: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
d000: 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20  4, 3, 3);.      
d010: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d020: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
d030: 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20  ltRow, 3, 1);.  
d040: 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73          jmp4 = s
d050: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
d060: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
d070: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
d080: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d090: 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76  ite3VdbeAddOp0(v
d0a0: 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20  , OP_Halt);.    
d0b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d0c0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
d0d0: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  2);.          /*
d0e0: 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64 65   For UNIQUE inde
d0f0: 78 65 73 2c 20 76 65 72 69 66 79 20 74 68 61 74  xes, verify that
d100: 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20   only one entry 
d110: 65 78 69 73 74 73 20 77 69 74 68 20 74 68 65 0a  exists with the.
d120: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72            ** cur
d130: 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65  rent key.  The e
d140: 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65 20 69  ntry is unique i
d150: 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e  f (1) any column
d160: 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   is NULL.       
d170: 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68 65     ** or (2) the
d180: 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73 20   next entry has 
d190: 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79 20  a different key 
d1a0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
d1b0: 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70   IsUniqueIndex(p
d1c0: 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Idx) ){.        
d1d0: 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d      int uniqOk =
d1e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
d1f0: 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
d200: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a        int jmp6;.
d210: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
d220: 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  kk;.            
d230: 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64  for(kk=0; kk<pId
d240: 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b  x->nKeyCol; kk++
d250: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
d260: 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64 78   int iCol = pIdx
d270: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a  ->aiColumn[kk];.
d280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
d290: 73 65 72 74 28 20 69 43 6f 6c 21 3d 58 4e 5f 52  sert( iCol!=XN_R
d2a0: 4f 57 49 44 20 26 26 20 69 43 6f 6c 3c 70 54 61  OWID && iCol<pTa
d2b0: 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20  b->nCol );.     
d2c0: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 43 6f           if( iCo
d2d0: 6c 3e 3d 30 20 26 26 20 70 54 61 62 2d 3e 61 43  l>=0 && pTab->aC
d2e0: 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c  ol[iCol].notNull
d2f0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
d300: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d310: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d320: 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b  OP_IsNull, r1+kk
d330: 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20  , uniqOk);.     
d340: 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76           VdbeCov
d350: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d360: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
d370: 20 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74      jmp6 = sqlit
d380: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
d390: 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72  OP_Next, iIdxCur
d3a0: 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +j); VdbeCoverag
d3b0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
d3c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74    sqlite3VdbeGot
d3d0: 6f 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  o(v, uniqOk);.  
d3e0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d3f0: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
d400: 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20 20 20   jmp6);.        
d410: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d420: 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49  ddOp4Int(v, OP_I
d430: 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c  dxGT, iIdxCur+j,
d440: 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20   uniqOk, r1,.   
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49                pI
d470: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64  dx->nKeyCol); Vd
d480: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d490: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d4a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d4b0: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
d4c0: 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20  ); /* Decrement 
d4d0: 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20  error limit */. 
d4e0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d4f0: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
d500: 28 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75 6e 69 71  (v, 3, "non-uniq
d510: 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65  ue entry in inde
d520: 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  x ");.          
d530: 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74    sqlite3VdbeGot
d540: 6f 28 76 2c 20 6a 6d 70 35 29 3b 0a 20 20 20 20  o(v, jmp5);.    
d550: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d560: 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28  dbeResolveLabel(
d570: 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20  v, uniqOk);.    
d580: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
d590: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
d5a0: 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a  pHere(v, jmp4);.
d5b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d5c0: 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
d5d0: 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70  abel(pParse, jmp
d5e0: 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  3);.        }.  
d5f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d600: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65  eAddOp2(v, OP_Ne
d610: 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c 6f  xt, iDataCur, lo
d620: 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76 65  opTop); VdbeCove
d630: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
d640: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
d650: 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d  Here(v, loopTop-
d660: 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  1);.#ifndef SQLI
d670: 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55  TE_OMIT_BTREECOU
d680: 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  NT.        sqlit
d690: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
d6a0: 28 76 2c 20 32 2c 20 22 77 72 6f 6e 67 20 23 20  (v, 2, "wrong # 
d6b0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
d6c0: 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20  dex ");.        
d6d0: 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
d6e0: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
d6f0: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
d700: 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
d710: 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64      if( pPk==pId
d720: 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  x ) continue;.  
d730: 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
d740: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
d750: 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20  tAddr(v);.      
d760: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d770: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp2(v, OP_IfPo
d780: 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20 56  s, 1, addr+2); V
d790: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
d7a0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d7b0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d7c0: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
d7d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d7e0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d7f0: 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72 2b  _Count, iIdxCur+
d800: 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 3);.         
d810: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d820: 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a  p3(v, OP_Eq, 8+j
d830: 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56 64  , addr+8, 3); Vd
d840: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d850: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d860: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
d870: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b  SQLITE_NOTNULL);
d880: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d890: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d8a0: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
d8b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d8c0: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
d8d0: 6e 67 28 76 2c 20 33 2c 20 70 49 64 78 2d 3e 7a  ng(v, 3, pIdx->z
d8e0: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20  Name);.         
d8f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d900: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
d910: 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20   3, 2, 7);.     
d920: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d930: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
d940: 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20  ultRow, 7, 1);. 
d950: 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20         }.#endif 
d960: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  /* SQLITE_OMIT_B
d970: 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20  TREECOUNT */.   
d980: 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20     } .    }.    
d990: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
d9a0: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
d9b0: 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65  rraySize(endCode
d9c0: 29 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29  ), endCode, iLn)
d9d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
d9e0: 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64  eChangeP2(v, add
d9f0: 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20  r, -mxErr);.    
da00: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
da10: 65 72 65 28 76 2c 20 61 64 64 72 2b 31 29 3b 0a  ere(v, addr+1);.
da20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
da30: 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b  hangeP4(v, addr+
da40: 32 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54  2, "ok", P4_STAT
da50: 49 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  IC);.  }.  break
da60: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
da70: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
da80: 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e  Y_CHECK */..#ifn
da90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
daa0: 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20  UTF16.  /*.  ** 
dab0: 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
dac0: 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  g.  **   PRAGMA 
dad0: 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d  encoding = "utf-
dae0: 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66  8"|"utf-16"|"utf
daf0: 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65  -16le"|"utf-16be
db00: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69  ".  **.  ** In i
db10: 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74  ts first form, t
db20: 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72  his pragma retur
db30: 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  ns the encoding 
db40: 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a  of the main.  **
db50: 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
db60: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
db70: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69  t initialized, i
db80: 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  t is initialized
db90: 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   now..  **.  ** 
dba0: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
dbb0: 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69  of this pragma i
dbc0: 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
dbd0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
dbe0: 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74  ile.  ** has not
dbf0: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
dc00: 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68  itialized. In th
dc10: 69 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20  is case it sets 
dc20: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a  the default.  **
dc30: 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77   encoding that w
dc40: 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
dc50: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
dc60: 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20  e file if a new 
dc70: 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65  file.  ** is cre
dc80: 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73  ated. If an exis
dc90: 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61  ting main databa
dca0: 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65  se file is opene
dcb0: 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  d, then the.  **
dcc0: 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
dcd0: 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65  coding for the e
dce0: 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
dcf0: 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a   is used..  ** .
dd00: 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65    ** In all case
dd10: 73 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  s new databases 
dd20: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
dd30: 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64  e ATTACH command
dd40: 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65   are.  ** create
dd50: 64 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  d to use the sam
dd60: 65 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65  e default text e
dd70: 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d  ncoding as the m
dd80: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66  ain database. If
dd90: 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  .  ** the main d
dda0: 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
ddb0: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
ddc0: 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20   and/or created 
ddd0: 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a  when ATTACH.  **
dde0: 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68   is executed, th
ddf0: 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72  is is done befor
de00: 65 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65  e the ATTACH ope
de10: 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  ration..  **.  *
de20: 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * In the second 
de30: 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61  form this pragma
de40: 20 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65   sets the text e
de50: 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73  ncoding to be us
de60: 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64  ed in.  ** new d
de70: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72  atabase files cr
de80: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73  eated using this
de90: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
dea0: 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a  . It is only.  *
deb0: 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f  * useful if invo
dec0: 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ked immediately 
ded0: 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64  after the main d
dee0: 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20  atabase i.  */. 
def0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e   case PragTyp_EN
df00: 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74  CODING: {.    st
df10: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
df20: 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20  t EncName {.    
df30: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20    char *zName;. 
df40: 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20       u8 enc;.   
df50: 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20   } encnames[] = 
df60: 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22  {.      { "UTF8"
df70: 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ,     SQLITE_UTF
df80: 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  8        },.    
df90: 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20    { "UTF-8",    
dfa0: 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20  SQLITE_UTF8     
dfb0: 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
dfc0: 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f  e element [1] */
dfd0: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
dfe0: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  le", SQLITE_UTF1
dff0: 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6LE     },  /* M
e000: 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
e010: 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  2] */.      { "U
e020: 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45  TF-16be", SQLITE
e030: 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20  _UTF16BE     }, 
e040: 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
e050: 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20  ent [3] */.     
e060: 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53   { "UTF16le",  S
e070: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20  QLITE_UTF16LE   
e080: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
e090: 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f  F16be",  SQLITE_
e0a0: 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20  UTF16BE     },. 
e0b0: 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c       { "UTF-16",
e0c0: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
e0d0: 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
e0e0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
e0f0: 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  /.      { "UTF16
e100: 22 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20  ",    0         
e110: 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53           }, /* S
e120: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
e130: 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20  E */.      { 0, 
e140: 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63  0 }.    };.    c
e150: 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e  onst struct EncN
e160: 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69  ame *pEnc;.    i
e170: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20  f( !zRight ){   
e180: 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
e190: 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69  ding" */.      i
e1a0: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
e1b0: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
e1c0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
e1d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
e1e0: 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
e1f0: 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  F8].enc==SQLITE_
e200: 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20 61 73  UTF8 );.      as
e210: 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
e220: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65  QLITE_UTF16LE].e
e230: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
e240: 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  LE );.      asse
e250: 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
e260: 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63  ITE_UTF16BE].enc
e270: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
e280: 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   );.      return
e290: 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 65  SingleText(v, "e
e2a0: 6e 63 6f 64 69 6e 67 22 2c 20 65 6e 63 6e 61 6d  ncoding", encnam
e2b0: 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e 64  es[ENC(pParse->d
e2c0: 62 29 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  b)].zName);.    
e2d0: 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20  }else{          
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e2f0: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
e300: 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20  g = XXX" */.    
e310: 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65    /* Only change
e320: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71   the value of sq
e330: 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20  lite.enc if the 
e340: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
e350: 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  is not.      ** 
e360: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20  initialized. If 
e370: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
e380: 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65  e exists, the ne
e390: 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c  w sqlite.enc val
e3a0: 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  ue.      ** will
e3b0: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
e3c0: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
e3d0: 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20  is next loaded. 
e3e0: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20  If it does not. 
e3f0: 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20       ** already 
e400: 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20  exists, it will 
e410: 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  be created to us
e420: 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69  e the new encodi
e430: 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ng value..      
e440: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20  */.      if( .  
e450: 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f        !(DbHasPro
e460: 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f  perty(db, 0, DB_
e470: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c  SchemaLoaded)) |
e480: 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73  | .        DbHas
e490: 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
e4a0: 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20  DB_Empty) .     
e4b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
e4c0: 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30  pEnc=&encnames[0
e4d0: 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20  ]; pEnc->zName; 
e4e0: 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20  pEnc++){.       
e4f0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
e500: 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
e510: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b   pEnc->zName) ){
e520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 43 48  .            SCH
e530: 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e  EMA_ENC(db) = EN
e540: 43 28 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20  C(db) =.        
e550: 20 20 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e          pEnc->en
e560: 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20  c ? pEnc->enc : 
e570: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
e580: 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  VE;.            
e590: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
e5a0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
e5b0: 20 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e       if( !pEnc->
e5c0: 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  zName ){.       
e5d0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
e5e0: 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75  sg(pParse, "unsu
e5f0: 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67  pported encoding
e600: 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a  : %s", zRight);.
e610: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e620: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
e630: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
e640: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
e650: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
e660: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
e670: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a  VERSION_PRAGMAS.
e680: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
e690: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68 65  MA [schema.]sche
e6a0: 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  ma_version.  ** 
e6b0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e6c0: 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
e6d0: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
e6e0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
e6f0: 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65  [schema.]user_ve
e700: 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
e710: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65  GMA [schema.]use
e720: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  r_version = <int
e730: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
e740: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e750: 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74  .]freelist_count
e760: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
e770: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
e780: 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61  [schema.]applica
e790: 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50  tion_id.  **   P
e7a0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
e7b0: 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20  pplication_id = 
e7c0: 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
e7d0: 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73   ** The pragma's
e7e0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
e7f0: 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  and user_version
e800: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 65 74   are used to set
e810: 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65   or get.  ** the
e820: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63   value of the sc
e830: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64  hema-version and
e840: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72   user-version, r
e850: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74  espectively. Bot
e860: 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  h.  ** the schem
e870: 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68  a-version and th
e880: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61  e user-version a
e890: 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64  re 32-bit signed
e8a0: 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73   integers.  ** s
e8b0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
e8c0: 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20  abase header..  
e8d0: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65  **.  ** The sche
e8e0: 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75  ma-cookie is usu
e8f0: 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75  ally only manipu
e900: 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79  lated internally
e910: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20   by SQLite. It. 
e920: 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74   ** is increment
e930: 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65  ed by SQLite whe
e940: 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
e950: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64  se schema is mod
e960: 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63  ified (by.  ** c
e970: 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70  reating or dropp
e980: 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69  ing a table or i
e990: 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d  ndex). The schem
e9a0: 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65  a version is use
e9b0: 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65  d by.  ** SQLite
e9c0: 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65   each time a que
e9d0: 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74  ry is executed t
e9e0: 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
e9f0: 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65  e internal cache
ea00: 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68  .  ** of the sch
ea10: 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f  ema used when co
ea20: 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20  mpiling the SQL 
ea30: 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68  query matches th
ea40: 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a  e schema of.  **
ea50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 67   the database ag
ea60: 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20  ainst which the 
ea70: 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69  compiled query i
ea80: 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75  s actually execu
ea90: 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72  ted..  ** Subver
eaa0: 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e  ting this mechan
eab0: 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52  ism by using "PR
eac0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
ead0: 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20  ion" to modify. 
eae0: 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
eaf0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74  ersion is potent
eb00: 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20  ially dangerous 
eb10: 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20  and may lead to 
eb20: 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61  program.  ** cra
eb30: 73 68 65 73 20 6f 72 20 64 61 74 61 62 61 73 65  shes or database
eb40: 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65   corruption. Use
eb50: 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20   with caution!. 
eb60: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65   **.  ** The use
eb70: 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74  r-version is not
eb80: 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
eb90: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d   by SQLite. It m
eba0: 61 79 20 62 65 20 75 73 65 64 20 62 79 0a 20 20  ay be used by.  
ebb0: 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ** applications 
ebc0: 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e  for any purpose.
ebd0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
ebe0: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
ebf0: 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f  E: {.    int iCo
ec00: 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e  okie = pPragma->
ec10: 69 41 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20  iArg;  /* Which 
ec20: 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f  cookie to read o
ec30: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73  r write */.    s
ec40: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
ec50: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
ec60: 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 28   if( zRight && (
ec70: 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c  pPragma->mPragFl
ec80: 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65  ag & PragFlag_Re
ec90: 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20  adOnly)==0 ){.  
eca0: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65      /* Write the
ecb0: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69   specified cooki
ecc0: 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  e value */.     
ecd0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
ece0: 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b  beOpList setCook
ecf0: 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
ed00: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
ed10: 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d  n,    0,  1,  0}
ed20: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
ed30: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
ed40: 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c  r,        0,  1,
ed50: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
ed60: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65  .        { OP_Se
ed70: 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  tCookie,      0,
ed80: 20 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20    0,  1},    /* 
ed90: 32 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20  2 */.      };.  
eda0: 20 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73      int addr = s
edb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
edc0: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
edd0: 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74  (setCookie), set
ede0: 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20  Cookie, 0);.    
edf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
ee00: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69  ngeP1(v, addr, i
ee10: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
ee20: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
ee30: 2c 20 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65  , addr+1, sqlite
ee40: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
ee50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ee60: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
ee70: 72 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+2, iDb);.     
ee80: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
ee90: 67 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20  geP2(v, addr+2, 
eea0: 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65  iCookie);.    }e
eeb0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65  lse{.      /* Re
eec0: 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ad the specified
eed0: 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f   cookie value */
eee0: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
eef0: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72  nst VdbeOpList r
ef00: 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a  eadCookie[] = {.
ef10: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
ef20: 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c  nsaction,     0,
ef30: 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    0,  0},    /* 
ef40: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  0 */.        { O
ef50: 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20  P_ReadCookie,   
ef60: 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
ef70: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
ef80: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
ef90: 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20  ,       1,  1,  
efa0: 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  0}.      };.    
efb0: 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c    int addr = sql
efc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
efd0: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72  t(v, ArraySize(r
efe0: 65 61 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64  eadCookie), read
eff0: 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20  Cookie, 0);.    
f000: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
f010: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69  ngeP1(v, addr, i
f020: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
f030: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
f040: 2c 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a  , addr+1, iDb);.
f050: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f060: 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64  eChangeP3(v, add
f070: 72 2b 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20  r+1, iCookie);. 
f080: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f090: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
f0a0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
f0b0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
f0c0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
f0d0: 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f  , zLeft, SQLITE_
f0e0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
f0f0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
f100: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
f110: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
f120: 49 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  ION_PRAGMAS */..
f130: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f140: 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
f150: 4e 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a  N_DIAGS.  /*.  *
f160: 2a 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69  *   PRAGMA compi
f170: 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a  le_options.  **.
f180: 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20    ** Return the 
f190: 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d  names of all com
f1a0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
f1b0: 73 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 62  s used in this b
f1c0: 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f  uild,.  ** one o
f1d0: 70 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20  ption per row.. 
f1e0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
f1f0: 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  yp_COMPILE_OPTIO
f200: 4e 53 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20  NS: {.    int i 
f210: 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  = 0;.    const c
f220: 68 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 70  har *zOpt;.    p
f230: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b  Parse->nMem = 1;
f240: 0a 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d  .    setOneColum
f250: 6e 4e 61 6d 65 28 76 2c 20 22 63 6f 6d 70 69 6c  nName(v, "compil
f260: 65 5f 6f 70 74 69 6f 6e 22 29 3b 0a 20 20 20 20  e_option");.    
f270: 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73  while( (zOpt = s
f280: 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
f290: 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d  tion_get(i++))!=
f2a0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
f2b0: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
f2c0: 28 76 2c 20 31 2c 20 7a 4f 70 74 29 3b 0a 20 20  (v, 1, zOpt);.  
f2d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f2e0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
f2f0: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
f300: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
f310: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
f320: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
f330: 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23  TION_DIAGS */..#
f340: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f350: 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a  IT_WAL.  /*.  **
f360: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
f370: 61 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e  a.]wal_checkpoin
f380: 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c  t = passive|full
f390: 7c 72 65 73 74 61 72 74 7c 74 72 75 6e 63 61 74  |restart|truncat
f3a0: 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63  e.  **.  ** Chec
f3b0: 6b 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62  kpoint the datab
f3c0: 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
f3d0: 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
f3e0: 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 73  CKPOINT: {.    s
f3f0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
f400: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 62   *azCol[] = { "b
f410: 75 73 79 22 2c 20 22 6c 6f 67 22 2c 20 22 63 68  usy", "log", "ch
f420: 65 63 6b 70 6f 69 6e 74 65 64 22 20 7d 3b 0a 20  eckpointed" };. 
f430: 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49     int iBt = (pI
f440: 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45  d2->z?iDb:SQLITE
f450: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a  _MAX_ATTACHED);.
f460: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
f470: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f480: 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69  T_PASSIVE;.    i
f490: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
f4a0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
f4b0: 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66  rICmp(zRight, "f
f4c0: 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
f4d0: 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
f4e0: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
f4f0: 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  LL;.      }else 
f500: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
f510: 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74  mp(zRight, "rest
f520: 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  art")==0 ){.    
f530: 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
f540: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
f550: 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c  START;.      }el
f560: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
f570: 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 74  rICmp(zRight, "t
f580: 72 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a  runcate")==0 ){.
f590: 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
f5a0: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f5b0: 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20 20  T_TRUNCATE;.    
f5c0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65    }.    }.    se
f5d0: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
f5e0: 76 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 20 61  v, 3, azCol);  a
f5f0: 73 73 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53  ssert( 3==ArrayS
f600: 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
f610: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
f620: 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   3;.    sqlite3V
f630: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
f640: 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c  Checkpoint, iBt,
f650: 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20   eMode, 1);.    
f660: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f670: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
f680: 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20  w, 1, 3);.  }.  
f690: 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a  break;..  /*.  *
f6a0: 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61  *   PRAGMA wal_a
f6b0: 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20  utocheckpoint.  
f6c0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f  **   PRAGMA wal_
f6d0: 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d  autocheckpoint =
f6e0: 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
f6f0: 66 69 67 75 72 65 20 61 20 64 61 74 61 62 61 73  figure a databas
f700: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
f710: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68  automatically ch
f720: 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62  eckpoint a datab
f730: 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61  ase.  ** after a
f740: 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72  ccumulating N fr
f750: 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e  ames in the log.
f760: 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20 74 68   Or query for th
f770: 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a  e current value.
f780: 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a    ** of N..  */.
f790: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57    case PragTyp_W
f7a0: 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e  AL_AUTOCHECKPOIN
f7b0: 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  T: {.    if( zRi
f7c0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
f7d0: 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65  ite3_wal_autoche
f7e0: 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69  ckpoint(db, sqli
f7f0: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29  te3Atoi(zRight))
f800: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
f810: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
f820: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
f830: 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d  nt", .       db-
f840: 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73  >xWalCallback==s
f850: 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
f860: 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20  Hook ? .        
f870: 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f     SQLITE_PTR_TO
f880: 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67  _INT(db->pWalArg
f890: 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  ) : 0);.  }.  br
f8a0: 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  eak;.#endif..  /
f8b0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73  *.  **  PRAGMA s
f8c0: 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a  hrink_memory.  *
f8d0: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
f8e0: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34  ATION-OF: R-2344
f8f0: 35 2d 34 36 31 30 39 20 54 68 69 73 20 70 72 61  5-46109 This pra
f900: 67 6d 61 20 63 61 75 73 65 73 20 74 68 65 20 64  gma causes the d
f910: 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e  atabase.  ** con
f920: 6e 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68  nection on which
f930: 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74   it is invoked t
f940: 6f 20 66 72 65 65 20 75 70 20 61 73 20 6d 75 63  o free up as muc
f950: 68 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20  h memory as it. 
f960: 20 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c   ** can, by call
f970: 69 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72  ing sqlite3_db_r
f980: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e  elease_memory().
f990: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
f9a0: 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f  gTyp_SHRINK_MEMO
f9b0: 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  RY: {.    sqlite
f9c0: 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  3_db_release_mem
f9d0: 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65  ory(db);.    bre
f9e0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
f9f0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
fa00: 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20  _timeout.  **   
fa10: 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65  PRAGMA busy_time
fa20: 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  out = N.  **.  *
fa30: 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62  * Call sqlite3_b
fa40: 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20  usy_timeout(db, 
fa50: 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  N).  Return the 
fa60: 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20  current timeout 
fa70: 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e  value.  ** if on
fa80: 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f  e is set.  If no
fa90: 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72   busy handler or
faa0: 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73   a different bus
fab0: 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74  y handler is set
fac0: 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20  .  ** then 0 is 
fad0: 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69  returned.  Setti
fae0: 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65  ng the busy_time
faf0: 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61  out to 0 or nega
fb00: 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c  tive.  ** disabl
fb10: 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a  es the timeout..
fb20: 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72    */.  /*case Pr
fb30: 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
fb40: 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a  UT*/ default: {.
fb50: 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 61      assert( pPra
fb60: 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50  gma->ePragTyp==P
fb70: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
fb80: 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  OUT );.    if( z
fb90: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
fba0: 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
fbb0: 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41  out(db, sqlite3A
fbc0: 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
fbd0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
fbe0: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 69 6d 65  ngleInt(v, "time
fbf0: 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54  out",  db->busyT
fc00: 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65  imeout);.    bre
fc10: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
fc20: 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
fc30: 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a  _heap_limit.  **
fc40: 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68     PRAGMA soft_h
fc50: 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20  eap_limit = N.  
fc60: 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  **.  ** IMPLEMEN
fc70: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33  TATION-OF: R-263
fc80: 34 33 2d 34 35 39 33 30 20 54 68 69 73 20 70 72  43-45930 This pr
fc90: 61 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74 68 65  agma invokes the
fca0: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f  .  ** sqlite3_so
fcb0: 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
fcc0: 29 20 69 6e 74 65 72 66 61 63 65 20 77 69 74 68  ) interface with
fcd0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 4e 2c   the argument N,
fce0: 20 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20 73 70   if N is.  ** sp
fcf0: 65 63 69 66 69 65 64 20 61 6e 64 20 69 73 20 61  ecified and is a
fd00: 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   non-negative in
fd10: 74 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c  teger..  ** IMPL
fd20: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
fd30: 2d 36 34 34 35 31 2d 30 37 31 36 33 20 54 68 65  -64451-07163 The
fd40: 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
fd50: 20 70 72 61 67 6d 61 20 61 6c 77 61 79 73 0a 20   pragma always. 
fd60: 20 2a 2a 20 72 65 74 75 72 6e 73 20 74 68 65 20   ** returns the 
fd70: 73 61 6d 65 20 69 6e 74 65 67 65 72 20 74 68 61  same integer tha
fd80: 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72  t would be retur
fd90: 6e 65 64 20 62 79 20 74 68 65 0a 20 20 2a 2a 20  ned by the.  ** 
fda0: 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
fdb0: 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20 43 2d  p_limit64(-1) C-
fdc0: 6c 61 6e 67 75 61 67 65 20 66 75 6e 63 74 69 6f  language functio
fdd0: 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  n..  */.  case P
fde0: 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
fdf0: 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71  _LIMIT: {.    sq
fe00: 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20  lite3_int64 N;. 
fe10: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26     if( zRight &&
fe20: 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
fe30: 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e  ToI64(zRight, &N
fe40: 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )==SQLITE_OK ){.
fe50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f        sqlite3_so
fe60: 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
fe70: 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  N);.    }.    re
fe80: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
fe90: 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69   "soft_heap_limi
fea0: 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66  t",  sqlite3_sof
feb0: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d  t_heap_limit64(-
fec0: 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  1));.    break;.
fed0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
fee0: 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a   PRAGMA threads.
fef0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68    **   PRAGMA th
ff00: 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20  reads = N.  **. 
ff10: 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68   ** Configure th
ff20: 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
ff30: 20 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61   of worker threa
ff40: 64 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  ds.  Return the 
ff50: 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d  new.  ** maximum
ff60: 2c 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65  , which might be
ff70: 20 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75 65   less than reque
ff80: 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  sted..  */.  cas
ff90: 65 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44  e PragTyp_THREAD
ffa0: 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  S: {.    sqlite3
ffb0: 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66  _int64 N;.    if
ffc0: 28 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26  ( zRight.     &&
ffd0: 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
ffe0: 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e  ToI64(zRight, &N
fff0: 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  )==SQLITE_OK.   
10000 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b    && N>=0.    ){
10010 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c  .      sqlite3_l
10020 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  imit(db, SQLITE_
10030 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
10040 45 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78  EADS, (int)(N&0x
10050 37 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20  7fffffff));.    
10060 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
10070 6c 65 49 6e 74 28 76 2c 20 22 74 68 72 65 61 64  leInt(v, "thread
10080 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s",.            
10090 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
100a0 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45  limit(db, SQLITE
100b0 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
100c0 52 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20  READS, -1));.   
100d0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
100e0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
100f0 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
10100 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
10110 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20   /*.  ** Report 
10120 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
10130 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66  e of file logs f
10140 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  or all databases
10150 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
10160 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53  gTyp_LOCK_STATUS
10170 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
10180 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
10190 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20   azLockName[] = 
101a0 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65  {.      "unlocke
101b0 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72  d", "shared", "r
101c0 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69  eserved", "pendi
101d0 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22  ng", "exclusive"
101e0 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73 74 61 74  .    };.    stat
101f0 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
10200 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 64 61 74 61  zCol[] = { "data
10210 62 61 73 65 22 2c 20 22 73 74 61 74 75 73 22 20  base", "status" 
10220 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
10230 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
10240 6d 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f 6c 29  mes(v, 2, azCol)
10250 3b 20 61 73 73 65 72 74 28 20 32 3d 3d 41 72 72  ; assert( 2==Arr
10260 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
10270 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
10280 6d 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69  m = 2;.    for(i
10290 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
102a0 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65  ++){.      Btree
102b0 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e   *pBt;.      con
102c0 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20  st char *zState 
102d0 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20  = "unknown";.   
102e0 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
102f0 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  if( db->aDb[i].z
10300 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  Name==0 ) contin
10310 75 65 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20  ue;.      pBt = 
10320 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a  db->aDb[i].pBt;.
10330 20 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30        if( pBt==0
10340 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
10350 50 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b  Pager(pBt)==0 ){
10360 0a 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20  .        zState 
10370 3d 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20  = "closed";.    
10380 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
10390 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
103a0 28 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62  (db, i ? db->aDb
103b0 5b 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a  [i].zName : 0, .
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103e0 20 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54       SQLITE_FCNT
103f0 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29  L_LOCKSTATE, &j)
10400 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
10410 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d          zState =
10420 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a   azLockName[j];.
10430 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
10440 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
10450 61 64 28 76 2c 20 31 2c 20 22 73 73 22 2c 20 64  ad(v, 1, "ss", d
10460 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
10470 20 7a 53 74 61 74 65 29 3b 0a 20 20 20 20 20 20   zState);.      
10480 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10490 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
104a0 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
104b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
104c0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
104d0 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
104e0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45   case PragTyp_KE
104f0 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
10500 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65  ght ) sqlite3_ke
10510 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52  y_v2(db, zDb, zR
10520 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72  ight, sqlite3Str
10530 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a  len30(zRight));.
10540 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
10550 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45   case PragTyp_RE
10560 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
10570 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f  Right ) sqlite3_
10580 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
10590 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65  , zRight, sqlite
105a0 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
105b0 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
105c0 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79   }.  case PragTy
105d0 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20  p_HEXKEY: {.    
105e0 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
105f0 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20      u8 iByte;.  
10600 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
10610 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a   char zKey[40];.
10620 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69        for(i=0, i
10630 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  Byte=0; i<sizeof
10640 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69  (zKey)*2 && sqli
10650 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67  te3Isxdigit(zRig
10660 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  ht[i]); i++){.  
10670 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69        iByte = (i
10680 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74  Byte<<4) + sqlit
10690 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68  e3HexToInt(zRigh
106a0 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  t[i]);.        i
106b0 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b  f( (i&1)!=0 ) zK
106c0 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b  ey[i/2] = iByte;
106d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
106e0 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30  f( (zLeft[3] & 0
106f0 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20  xf)==0xb ){.    
10700 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f      sqlite3_key_
10710 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79  v2(db, zDb, zKey
10720 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65  , i/2);.      }e
10730 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
10740 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62  ite3_rekey_v2(db
10750 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
10760 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
10770 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
10780 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
10790 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
107a0 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  DEC) || defined(
107b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
107c0 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67  ROD).  case Prag
107d0 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54  Typ_ACTIVATE_EXT
107e0 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69  ENSIONS: if( zRi
107f0 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51  ght ){.#ifdef SQ
10800 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
10810 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
10820 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
10830 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a  see-", 4)==0 ){.
10840 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
10850 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67  tivate_see(&zRig
10860 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[4]);.    }.#e
10870 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
10880 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a  TE_ENABLE_CEROD.
10890 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
108a0 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
108b0 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20  "cerod-", 6)==0 
108c0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
108d0 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28  _activate_cerod(
108e0 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20  &zRight[6]);.   
108f0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
10900 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
10910 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65   } /* End of the
10920 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a   PRAGMA switch *
10930 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20  /..pragma_out:. 
10940 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
10950 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c  b, zLeft);.  sql
10960 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
10970 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69  Right);.}..#endi
10980 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
10990 5f 50 52 41 47 4d 41 20 2a 2f 0a                 _PRAGMA */.