/ Hex Artifact Content
Login

Artifact c1ab37e1576d22715d3bae4f51658326240a8161:


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 77 68  S_MASK );.    wh
1b50: 69 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29  ile( (n--) > 0 )
1b60: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 44 62 2d  {.      if( pDb-
1b70: 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20 20  >pBt ){.        
1b80: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50  sqlite3BtreeSetP
1b90: 61 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e 70  agerFlags(pDb->p
1ba0: 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
1bb0: 20 20 20 20 20 28 70 44 62 2d 3e 73 61 66 65 74       (pDb->safet
1bc0: 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45 52 5f  y_level & PAGER_
1bd0: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b  SYNCHRONOUS_MASK
1be0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
1bf0: 20 20 20 20 20 7c 20 28 64 62 2d 3e 66 6c 61 67       | (db->flag
1c00: 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47 53 5f  s & PAGER_FLAGS_
1c10: 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d  MASK) );.      }
1c20: 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20  .      pDb++;.  
1c30: 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a    }.  }.}.#else.
1c40: 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c 6c 50  # define setAllP
1c50: 61 67 65 72 46 6c 61 67 73 28 58 29 20 20 2f 2a  agerFlags(X)  /*
1c60: 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66   no-op */.#endif
1c70: 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  .../*.** Return 
1c80: 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
1c90: 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73   name for a cons
1ca0: 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f  traint resolutio
1cb0: 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  n action..*/.#if
1cc0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1cd0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61  _FOREIGN_KEY.sta
1ce0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
1cf0: 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63  actionName(u8 ac
1d00: 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63  tion){.  const c
1d10: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77  har *zName;.  sw
1d20: 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a  itch( action ){.
1d30: 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74 4e      case OE_SetN
1d40: 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53  ull:  zName = "S
1d50: 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20  ET NULL";       
1d60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1d70: 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e   OE_SetDflt:  zN
1d80: 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46 41 55  ame = "SET DEFAU
1d90: 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  LT";     break;.
1da0: 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61 73 63      case OE_Casc
1db0: 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43  ade:  zName = "C
1dc0: 41 53 43 41 44 45 22 3b 20 20 20 20 20 20 20 20  ASCADE";        
1dd0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1de0: 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e   OE_Restrict: zN
1df0: 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43 54 22  ame = "RESTRICT"
1e00: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
1e10: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
1e20: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e        zName = "N
1e30: 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20  O ACTION";  .   
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e50: 20 20 20 61 73 73 65 72 74 28 20 61 63 74 69 6f     assert( actio
1e60: 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72  n==OE_None ); br
1e70: 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  eak;.  }.  retur
1e80: 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69  n zName;.}.#endi
1e90: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65  f.../*.** Parame
1ea0: 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74 20 62  ter eMode must b
1eb0: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50 41 47  e one of the PAG
1ec0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
1ed0: 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  XX constants.** 
1ee0: 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67 65 72  defined in pager
1ef0: 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .h. This functio
1f00: 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 73  n returns the as
1f10: 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72 63 61  sociated lowerca
1f20: 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f  se.** journal-mo
1f30: 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73  de name..*/.cons
1f40: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
1f50: 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
1f60: 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61  nt eMode){.  sta
1f70: 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e 73 74  tic char * const
1f80: 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20   azModeName[] = 
1f90: 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22 2c 20  {.    "delete", 
1fa0: 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66 66 22  "persist", "off"
1fb0: 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20 22 6d  , "truncate", "m
1fc0: 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66 20 53  emory".#ifndef S
1fd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
1fe0: 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64      , "wal".#end
1ff0: 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72 74  if.  };.  assert
2000: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
2010: 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b  ODE_DELETE==0 );
2020: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
2030: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
2040: 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73  SIST==1 );.  ass
2050: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
2060: 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b  ALMODE_OFF==2 );
2070: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
2080: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
2090: 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73  NCATE==3 );.  as
20a0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
20b0: 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d  NALMODE_MEMORY==
20c0: 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50  4 );.  assert( P
20d0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
20e0: 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73  _WAL==5 );.  ass
20f0: 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26  ert( eMode>=0 &&
2100: 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a   eMode<=ArraySiz
2110: 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b  e(azModeName) );
2120: 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41  ..  if( eMode==A
2130: 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e  rraySize(azModeN
2140: 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20 30 3b  ame) ) return 0;
2150: 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65  .  return azMode
2160: 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a  Name[eMode];.}..
2170: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20  /*.** Process a 
2180: 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74  pragma statement
2190: 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61  .  .**.** Pragma
21a0: 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f  s are of this fo
21b0: 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50  rm:.**.**      P
21c0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69  RAGMA [schema.]i
21d0: 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a  d [= value].**.*
21e0: 2a 20 54 68 65 20 69 64 65 6e 74 69 66 69 65 72  * The identifier
21f0: 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61   might also be a
2200: 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61   string.  The va
2210: 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
2220: 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69   and.** identifi
2230: 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e  er, or a number.
2240: 20 20 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69    If minusFlag i
2250: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
2260: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e   value is.** a n
2270: 75 6d 62 65 72 20 74 68 61 74 20 77 61 73 20 70  umber that was p
2280: 72 65 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e  receded by a min
2290: 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49  us sign..**.** I
22a0: 66 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20  f the left side 
22b0: 69 73 20 22 64 61 74 61 62 61 73 65 2e 69 64 22  is "database.id"
22c0: 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68   then pId1 is th
22d0: 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a  e database name.
22e0: 2a 2a 20 61 6e 64 20 70 49 64 32 20 69 73 20 74  ** and pId2 is t
22f0: 68 65 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c  he id.  If the l
2300: 65 66 74 20 73 69 64 65 20 69 73 20 6a 75 73 74  eft side is just
2310: 20 22 69 64 22 20 74 68 65 6e 20 70 49 64 31 20   "id" then pId1 
2320: 69 73 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64  is the.** id and
2330: 20 70 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70   pId2 is any emp
2340: 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f  ty string..*/.vo
2350: 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
2360: 28 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  (.  Parse *pPars
2370: 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64  e, .  Token *pId
2380: 31 2c 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72  1,        /* Fir
2390: 73 74 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65  st part of [sche
23a0: 6d 61 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a  ma.]id field */.
23b0: 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20    Token *pId2,  
23c0: 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20        /* Second 
23d0: 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e  part of [schema.
23e0: 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55  ]id field, or NU
23f0: 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  LL */.  Token *p
2400: 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54  Value,      /* T
2410: 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e  oken for <value>
2420: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  , or NULL */.  i
2430: 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20  nt minusFlag    
2440: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20     /* True if a 
2450: 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64 65  '-' sign precede
2460: 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a  d <value> */.){.
2470: 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20    char *zLeft = 
2480: 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d  0;       /* Nul-
2490: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
24a0: 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a   string <id> */.
24b0: 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d    char *zRight =
24c0: 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d   0;      /* Nul-
24d0: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
24e0: 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c   string <value>,
24f0: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f   or NULL */.  co
2500: 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  nst char *zDb = 
2510: 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61  0;   /* The data
2520: 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  base name */.  T
2530: 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20  oken *pId;      
2540: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
2550: 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a   to <id> token *
2560: 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c  /.  char *aFcntl
2570: 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72  [4];       /* Ar
2580: 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45  gument to SQLITE
2590: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
25a0: 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
25b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
25c0: 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20  abase index for 
25d0: 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20  <database> */.  
25e0: 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69  int lwr, upr, mi
25f0: 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20  d = 0;       /* 
2600: 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f  Binary search bo
2610: 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63  unds */.  int rc
2620: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2630: 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e         /* return
2640: 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49   value form SQLI
2650: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
2660: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
2670: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20   = pParse->db;  
2680: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
2690: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
26a0: 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20    Db *pDb;      
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26c0: 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20 64  * The specific d
26d0: 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70 72  atabase being pr
26e0: 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65  agmaed */.  Vdbe
26f0: 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74   *v = sqlite3Get
2700: 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f  Vdbe(pParse);  /
2710: 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74 65  * Prepared state
2720: 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ment */.  const 
2730: 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e 61  struct sPragmaNa
2740: 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20  mes *pPragma;.. 
2750: 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74 75   if( v==0 ) retu
2760: 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rn;.  sqlite3Vdb
2770: 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b  eRunOnlyOnce(v);
2780: 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20  .  pParse->nMem 
2790: 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72  = 2;..  /* Inter
27a0: 70 72 65 74 20 74 68 65 20 5b 73 63 68 65 6d 61  pret the [schema
27b0: 2e 5d 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  .] part of the p
27c0: 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e  ragma statement.
27d0: 20 69 44 62 20 69 73 20 74 68 65 0a 20 20 2a 2a   iDb is the.  **
27e0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
27f0: 74 61 62 61 73 65 20 74 68 69 73 20 70 72 61 67  tabase this prag
2800: 6d 61 20 69 73 20 62 65 69 6e 67 20 61 70 70 6c  ma is being appl
2810: 69 65 64 20 74 6f 20 69 6e 20 64 62 2e 61 44 62  ied to in db.aDb
2820: 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73  []. */.  iDb = s
2830: 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d  qlite3TwoPartNam
2840: 65 28 70 50 61 72 73 65 2c 20 70 49 64 31 2c 20  e(pParse, pId1, 
2850: 70 49 64 32 2c 20 26 70 49 64 29 3b 0a 20 20 69  pId2, &pId);.  i
2860: 66 28 20 69 44 62 3c 30 20 29 20 72 65 74 75 72  f( iDb<0 ) retur
2870: 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  n;.  pDb = &db->
2880: 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20  aDb[iDb];..  /* 
2890: 49 66 20 74 68 65 20 74 65 6d 70 20 64 61 74 61  If the temp data
28a0: 62 61 73 65 20 68 61 73 20 62 65 65 6e 20 65 78  base has been ex
28b0: 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65 64 20 61  plicitly named a
28c0: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 0a 20  s part of the . 
28d0: 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65   ** pragma, make
28e0: 20 73 75 72 65 20 69 74 20 69 73 20 6f 70 65 6e   sure it is open
28f0: 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69 44  . .  */.  if( iD
2900: 62 3d 3d 31 20 26 26 20 73 71 6c 69 74 65 33 4f  b==1 && sqlite3O
2910: 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
2920: 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20 72  pParse) ){.    r
2930: 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c  eturn;.  }..  zL
2940: 65 66 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d  eft = sqlite3Nam
2950: 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70  eFromToken(db, p
2960: 49 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66  Id);.  if( !zLef
2970: 74 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  t ) return;.  if
2980: 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20  ( minusFlag ){. 
2990: 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69     zRight = sqli
29a0: 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22  te3MPrintf(db, "
29b0: 2d 25 54 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20  -%T", pValue);. 
29c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67   }else{.    zRig
29d0: 68 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65  ht = sqlite3Name
29e0: 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56  FromToken(db, pV
29f0: 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73  alue);.  }..  as
2a00: 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a 20 20  sert( pId2 );.  
2a10: 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20  zDb = pId2->n>0 
2a20: 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30  ? pDb->zName : 0
2a30: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  ;.  if( sqlite3A
2a40: 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65 2c  uthCheck(pParse,
2a50: 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20   SQLITE_PRAGMA, 
2a60: 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a  zLeft, zRight, z
2a70: 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  Db) ){.    goto 
2a80: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2a90: 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51  .  /* Send an SQ
2aa0: 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d  LITE_FCNTL_PRAGM
2ab0: 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74  A file-control t
2ac0: 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  o the underlying
2ad0: 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63   VFS.  ** connec
2ae0: 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72 65 74  tion.  If it ret
2af0: 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20  urns SQLITE_OK, 
2b00: 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61 74  then assume that
2b10: 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20 68 61   the VFS.  ** ha
2b20: 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67 6d 61  ndled the pragma
2b30: 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20 61 20   and generate a 
2b40: 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64 20 73  no-op prepared s
2b50: 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a 20  tatement..  **. 
2b60: 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
2b70: 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d 35  ON-OF: R-12238-5
2b80: 35 31 32 30 20 57 68 65 6e 65 76 65 72 20 61 20  5120 Whenever a 
2b90: 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e 74  PRAGMA statement
2ba0: 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20 2a 2a   is parsed,.  **
2bb0: 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c   an SQLITE_FCNTL
2bc0: 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63 6f 6e  _PRAGMA file con
2bd0: 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f 20  trol is sent to 
2be0: 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74 65 33  the open sqlite3
2bf0: 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65 63  _file.  ** objec
2c00: 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  t corresponding 
2c10: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
2c20: 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  file to which th
2c30: 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73 74  e pragma.  ** st
2c40: 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73 2e 0a  atement refers..
2c50: 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d    **.  ** IMPLEM
2c60: 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32  ENTATION-OF: R-2
2c70: 39 38 37 35 2d 33 31 36 37 38 20 54 68 65 20 61  9875-31678 The a
2c80: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 53  rgument to the S
2c90: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2ca0: 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f 6e  MA.  ** file con
2cb0: 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72 61 79  trol is an array
2cc0: 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
2cd0: 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a 2a 29  strings (char**)
2ce0: 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a 20 20   in which the.  
2cf0: 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e  ** second elemen
2d00: 74 20 6f 66 20 74 68 65 20 61 72 72 61 79 20 69  t of the array i
2d10: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
2d20: 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74 68 65  e pragma and the
2d30: 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65 6d   third.  ** elem
2d40: 65 6e 74 20 69 73 20 74 68 65 20 61 72 67 75 6d  ent is the argum
2d50: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61 67 6d  ent to the pragm
2d60: 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68 65  a or NULL if the
2d70: 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a 20   pragma has no. 
2d80: 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20   ** argument..  
2d90: 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d  */.  aFcntl[0] =
2da0: 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20   0;.  aFcntl[1] 
2db0: 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74  = zLeft;.  aFcnt
2dc0: 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20  l[2] = zRight;. 
2dd0: 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a   aFcntl[3] = 0;.
2de0: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
2df0: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72  r.nBusy = 0;.  r
2e00: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
2e10: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
2e20: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  , SQLITE_FCNTL_P
2e30: 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46  RAGMA, (void*)aF
2e40: 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d  cntl);.  if( rc=
2e50: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2e60: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65    returnSingleTe
2e70: 78 74 28 76 2c 20 22 72 65 73 75 6c 74 22 2c 20  xt(v, "result", 
2e80: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
2e90: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63  sqlite3_free(aFc
2ea0: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 67 6f 74  ntl[0]);.    got
2eb0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
2ec0: 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
2ed0: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
2ee0: 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d     if( aFcntl[0]
2ef0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2f00: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
2f10: 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30  , "%s", aFcntl[0
2f20: 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ]);.      sqlite
2f30: 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d  3_free(aFcntl[0]
2f40: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61  );.    }.    pPa
2f50: 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20  rse->nErr++;.   
2f60: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
2f70: 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d  ;.    goto pragm
2f80: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
2f90: 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61 67   Locate the prag
2fa0: 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70  ma in the lookup
2fb0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20   table */.  lwr 
2fc0: 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72  = 0;.  upr = Arr
2fd0: 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61  aySize(aPragmaNa
2fe0: 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28  mes)-1;.  while(
2ff0: 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20   lwr<=upr ){.   
3000: 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29   mid = (lwr+upr)
3010: 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  /2;.    rc = sql
3020: 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65  ite3_stricmp(zLe
3030: 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  ft, aPragmaNames
3040: 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  [mid].zName);.  
3050: 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72    if( rc==0 ) br
3060: 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c  eak;.    if( rc<
3070: 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d  0 ){.      upr =
3080: 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65   mid - 1;.    }e
3090: 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d  lse{.      lwr =
30a0: 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a   mid + 1;.    }.
30b0: 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70    }.  if( lwr>up
30c0: 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  r ) goto pragma_
30d0: 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61 20 3d  out;.  pPragma =
30e0: 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d   &aPragmaNames[m
30f0: 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  id];..  /* Make 
3100: 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73  sure the databas
3110: 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64  e schema is load
3120: 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d 61  ed if the pragma
3130: 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 2a   requires that *
3140: 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d 61  /.  if( (pPragma
3150: 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72  ->mPragFlag & Pr
3160: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3170: 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  a)!=0 ){.    if(
3180: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
3190: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
31a0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
31b0: 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  }..  /* Jump to 
31c0: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
31d0: 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a  pragma handler *
31e0: 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72 61  /.  switch( pPra
31f0: 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29 7b  gma->ePragTyp ){
3200: 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .  .#if !defined
3210: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3220: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21  ER_PRAGMAS) && !
3230: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
3240: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a  MIT_DEPRECATED).
3250: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
3260: 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61 75  A [schema.]defau
3270: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20 20  lt_cache_size.  
3280: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
3290: 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68  ma.]default_cach
32a0: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
32b0: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
32c0: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
32d0: 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74  rrent persistent
32e0: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
32f0: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
3300: 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75   size.  The valu
3310: 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74 68  e returned is th
3320: 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
3330: 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69   of.  ** pages i
3340: 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65  n the page cache
3350: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3360: 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68 65  rm sets both the
3370: 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61   current.  ** pa
3380: 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61  ge cache size va
3390: 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72 73  lue and the pers
33a0: 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63 68  istent page cach
33b0: 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a  e size value.  *
33c0: 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  * stored in the 
33d0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
33e0: 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76   **.  ** Older v
33f0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
3400: 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20  e would set the 
3410: 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73 69  default cache si
3420: 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67  ze to a.  ** neg
3430: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20  ative number to 
3440: 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f  indicate synchro
3450: 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65  nous=OFF.  These
3460: 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f   days, synchrono
3470: 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79  us.  ** is alway
3480: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20  s on by default 
3490: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
34a0: 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65  e sign of the de
34b0: 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a  fault cache.  **
34c0: 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74   size.  But cont
34d0: 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65  inue to take the
34e0: 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20   absolute value 
34f0: 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  of the default c
3500: 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f  ache.  ** size o
3510: 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d  f historical com
3520: 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f  patibility..  */
3530: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
3540: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
3550: 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  ZE: {.    static
3560: 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d   const int iLn =
3570: 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e   VDBE_OFFSET_LIN
3580: 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74  ENO(2);.    stat
3590: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
35a0: 69 73 74 20 67 65 74 43 61 63 68 65 53 69 7a 65  ist getCacheSize
35b0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
35c0: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30  P_Transaction, 0
35d0: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f0: 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a          /* 0 */.
3600: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
3610: 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20  ookie,  0, 1,   
3620: 20 20 20 20 20 42 54 52 45 45 5f 44 45 46 41 55       BTREE_DEFAU
3630: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20  LT_CACHE_SIZE}, 
3640: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 1 */.      {
3650: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
3660: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
3670: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
3680: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20  eger,     0, 2, 
3690: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
36a0: 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20   { OP_Subtract, 
36b0: 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20     1, 2,        
36c0: 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  1},.      { OP_I
36d0: 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38  fPos,       1, 8
36e0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
36f0: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
3700: 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20       0, 1,      
3710: 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20    0},           
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3730: 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   6 */.      { OP
3740: 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c  _Noop,        0,
3750: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
3760: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
3770: 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20  Row,   1, 1,    
3780: 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20      0},.    };. 
3790: 20 20 20 69 6e 74 20 61 64 64 72 3b 0a 20 20 20     int addr;.   
37a0: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
37b0: 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20  Btree(v, iDb);. 
37c0: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
37d0: 7b 0a 20 20 20 20 20 20 73 65 74 4f 6e 65 43 6f  {.      setOneCo
37e0: 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 63 61 63  lumnName(v, "cac
37f0: 68 65 5f 73 69 7a 65 22 29 3b 0a 20 20 20 20 20  he_size");.     
3800: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d   pParse->nMem +=
3810: 20 32 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d   2;.      addr =
3820: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
3830: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
3840: 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a 65 29  ze(getCacheSize)
3850: 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65 2c 69  , getCacheSize,i
3860: 4c 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Ln);.      sqlit
3870: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
3880: 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
3890: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
38a0: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
38b0: 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  1, iDb);.      s
38c0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
38d0: 50 31 28 76 2c 20 61 64 64 72 2b 36 2c 20 53 51  P1(v, addr+6, SQ
38e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43  LITE_DEFAULT_CAC
38f0: 48 45 5f 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65  HE_SIZE);.    }e
3900: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
3910: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73  ize = sqlite3Abs
3920: 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f  Int32(sqlite3Ato
3930: 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
3940: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72    sqlite3BeginWr
3950: 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61  iteOperation(pPa
3960: 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20  rse, 0, iDb);.  
3970: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
3980: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
3990: 67 65 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20  ger, size, 1);. 
39a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
39b0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74  AddOp3(v, OP_Set
39c0: 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52  Cookie, iDb, BTR
39d0: 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  EE_DEFAULT_CACHE
39e0: 5f 53 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20  _SIZE, 1);.     
39f0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
3a00: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
3a10: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
3a20: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
3a30: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
3a40: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
3a50: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
3a60: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
3a70: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
3a80: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
3a90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
3aa0: 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45  endif /* !SQLITE
3ab0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
3ac0: 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f  MAS && !SQLITE_O
3ad0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
3ae0: 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
3af0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3b00: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a  R_PRAGMAS).  /*.
3b10: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3b20: 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 0a  hema.]page_size.
3b30: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3b40: 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 3d  hema.]page_size=
3b50: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
3b60: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
3b70: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
3b80: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
3b90: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
3ba0: 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e  e size in bytes.
3bb0: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
3bc0: 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20  m sets the.  ** 
3bd0: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
3be0: 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76  ze value.  The v
3bf0: 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  alue can only be
3c00: 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65   set if.  ** the
3c10: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
3c20: 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61 74  t yet been creat
3c30: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
3c40: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
3c50: 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  E: {.    Btree *
3c60: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
3c70: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
3c80: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
3c90: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
3ca0: 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53  nt size = ALWAYS
3cb0: 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42  (pBt) ? sqlite3B
3cc0: 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65 28  treeGetPageSize(
3cd0: 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20  pBt) : 0;.      
3ce0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
3cf0: 76 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20  v, "page_size", 
3d00: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  size);.    }else
3d10: 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f  {.      /* Mallo
3d20: 63 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20  c may fail when 
3d30: 73 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65  setting the page
3d40: 2d 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20  -size, as there 
3d50: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20  is an internal. 
3d60: 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74       ** buffer t
3d70: 68 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f  hat the pager mo
3d80: 64 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69  dule resizes usi
3d90: 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c  ng sqlite3_reall
3da0: 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  oc()..      */. 
3db0: 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67       db->nextPag
3dc0: 65 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41  esize = sqlite3A
3dd0: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
3de0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f     if( SQLITE_NO
3df0: 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  MEM==sqlite3Btre
3e00: 65 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74  eSetPageSize(pBt
3e10: 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69  , db->nextPagesi
3e20: 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20  ze,-1,0) ){.    
3e30: 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
3e40: 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
3e50: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
3e60: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
3e70: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
3e80: 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65  a.]secure_delete
3e90: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
3ea0: 63 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65  chema.]secure_de
3eb0: 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a  lete=ON/OFF.  **
3ec0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
3ed0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
3ee0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
3ef0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 65   for the.  ** se
3f00: 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61 67  cure_delete flag
3f10: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3f20: 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20 73  rm changes the s
3f30: 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a  ecure_delete.  *
3f40: 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20 61  * flag setting a
3f50: 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e 65  nd reports thene
3f60: 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20  w value..  */.  
3f70: 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45 43  case PragTyp_SEC
3f80: 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20  URE_DELETE: {.  
3f90: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
3fa0: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74  Db->pBt;.    int
3fb0: 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73   b = -1;.    ass
3fc0: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
3fd0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
3fe0: 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69 74  .      b = sqlit
3ff0: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
4000: 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  ght, 0);.    }. 
4010: 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d     if( pId2->n==
4020: 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20  0 && b>=0 ){.   
4030: 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
4040: 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
4050: 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
4060: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
4070: 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 64  eeSecureDelete(d
4080: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
4090: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
40a0: 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65  }.    b = sqlite
40b0: 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65  3BtreeSecureDele
40c0: 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20 20  te(pBt, b);.    
40d0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
40e0: 76 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74  v, "secure_delet
40f0: 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61  e", b);.    brea
4100: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
4110: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4120: 61 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e  a.]max_page_coun
4130: 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  t.  **  PRAGMA [
4140: 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65  schema.]max_page
4150: 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20  _count=N.  **.  
4160: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
4170: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
4180: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  rrent setting fo
4190: 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d  r the.  ** maxim
41a0: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  um number of pag
41b0: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
41c0: 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20  se file.  The . 
41d0: 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20   ** second form 
41e0: 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e  attempts to chan
41f0: 67 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e  ge this setting.
4200: 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d    Both.  ** form
4210: 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 75 72  s return the cur
4220: 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20  rent setting..  
4230: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f  **.  ** The abso
4240: 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20  lute value of N 
4250: 69 73 20 75 73 65 64 2e 20 20 54 68 69 73 20 69  is used.  This i
4260: 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61  s undocumented a
4270: 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68  nd might.  ** ch
4280: 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20  ange.  The only 
4290: 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72  purpose is to pr
42a0: 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20 77 61  ovide an easy wa
42b0: 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74  y to test.  ** t
42c0: 68 65 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  he sqlite3AbsInt
42d0: 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  32() function.. 
42e0: 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   **.  **  PRAGMA
42f0: 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 63   [schema.]page_c
4300: 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ount.  **.  ** R
4310: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
4320: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
4330: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
4340: 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
4350: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
4360: 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  UNT: {.    int i
4370: 52 65 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Reg;.    sqlite3
4380: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
4390: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
43a0: 20 20 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72     iReg = ++pPar
43b0: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66  se->nMem;.    if
43c0: 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  ( sqlite3Tolower
43d0: 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20  (zLeft[0])=='p' 
43e0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
43f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
4400: 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c  _Pagecount, iDb,
4410: 20 69 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73   iReg);.    }els
4420: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
4430: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
4440: 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20  _MaxPgcnt, iDb, 
4450: 69 52 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20  iReg, .         
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4470: 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 73  qlite3AbsInt32(s
4480: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
4490: 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  t)));.    }.    
44a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
44b0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
44c0: 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20  w, iReg, 1);.   
44d0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
44e0: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
44f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4500: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
4510: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66  LNAME_NAME, zLef
4520: 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  t, SQLITE_TRANSI
4530: 45 4e 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ENT);.    break;
4540: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
4550: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
4560: 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20  ]locking_mode.  
4570: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
4580: 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  ma.]locking_mode
4590: 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75   = (normal|exclu
45a0: 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73  sive).  */.  cas
45b0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  e PragTyp_LOCKIN
45c0: 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f  G_MODE: {.    co
45d0: 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d  nst char *zRet =
45e0: 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69   "normal";.    i
45f0: 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f  nt eMode = getLo
4600: 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74  ckingMode(zRight
4610: 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32  );..    if( pId2
4620: 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d  ->n==0 && eMode=
4630: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
4640: 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20  DE_QUERY ){.    
4650: 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41    /* Simple "PRA
4660: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
4670: 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  ;" statement. Th
4680: 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f  is is a query fo
4690: 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  r.      ** the c
46a0: 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c  urrent default l
46b0: 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69  ocking mode (whi
46c0: 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ch may be differ
46d0: 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  ent to.      ** 
46e0: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
46f0: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
4700: 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f  abase)..      */
4710: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64  .      eMode = d
4720: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  b->dfltLockMode;
4730: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4740: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
4750: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d  .      if( pId2-
4760: 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  >n==0 ){.       
4770: 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74   /* This indicat
4780: 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62  es that no datab
4790: 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65  ase name was spe
47a0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20  cified as part. 
47b0: 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
47c0: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e   PRAGMA command.
47d0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
47e0: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d  e locking-mode m
47f0: 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a  ust be.        *
4800: 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74  * set on all att
4810: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c  ached databases,
4820: 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20   as well as the 
4830: 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20  main db file..  
4840: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20        **.       
4850: 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71   ** Also, the sq
4860: 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f  lite3.dfltLockMo
4870: 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  de variable is s
4880: 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20  et so that.     
4890: 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71     ** any subseq
48a0: 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20  uently attached 
48b0: 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75  databases also u
48c0: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  se the specified
48d0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b  .        ** lock
48e0: 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20  ing mode..      
48f0: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74    */.        int
4900: 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73   ii;.        ass
4910: 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44  ert(pDb==&db->aD
4920: 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66  b[0]);.        f
4930: 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e  or(ii=2; ii<db->
4940: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
4950: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
4960: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
4970: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
4980: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
4990: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
49a0: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
49b0: 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  de);.        }. 
49c0: 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c         db->dfltL
49d0: 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d  ockMode = (u8)eM
49e0: 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ode;.      }.   
49f0: 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69     pPager = sqli
4a00: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
4a10: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65  b->pBt);.      e
4a20: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61  Mode = sqlite3Pa
4a30: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
4a40: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
4a50: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
4a60: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
4a70: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41  OCKINGMODE_NORMA
4a80: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  L.            ||
4a90: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4aa0: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
4ab0: 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65  IVE );.    if( e
4ac0: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
4ad0: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
4ae0: 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20  E ){.      zRet 
4af0: 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20  = "exclusive";. 
4b00: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
4b10: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f  ingleText(v, "lo
4b20: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52 65  cking_mode", zRe
4b30: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
4b40: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
4b50: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a  RAGMA [schema.]j
4b60: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a  ournal_mode.  **
4b70: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4b80: 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  .]journal_mode =
4b90: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20  .  **           
4ba0: 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65             (dele
4bb0: 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74  te|persist|off|t
4bc0: 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77  runcate|memory|w
4bd0: 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63  al|off).  */.  c
4be0: 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52  ase PragTyp_JOUR
4bf0: 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  NAL_MODE: {.    
4c00: 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20  int eMode;      
4c10: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
4c20: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
4c30: 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f  E_XXX symbols */
4c40: 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20  .    int ii;    
4c50: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
4c60: 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73  ounter */..    s
4c70: 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28  etOneColumnName(
4c80: 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  v, "journal_mode
4c90: 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  ");.    if( zRig
4ca0: 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  ht==0 ){.      /
4cb0: 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
4cc0: 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f 66   "=MODE" part of
4cd0: 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f 20   the pragma, do 
4ce0: 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 0a  a query for the.
4cf0: 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
4d00: 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 65   mode */.      e
4d10: 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55  Mode = PAGER_JOU
4d20: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  RNALMODE_QUERY;.
4d30: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4d40: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f   const char *zMo
4d50: 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20  de;.      int n 
4d60: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
4d70: 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  0(zRight);.     
4d80: 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a   for(eMode=0; (z
4d90: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f  Mode = sqlite3Jo
4da0: 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d  urnalModename(eM
4db0: 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b  ode))!=0; eMode+
4dc0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
4dd0: 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
4de0: 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e  zRight, zMode, n
4df0: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
4e00: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
4e10: 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  !zMode ){.      
4e20: 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f    /* If the "=MO
4e30: 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e 6f  DE" part does no
4e40: 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77  t match any know
4e50: 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a  n journal mode,.
4e60: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
4e70: 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20  do a query */.  
4e80: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41        eMode = PA
4e90: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4ea0: 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20  QUERY;.      }. 
4eb0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f     }.    if( eMo
4ec0: 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  de==PAGER_JOURNA
4ed0: 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20 70  LMODE_QUERY && p
4ee0: 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20  Id2->n==0 ){.   
4ef0: 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50     /* Convert "P
4f00: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
4f10: 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d 41  de" into "PRAGMA
4f20: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
4f30: 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44 62  de" */.      iDb
4f40: 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64 32   = 0;.      pId2
4f50: 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 23  ->n = 1;.    }.#
4f60: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  ifdef SQLITE_DEF
4f70: 41 55 4c 54 5f 57 41 4c 5f 53 41 46 45 54 59 4c  AULT_WAL_SAFETYL
4f80: 45 56 45 4c 0a 20 20 20 20 69 66 28 20 21 20 53  EVEL.    if( ! S
4f90: 51 4c 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65  QLITE_DbSafetyLe
4fa0: 76 65 6c 49 73 46 69 78 65 64 28 70 44 62 2d 3e  velIsFixed(pDb->
4fb0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 20 29 7b  safety_level) ){
4fc0: 0a 20 20 20 20 20 20 69 66 28 20 65 4d 6f 64 65  .      if( eMode
4fd0: 20 3d 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41   == PAGER_JOURNA
4fe0: 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20  LMODE_WAL ){.   
4ff0: 20 20 20 20 20 2f 2a 20 77 68 65 6e 20 65 6e 74       /* when ent
5000: 65 72 69 6e 67 20 77 61 6c 20 6d 6f 64 65 2c 20  ering wal mode, 
5010: 69 6d 6d 65 64 69 61 74 65 6c 79 20 73 77 69 74  immediately swit
5020: 63 68 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65  ch the safety_le
5030: 76 65 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 73  vel.        ** s
5040: 6f 20 74 68 61 74 20 61 20 71 75 65 72 79 20 74  o that a query t
5050: 6f 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f  o pragma synchro
5060: 6e 6f 75 73 20 72 65 74 75 72 6e 73 20 74 68 65  nous returns the
5070: 20 63 6f 72 72 65 63 74 20 76 61 6c 75 65 20 2a   correct value *
5080: 2f 0a 20 20 20 20 20 20 0a 20 20 20 20 20 20 20  /.      .       
5090: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
50a0: 65 6c 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41  el = SQLITE_DEFA
50b0: 55 4c 54 5f 57 41 4c 5f 53 41 46 45 54 59 4c 45  ULT_WAL_SAFETYLE
50c0: 56 45 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  VEL;.      }else
50d0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
50e0: 74 68 65 20 75 73 65 72 20 68 61 73 6e 27 74 20  the user hasn't 
50f0: 6f 76 65 72 72 69 64 64 65 6e 20 74 68 65 20 73  overridden the s
5100: 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69  ynchronous setti
5110: 6e 67 2c 20 75 73 65 20 74 68 65 20 0a 20 20 20  ng, use the .   
5120: 20 20 20 20 20 2a 2a 20 64 65 66 61 75 6c 74 20       ** default 
5130: 66 6f 72 20 6e 6f 6e 2d 77 61 6c 20 64 61 74 61  for non-wal data
5140: 62 61 73 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  bases */.       
5150: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
5160: 65 6c 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a  el = 3;.      }.
5170: 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
5180: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
5190: 41 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 20 2a  AL_SAFETYLEVEL *
51a0: 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d  /.    for(ii=db-
51b0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
51c0: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i--){.      if( 
51d0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20  db->aDb[ii].pBt 
51e0: 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70  && (ii==iDb || p
51f0: 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20  Id2->n==0) ){.  
5200: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5210: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 69  eUsesBtree(v, ii
5220: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5230: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
5240: 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20  OP_JournalMode, 
5250: 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20  ii, 1, eMode);. 
5260: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
5270: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5280: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
5290: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62  ow, 1, 1);.    b
52a0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
52b0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
52c0: 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69  hema.]journal_si
52d0: 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50  ze_limit.  **  P
52e0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a  RAGMA [schema.]j
52f0: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
5300: 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65  t=N.  **.  ** Ge
5310: 74 20 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a  t or set the siz
5320: 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62  e limit on rollb
5330: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
5340: 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  s..  */.  case P
5350: 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53  ragTyp_JOURNAL_S
5360: 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20  IZE_LIMIT: {.   
5370: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
5380: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
5390: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
53a0: 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d    i64 iLimit = -
53b0: 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  2;.    if( zRigh
53c0: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
53d0: 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
53e0: 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29  zRight, &iLimit)
53f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d  ;.      if( iLim
5400: 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d  it<-1 ) iLimit =
5410: 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   -1;.    }.    i
5420: 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50  Limit = sqlite3P
5430: 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c  agerJournalSizeL
5440: 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69  imit(pPager, iLi
5450: 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  mit);.    return
5460: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6a 6f  SingleInt(v, "jo
5470: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
5480: 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20  ", iLimit);.    
5490: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64  break;.  }..#end
54a0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
54b0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
54c0: 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  */..  /*.  **  P
54d0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
54e0: 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20  uto_vacuum.  ** 
54f0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
5500: 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20  ]auto_vacuum=N. 
5510: 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20   **.  ** Get or 
5520: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  set the value of
5530: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 27 61   the database 'a
5540: 75 74 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61  uto-vacuum' para
5550: 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20  meter..  ** The 
5560: 76 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a  value is one of:
5570: 20 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20    0 NONE 1 FULL 
5580: 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20  2 INCREMENTAL.  
5590: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
55a0: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
55b0: 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  M.  case PragTyp
55c0: 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a  _AUTO_VACUUM: {.
55d0: 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d      Btree *pBt =
55e0: 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61   pDb->pBt;.    a
55f0: 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b  ssert( pBt!=0 );
5600: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
5610: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
5620: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 61 75  SingleInt(v, "au
5630: 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69  to_vacuum", sqli
5640: 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56  te3BtreeGetAutoV
5650: 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20  acuum(pBt));.   
5660: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
5670: 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74  t eAuto = getAut
5680: 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b  oVacuum(zRight);
5690: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
56a0: 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f  Auto>=0 && eAuto
56b0: 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  <=2 );.      db-
56c0: 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28  >nextAutovac = (
56d0: 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20  u8)eAuto;.      
56e0: 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56  /* Call SetAutoV
56f0: 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69  acuum() to set i
5700: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e  nitialize the in
5710: 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a  ternal auto and.
5720: 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61        ** incr-va
5730: 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73  cuum flags. This
5740: 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
5750: 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63  case this connec
5760: 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72  tion.      ** cr
5770: 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61  eates the databa
5780: 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69  se file. It is i
5790: 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74  mportant that it
57a0: 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20   is created.    
57b0: 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d    ** as an auto-
57c0: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
57d0: 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  b..      */.    
57e0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
57f0: 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d  reeSetAutoVacuum
5800: 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20  (pBt, eAuto);.  
5810: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
5820: 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d  TE_OK && (eAuto=
5830: 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20  =1 || eAuto==2) 
5840: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ){.        /* Wh
5850: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61  en setting the a
5860: 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto_vacuum mode 
5870: 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22  to either "full"
5880: 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   or .        ** 
5890: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77  "incremental", w
58a0: 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f  rite the value o
58b0: 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65  f meta[6] in the
58c0: 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
58d0: 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72    ** file. Befor
58e0: 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74  e writing to met
58f0: 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74  a[6], check that
5900: 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74   meta[3] indicat
5910: 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  es.        ** th
5920: 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69  at this really i
5930: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
5940: 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73   capable databas
5950: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
5960: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
5970: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
5980: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
5990: 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74  2);.        stat
59a0: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
59b0: 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d  ist setMeta6[] =
59c0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f   {.          { O
59d0: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
59e0: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a00: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
5a10: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
5a20: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c  adCookie,     0,
5a30: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5a40: 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53      BTREE_LARGES
5a50: 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20  T_ROOT_PAGE},.  
5a60: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
5a80: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
5a90: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5aa0: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
5ab0: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
5ac0: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
5ad0: 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20  OK, OE_Abort,   
5ae0: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
5af0: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
5b00: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
5b10: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
5b20: 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1,              
5b30: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a     0},    /* 4 *
5b40: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
5b50: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20  _SetCookie,     
5b60: 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   0,         BTRE
5b70: 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31  E_INCR_VACUUM, 1
5b80: 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20  },    /* 5 */.  
5b90: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20        };.       
5ba0: 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20 20 20   int iAddr;.    
5bb0: 20 20 20 20 69 41 64 64 72 20 3d 20 73 71 6c 69      iAddr = sqli
5bc0: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
5bd0: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
5be0: 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74 61  tMeta6), setMeta
5bf0: 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 20  6, iLn);.       
5c00: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
5c10: 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69  geP1(v, iAddr, i
5c20: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
5c30: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
5c40: 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62  (v, iAddr+1, iDb
5c50: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5c60: 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
5c70: 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72  , iAddr+2, iAddr
5c80: 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +4);.        sql
5c90: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
5ca0: 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75  (v, iAddr+4, eAu
5cb0: 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73  to-1);.        s
5cc0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5cd0: 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69  P1(v, iAddr+5, i
5ce0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
5cf0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
5d00: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  e(v, iDb);.     
5d10: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
5d20: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
5d30: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
5d40: 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e 63 72 65  A [schema.]incre
5d50: 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29  mental_vacuum(N)
5d60: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20  .  **.  ** Do N 
5d70: 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d 65  steps of increme
5d80: 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f  ntal vacuuming o
5d90: 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20 20  n a database..  
5da0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5db0: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
5dc0: 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  M.  case PragTyp
5dd0: 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43  _INCREMENTAL_VAC
5de0: 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  UUM: {.    int i
5df0: 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20 20  Limit, addr;.   
5e00: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c   if( zRight==0 |
5e10: 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74  | !sqlite3GetInt
5e20: 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d  32(zRight, &iLim
5e30: 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30  it) || iLimit<=0
5e40: 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74   ){.      iLimit
5e50: 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20   = 0x7fffffff;. 
5e60: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
5e70: 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
5e80: 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69  ion(pParse, 0, i
5e90: 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Db);.    sqlite3
5ea0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5eb0: 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74  _Integer, iLimit
5ec0: 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d  , 1);.    addr =
5ed0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5ee0: 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63  p1(v, OP_IncrVac
5ef0: 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62 65 43  uum, iDb); VdbeC
5f00: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
5f10: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5f20: 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  1(v, OP_ResultRo
5f30: 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  w, 1);.    sqlit
5f40: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5f50: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
5f60: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5f70: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
5f80: 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 20  fPos, 1, addr); 
5f90: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
5fa0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5fb0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
5fc0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
5fd0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
5fe0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  f SQLITE_OMIT_PA
5ff0: 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  GER_PRAGMAS.  /*
6000: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
6010: 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69 7a  chema.]cache_siz
6020: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
6030: 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69  schema.]cache_si
6040: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
6050: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
6060: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
6070: 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20  t local setting 
6080: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67  for the.  ** pag
6090: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68  e cache size. Th
60a0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
60b0: 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a  ts the local.  *
60c0: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
60d0: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69  e value.  If N i
60e0: 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20  s positive then 
60f0: 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a  that is the.  **
6100: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
6110: 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20   in the cache.  
6120: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
6130: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
6140: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
6150: 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74  is adjusted so t
6160: 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73  hat the cache us
6170: 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a  es -N kibibytes.
6180: 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a    ** of memory..
6190: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
61a0: 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  Typ_CACHE_SIZE: 
61b0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  {.    assert( sq
61c0: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
61d0: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
61e0: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
61f0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
6200: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
6210: 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70 44  "cache_size", pD
6220: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
6230: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c  e_size);.    }el
6240: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69  se{.      int si
6250: 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69  ze = sqlite3Atoi
6260: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
6270: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
6280: 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b  che_size = size;
6290: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
62a0: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
62b0: 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70  pDb->pBt, pDb->p
62c0: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
62d0: 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  ze);.    }.    b
62e0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
62f0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
6300: 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 70 69 6c  hema.]cache_spil
6310: 6c 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 63  l.  **  PRAGMA c
6320: 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45  ache_spill=BOOLE
6330: 41 4e 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  AN.  **  PRAGMA 
6340: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
6350: 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  pill=N.  **.  **
6360: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
6370: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
6380: 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e  ent local settin
6390: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70  g for the.  ** p
63a0: 61 67 65 20 63 61 63 68 65 20 73 70 69 6c 6c 20  age cache spill 
63b0: 73 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64  size. The second
63c0: 20 66 6f 72 6d 20 74 75 72 6e 73 20 63 61 63 68   form turns cach
63d0: 65 20 73 70 69 6c 6c 20 6f 6e 0a 20 20 2a 2a 20  e spill on.  ** 
63e0: 6f 72 20 6f 66 66 2e 20 20 57 68 65 6e 20 74 75  or off.  When tu
63f0: 72 6e 6e 69 6e 67 20 63 61 63 68 65 20 73 70 69  rnning cache spi
6400: 6c 6c 20 6f 6e 2c 20 74 68 65 20 73 69 7a 65 20  ll on, the size 
6410: 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a 20 20  is set to the.  
6420: 2a 2a 20 63 75 72 72 65 6e 74 20 63 61 63 68 65  ** current cache
6430: 5f 73 69 7a 65 2e 20 20 54 68 65 20 74 68 69 72  _size.  The thir
6440: 64 20 66 6f 72 6d 20 73 65 74 73 20 61 20 73 70  d form sets a sp
6450: 69 6c 6c 20 73 69 7a 65 20 74 68 61 74 0a 20 20  ill size that.  
6460: 2a 2a 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ** may be differ
6470: 65 6e 74 20 66 6f 72 6d 20 74 68 65 20 63 61 63  ent form the cac
6480: 68 65 20 73 69 7a 65 2e 0a 20 20 2a 2a 20 49 66  he size..  ** If
6490: 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74   N is positive t
64a0: 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a  hen that is the.
64b0: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
64c0: 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68  ages in the cach
64d0: 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61  e.  If N is nega
64e0: 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  tive, then the. 
64f0: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
6500: 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20  ges is adjusted 
6510: 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68  so that the cach
6520: 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79  e uses -N kibiby
6530: 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f  tes.  ** of memo
6540: 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66  ry..  **.  ** If
6550: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
6560: 61 63 68 65 5f 73 70 69 6c 6c 20 70 61 67 65 73  ache_spill pages
6570: 20 69 73 20 6c 65 73 73 20 74 68 65 6e 20 74 68   is less then th
6580: 65 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  e number of.  **
6590: 20 63 61 63 68 65 5f 73 69 7a 65 20 70 61 67 65   cache_size page
65a0: 73 2c 20 6e 6f 20 73 70 69 6c 6c 69 6e 67 20 6f  s, no spilling o
65b0: 63 63 75 72 73 20 75 6e 74 69 6c 20 74 68 65 20  ccurs until the 
65c0: 70 61 67 65 20 63 6f 75 6e 74 20 65 78 63 65 65  page count excee
65d0: 64 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62  ds.  ** the numb
65e0: 65 72 20 6f 66 20 63 61 63 68 65 5f 73 69 7a 65  er of cache_size
65f0: 20 70 61 67 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a   pages..  **.  *
6600: 2a 20 54 68 65 20 63 61 63 68 65 5f 73 70 69 6c  * The cache_spil
6610: 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65 74 74 69 6e  l=BOOLEAN settin
6620: 67 20 61 70 70 6c 69 65 73 20 74 6f 20 61 6c 6c  g applies to all
6630: 20 61 74 74 61 63 68 65 64 20 73 63 68 65 6d 61   attached schema
6640: 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20 6a 75 73 74  s,.  ** not just
6650: 20 74 68 65 20 73 63 68 65 6d 61 20 73 70 65 63   the schema spec
6660: 69 66 69 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  ified..  */.  ca
6670: 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45  se PragTyp_CACHE
6680: 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20 20 20 61 73  _SPILL: {.    as
6690: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
66a0: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
66b0: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
66c0: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
66d0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
66e0: 65 49 6e 74 28 76 2c 20 22 63 61 63 68 65 5f 73  eInt(v, "cache_s
66f0: 70 69 6c 6c 22 2c 20 0a 20 20 20 20 20 20 20 20  pill", .        
6700: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
6710: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 29  LITE_CacheSpill)
6720: 3d 3d 30 20 3f 20 30 20 3a 20 0a 20 20 20 20 20  ==0 ? 0 : .     
6730: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
6740: 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28  reeSetSpillSize(
6750: 70 44 62 2d 3e 70 42 74 2c 30 29 29 3b 0a 20 20  pDb->pBt,0));.  
6760: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
6770: 6e 74 20 73 69 7a 65 20 3d 20 31 3b 0a 20 20 20  nt size = 1;.   
6780: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
6790: 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26  tInt32(zRight, &
67a0: 73 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 20  size) ){.       
67b0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
67c0: 53 70 69 6c 6c 53 69 7a 65 28 70 44 62 2d 3e 70  SpillSize(pDb->p
67d0: 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 20  Bt, size);.     
67e0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c   }.      if( sql
67f0: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
6800: 52 69 67 68 74 2c 20 73 69 7a 65 21 3d 30 29 20  Right, size!=0) 
6810: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  ){.        db->f
6820: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 43  lags |= SQLITE_C
6830: 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20 20 20 20  acheSpill;.     
6840: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
6850: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51  db->flags &= ~SQ
6860: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b  LITE_CacheSpill;
6870: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
6880: 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28  etAllPagerFlags(
6890: 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  db);.    }.    b
68a0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
68b0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
68c0: 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28  hema.]mmap_size(
68d0: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65  N).  **.  ** Use
68e0: 64 20 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67  d to set mapping
68f0: 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65   size limit. The
6900: 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69   mapping size li
6910: 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64  mit is.  ** used
6920: 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67   to limit the ag
6930: 67 72 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20  gregate size of 
6940: 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65  all memory mappe
6950: 64 20 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65  d regions of the
6960: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66  .  ** database f
6970: 69 6c 65 2e 20 49 66 20 74 68 69 73 20 70 61 72  ile. If this par
6980: 61 6d 65 74 65 72 20 69 73 20 73 65 74 20 74 6f  ameter is set to
6990: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f   zero, then memo
69a0: 72 79 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20  ry mapping.  ** 
69b0: 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61  is not used at a
69c0: 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  ll.  If N is neg
69d0: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20  ative, then the 
69e0: 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d  default memory m
69f0: 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65  ap.  ** limit de
6a00: 74 65 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69  termined by sqli
6a10: 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
6a20: 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49  E_CONFIG_MMAP_SI
6a30: 5a 45 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a  ZE) is set..  **
6a40: 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e   The parameter N
6a50: 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20   is measured in 
6a60: 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  bytes..  **.  **
6a70: 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 61   This value is a
6a80: 64 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e  dvisory.  The un
6a90: 64 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20  derlying VFS is 
6aa0: 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d  free to memory m
6ab0: 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c  ap.  ** as littl
6ac0: 65 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20  e or as much as 
6ad0: 69 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70  it wants.  Excep
6ae0: 74 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20 74  t, if N is set t
6af0: 6f 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  o 0 then the.  *
6b00: 2a 20 75 70 70 65 72 20 6c 61 79 65 72 73 20 77  * upper layers w
6b10: 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65  ill never invoke
6b20: 20 74 68 65 20 78 46 65 74 63 68 20 69 6e 74 65   the xFetch inte
6b30: 72 66 61 63 65 73 20 74 6f 20 74 68 65 20 56 46  rfaces to the VF
6b40: 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  S..  */.  case P
6b50: 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45  ragTyp_MMAP_SIZE
6b60: 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
6b70: 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66 20 53 51  int64 sz;.#if SQ
6b80: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6b90: 5a 45 3e 30 0a 20 20 20 20 61 73 73 65 72 74 28  ZE>0.    assert(
6ba0: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
6bb0: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
6bc0: 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a   0) );.    if( z
6bd0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
6be0: 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 73 71 6c  nt ii;.      sql
6bf0: 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
6c00: 34 28 7a 52 69 67 68 74 2c 20 26 73 7a 29 3b 0a  4(zRight, &sz);.
6c10: 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29        if( sz<0 )
6c20: 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f   sz = sqlite3Glo
6c30: 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70  balConfig.szMmap
6c40: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32  ;.      if( pId2
6c50: 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d  ->n==0 ) db->szM
6c60: 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20  map = sz;.      
6c70: 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31  for(ii=db->nDb-1
6c80: 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a  ; ii>=0; ii--){.
6c90: 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
6ca0: 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28  aDb[ii].pBt && (
6cb0: 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d  ii==iDb || pId2-
6cc0: 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20  >n==0) ){.      
6cd0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
6ce0: 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d  SetMmapLimit(db-
6cf0: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a  >aDb[ii].pBt, sz
6d00: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
6d10: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
6d20: 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d  z = -1;.    rc =
6d30: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
6d40: 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53  ntrol(db, zDb, S
6d50: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50  QLITE_FCNTL_MMAP
6d60: 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c  _SIZE, &sz);.#el
6d70: 73 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20  se.    sz = 0;. 
6d80: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
6d90: 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  K;.#endif.    if
6da0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6db0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
6dc0: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6d 6d 61  ingleInt(v, "mma
6dd0: 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20  p_size", sz);.  
6de0: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d    }else if( rc!=
6df0: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20  SQLITE_NOTFOUND 
6e00: 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  ){.      pParse-
6e10: 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70  >nErr++;.      p
6e20: 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a  Parse->rc = rc;.
6e30: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
6e40: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
6e50: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6e60: 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ore.  **   PRAGM
6e70: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22  A temp_store = "
6e80: 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79  default"|"memory
6e90: 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20  "|"file".  **.  
6ea0: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
6eb0: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
6ec0: 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f   of the temp_sto
6ed0: 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  re flag.  Changi
6ee0: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61  ng.  ** the loca
6ef0: 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  l value does not
6f00: 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f   make changes to
6f10: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61   the disk file a
6f20: 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20  nd the default. 
6f30: 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62   ** value will b
6f40: 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e  e restored the n
6f50: 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  ext time the dat
6f60: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e  abase is opened.
6f70: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20  .  **.  ** Note 
6f80: 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69  that it is possi
6f90: 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72  ble for the libr
6fa0: 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ary compile-time
6fb0: 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a   options to.  **
6fc0: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 73   override this s
6fd0: 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61  etting.  */.  ca
6fe0: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
6ff0: 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28  STORE: {.    if(
7000: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
7010: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
7020: 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65  t(v, "temp_store
7030: 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  ", db->temp_stor
7040: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
7050: 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53       changeTempS
7060: 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a  torage(pParse, z
7070: 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20  Right);.    }.  
7080: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
7090: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
70a0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
70b0: 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41  ctory.  **   PRA
70c0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
70d0: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64  irectory = ""|"d
70e0: 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20  irectory_name". 
70f0: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
7100: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
7110: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
7120: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7130: 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  ry flag.  Changi
7140: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
7150: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
7160: 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62  c directory to b
7170: 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
7180: 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a  rary files..  **
7190: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
71a0: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
71b0: 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74  s to the default
71c0: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
71d0: 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a  tory search..  *
71e0: 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64  * If temporary d
71f0: 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e  irectory is chan
7200: 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69  ged, then invali
7210: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e  dateTempStorage.
7220: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
7230: 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  e PragTyp_TEMP_S
7240: 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20  TORE_DIRECTORY: 
7250: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
7260: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
7270: 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22  nSingleText(v, "
7280: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
7290: 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f 74  tory", sqlite3_t
72a0: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
72b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
72c0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
72d0: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
72e0: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
72f0: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
7300: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
7310: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
7320: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
7330: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
7340: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
7350: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
7360: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
7370: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
7380: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
7390: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
73a0: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
73b0: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
73c0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
73d0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
73e0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45     if( SQLITE_TE
73f0: 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20  MP_STORE==0.    
7400: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
7410: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
7420: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
7430: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  ).       || (SQL
7440: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
7450: 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  2 && db->temp_st
7460: 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b  ore==1).      ){
7470: 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64  .        invalid
7480: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70  ateTempStorage(p
7490: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
74a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
74b0: 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ee(sqlite3_temp_
74c0: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
74d0: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
74e0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
74f0: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7500: 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
7510: 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74  ntf("%s", zRight
7520: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
7530: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
7540: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
7550: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   0;.      }.#end
7560: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
7570: 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20  T_WSD */.    }. 
7580: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
7590: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
75a0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
75b0: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
75c0: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
75d0: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
75e0: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
75f0: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
7600: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
7610: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
7620: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
7630: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
7640: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
7650: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
7660: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
7670: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
7680: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
7690: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
76a0: 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63  t.  ** were spec
76b0: 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65 6c  ified with a rel
76c0: 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20  ative pathname. 
76d0: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
76e0: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
76f0: 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65  s.  ** to the de
7700: 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 64  fault database d
7710: 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20  irectory, which 
7720: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
7730: 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69 74  es specified wit
7740: 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76  h.  ** a relativ
7750: 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62  e path will prob
7760: 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e  ably be based on
7770: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 72   the current dir
7780: 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20  ectory for the. 
7790: 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61   ** process.  Da
77a0: 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65 63  tabase file spec
77b0: 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61 62  ified with an ab
77c0: 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65 20  solute path are 
77d0: 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a  not impacted.  *
77e0: 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69 6e  * by this settin
77f0: 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  g, regardless of
7800: 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a   its value..  **
7810: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
7820: 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f  gTyp_DATA_STORE_
7830: 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20  DIRECTORY: {.   
7840: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7850: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
7860: 6c 65 54 65 78 74 28 76 2c 20 22 64 61 74 61 5f  leText(v, "data_
7870: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22  store_directory"
7880: 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  , sqlite3_data_d
7890: 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 7d  irectory);.    }
78a0: 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51  else{.#ifndef SQ
78b0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
78c0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
78d0: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  ] ){.        int
78e0: 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63   res;.        rc
78f0: 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65   = sqlite3OsAcce
7900: 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69  ss(db->pVfs, zRi
7910: 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45  ght, SQLITE_ACCE
7920: 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72  SS_READWRITE, &r
7930: 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
7940: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
7950: 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  | res==0 ){.    
7960: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
7970: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e  orMsg(pParse, "n
7980: 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69  ot a writable di
7990: 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20  rectory");.     
79a0: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
79b0: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  _out;.        }.
79c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
79d0: 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74  lite3_free(sqlit
79e0: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
79f0: 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52  y);.      if( zR
7a00: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7a10: 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f     sqlite3_data_
7a20: 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69  directory = sqli
7a30: 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
7a40: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  , zRight);.     
7a50: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
7a60: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
7a70: 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20  ectory = 0;.    
7a80: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
7a90: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f  LITE_OMIT_WSD */
7aa0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
7ab0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
7ac0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7ad0: 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20  LOCKING_STYLE.  
7ae0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
7af0: 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70   [schema.]lock_p
7b00: 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20  roxy_file.  **  
7b10: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
7b20: 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65  ]lock_proxy_file
7b30: 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63   = ":auto:"|"loc
7b40: 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a  k_file_path".  *
7b50: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
7b60: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
7b70: 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79  f the lock_proxy
7b80: 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61  _file flag.  Cha
7b90: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
7ba0: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
7bb0: 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20  ific file to be 
7bc0: 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73  used for databas
7bd0: 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a  e access locks..
7be0: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
7bf0: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52   PragTyp_LOCK_PR
7c00: 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20  OXY_FILE: {.    
7c10: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
7c20: 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67       Pager *pPag
7c30: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
7c40: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
7c50: 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72  ;.      char *pr
7c60: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20  oxy_file_path = 
7c70: 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69  NULL;.      sqli
7c80: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
7c90: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
7ca0: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
7cb0: 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43    sqlite3OsFileC
7cc0: 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65  ontrolHint(pFile
7cd0: 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43  , SQLITE_GET_LOC
7ce0: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d00: 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66          &proxy_f
7d10: 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20  ile_path);.     
7d20: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78   returnSingleTex
7d30: 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72 6f 78 79  t(v, "lock_proxy
7d40: 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79 5f 66 69  _file", proxy_fi
7d50: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 7d 65  le_path);.    }e
7d60: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7d70: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
7d80: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
7d90: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71  ->pBt);.      sq
7da0: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
7db0: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
7dc0: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
7dd0: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
7de0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7df0: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d   ){.        res=
7e00: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7e10: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7e20: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7e30: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69 67              zRig
7e60: 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  ht);.      } els
7e70: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d  e {.        res=
7e80: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7e90: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7ea0: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7eb0: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
7ee0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
7ef0: 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45   if( res!=SQLITE
7f00: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73  _OK ){.        s
7f10: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7f20: 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74  Parse, "failed t
7f30: 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79  o set lock proxy
7f40: 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20   file");.       
7f50: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
7f60: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
7f70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
7f80: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7f90: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
7fa0: 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20  TYLE */      .  
7fb0: 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50    .  /*.  **   P
7fc0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73  RAGMA [schema.]s
7fd0: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
7fe0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
7ff0: 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46  .]synchronous=OF
8000: 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c  F|ON|NORMAL|FULL
8010: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
8020: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
8030: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
8040: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67  synchronous flag
8050: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
8060: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
8070: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63   does not make c
8080: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69  hanges to the di
8090: 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 0a  sk file and the.
80a0: 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76 61 6c    ** default val
80b0: 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f  ue will be resto
80c0: 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d  red the next tim
80d0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  e the database i
80e0: 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20  s.  ** opened.. 
80f0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
8100: 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a 20  yp_SYNCHRONOUS: 
8110: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
8120: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
8130: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 73  nSingleInt(v, "s
8140: 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 20 0a 20 20  ynchronous", .  
8150: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
8160: 5f 44 62 53 61 66 65 74 79 4c 65 76 65 6c 56 61  _DbSafetyLevelVa
8170: 6c 75 65 28 70 44 62 2d 3e 73 61 66 65 74 79 5f  lue(pDb->safety_
8180: 6c 65 76 65 6c 29 2d 31 29 3b 0a 20 20 20 20 7d  level)-1);.    }
8190: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20  else{.      if( 
81a0: 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
81b0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
81c0: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
81d0: 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  e, .            
81e0: 22 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61  "Safety level ma
81f0: 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  y not be changed
8200: 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61   inside a transa
8210: 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d  ction");.      }
8220: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e  else{.        in
8230: 74 20 69 4c 65 76 65 6c 20 3d 20 28 67 65 74 53  t iLevel = (getS
8240: 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68  afetyLevel(zRigh
8250: 74 2c 30 2c 31 29 2b 31 29 0a 20 20 20 20 20 20  t,0,1)+1).      
8260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8280: 7c 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c  | SQLITE_SAFETYL
8290: 45 56 45 4c 5f 46 49 58 45 44 3b 0a 20 20 20 20  EVEL_FIXED;.    
82a0: 20 20 20 20 69 4c 65 76 65 6c 20 26 3d 20 50 41      iLevel &= PA
82b0: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
82c0: 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20 20 69 66  MASK;.        if
82d0: 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20 69 4c  ( iLevel==0 ) iL
82e0: 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20  evel = 1;.      
82f0: 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65    pDb->safety_le
8300: 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a 20 20  vel = iLevel;.  
8310: 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65        setAllPage
8320: 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20  rFlags(db);.    
8330: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
8340: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
8350: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
8360: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
8370: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8380: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
8390: 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  S.  case PragTyp
83a0: 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66 28  _FLAG: {.    if(
83b0: 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20   zRight==0 ){.  
83c0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
83d0: 49 6e 74 28 76 2c 20 70 50 72 61 67 6d 61 2d 3e  Int(v, pPragma->
83e0: 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67  zName, (db->flag
83f0: 73 20 26 20 70 50 72 61 67 6d 61 2d 3e 69 41 72  s & pPragma->iAr
8400: 67 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  g)!=0 );.    }el
8410: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 61  se{.      int ma
8420: 73 6b 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41  sk = pPragma->iA
8430: 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f  rg;    /* Mask o
8440: 66 20 62 69 74 73 20 74 6f 20 73 65 74 20 6f 72  f bits to set or
8450: 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20   clear. */.     
8460: 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
8470: 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  mit==0 ){.      
8480: 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79    /* Foreign key
8490: 20 73 75 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74   support may not
84a0: 20 62 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64   be enabled or d
84b0: 69 73 61 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f  isabled while no
84c0: 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 20  t.        ** in 
84d0: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65  auto-commit mode
84e0: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61  .  */.        ma
84f0: 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46  sk &= ~(SQLITE_F
8500: 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20  oreignKeys);.   
8510: 20 20 20 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f     }.#if SQLITE_
8520: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
8530: 49 4f 4e 0a 20 20 20 20 20 20 69 66 28 20 64 62  ION.      if( db
8540: 2d 3e 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c  ->auth.authLevel
8550: 3d 3d 55 41 55 54 48 5f 55 73 65 72 20 29 7b 0a  ==UAUTH_User ){.
8560: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
8570: 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69  t allow non-admi
8580: 6e 20 75 73 65 72 73 20 74 6f 20 6d 6f 64 69 66  n users to modif
8590: 79 20 74 68 65 20 73 63 68 65 6d 61 20 61 72 62  y the schema arb
85a0: 69 74 72 61 72 69 6c 79 20 2a 2f 0a 20 20 20 20  itrarily */.    
85b0: 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51      mask &= ~(SQ
85c0: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
85d0: 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  );.      }.#endi
85e0: 66 0a 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  f..      if( sql
85f0: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
8600: 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20  Right, 0) ){.   
8610: 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c       db->flags |
8620: 3d 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65  = mask;.      }e
8630: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
8640: 3e 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b  >flags &= ~mask;
8650: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6d 61 73  .        if( mas
8660: 6b 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65 72 46  k==SQLITE_DeferF
8670: 4b 73 20 29 20 64 62 2d 3e 6e 44 65 66 65 72 72  Ks ) db->nDeferr
8680: 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20  edImmCons = 0;. 
8690: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
86a0: 20 4d 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61   Many of the fla
86b0: 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79  g-pragmas modify
86c0: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
86d0: 74 65 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a  ted by the SQL .
86e0: 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65        ** compile
86f0: 72 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61  r (eg. count_cha
8700: 6e 67 65 73 29 2e 20 53 6f 20 61 64 64 20 61 6e  nges). So add an
8710: 20 6f 70 63 6f 64 65 20 74 6f 20 65 78 70 69 72   opcode to expir
8720: 65 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63  e all.      ** c
8730: 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74  ompiled SQL stat
8740: 65 6d 65 6e 74 73 20 61 66 74 65 72 20 6d 6f 64  ements after mod
8750: 69 66 79 69 6e 67 20 61 20 70 72 61 67 6d 61 20  ifying a pragma 
8760: 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a  value..      */.
8770: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8780: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78  eAddOp2(v, OP_Ex
8790: 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20  pire, 0, 0);.   
87a0: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
87b0: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20  ags(db);.    }. 
87c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
87d0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
87e0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
87f0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
8800: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
8810: 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a  PRAGMAS.  /*.  *
8820: 2a 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65  *   PRAGMA table
8830: 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20  _info(<table>). 
8840: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
8850: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72  a single row for
8860: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
8870: 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e  the named table.
8880: 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a   The columns of.
8890: 20 20 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65    ** the returne
88a0: 64 20 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a  d data set are:.
88b0: 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20    **.  ** cid:  
88c0: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20        Column id 
88d0: 28 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c  (numbered from l
88e0: 65 66 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74  eft to right, st
88f0: 61 72 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a  arting at 0).  *
8900: 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f  * name:       Co
8910: 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74  lumn name.  ** t
8920: 79 70 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d  ype:       Colum
8930: 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79  n declaration ty
8940: 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c  pe..  ** notnull
8950: 3a 20 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f  :    True if 'NO
8960: 54 20 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20  T NULL' is part 
8970: 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72  of column declar
8980: 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f  ation.  ** dflt_
8990: 76 61 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75  value: The defau
89a0: 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  lt value for the
89b0: 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e   column, if any.
89c0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
89d0: 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a  gTyp_TABLE_INFO:
89e0: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
89f0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
8a00: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
8a10: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
8a20: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
8a30: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
8a40: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
8a50: 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d   char *azCol[] =
8a60: 20 7b 0a 20 20 20 20 20 20 20 20 20 22 63 69 64   {.         "cid
8a70: 22 2c 20 22 6e 61 6d 65 22 2c 20 22 74 79 70 65  ", "name", "type
8a80: 22 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 22 64  ", "notnull", "d
8a90: 66 6c 74 5f 76 61 6c 75 65 22 2c 20 22 70 6b 22  flt_value", "pk"
8aa0: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
8ab0: 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20  int i, k;.      
8ac0: 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b  int nHidden = 0;
8ad0: 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70  .      Column *p
8ae0: 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64 65 78  Col;.      Index
8af0: 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74 65 33 50   *pPk = sqlite3P
8b00: 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70  rimaryKeyIndex(p
8b10: 54 61 62 29 3b 0a 20 20 20 20 20 20 70 50 61 72  Tab);.      pPar
8b20: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20  se->nMem = 6;.  
8b30: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
8b40: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
8b50: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
8b60: 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65  setAllColumnName
8b70: 73 28 76 2c 20 36 2c 20 61 7a 43 6f 6c 29 3b 20  s(v, 6, azCol); 
8b80: 61 73 73 65 72 74 28 20 36 3d 3d 41 72 72 61 79  assert( 6==Array
8b90: 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20  Size(azCol) );. 
8ba0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 69 65 77       sqlite3View
8bb0: 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70  GetColumnNames(p
8bc0: 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a 20 20  Parse, pTab);.  
8bd0: 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f      for(i=0, pCo
8be0: 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c  l=pTab->aCol; i<
8bf0: 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c  pTab->nCol; i++,
8c00: 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20   pCol++){.      
8c10: 20 20 69 66 28 20 49 73 48 69 64 64 65 6e 43 6f    if( IsHiddenCo
8c20: 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20  lumn(pCol) ){.  
8c30: 20 20 20 20 20 20 20 20 6e 48 69 64 64 65 6e 2b          nHidden+
8c40: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  +;.          con
8c50: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d  tinue;.        }
8c60: 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70 43  .        if( (pC
8c70: 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  ol->colFlags & C
8c80: 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d  OLFLAG_PRIMKEY)=
8c90: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
8ca0: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  k = 0;.        }
8cb0: 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d 30 20  else if( pPk==0 
8cc0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d  ){.          k =
8cd0: 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
8ce0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  e{.          for
8cf0: 28 6b 3d 31 3b 20 6b 3c 3d 70 54 61 62 2d 3e 6e  (k=1; k<=pTab->n
8d00: 43 6f 6c 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f  Col && pPk->aiCo
8d10: 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b  lumn[k-1]!=i; k+
8d20: 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  +){}.        }. 
8d30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
8d40: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
8d50: 2c 20 22 69 73 73 69 73 69 22 2c 0a 20 20 20 20  , "issisi",.    
8d60: 20 20 20 20 20 20 20 20 20 20 20 69 2d 6e 48 69             i-nHi
8d70: 64 64 65 6e 2c 0a 20 20 20 20 20 20 20 20 20 20  dden,.          
8d80: 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65       pCol->zName
8d90: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8da0: 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70   pCol->zType ? p
8db0: 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c  Col->zType : "",
8dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8dd0: 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20  pCol->notNull ? 
8de0: 31 20 3a 20 30 2c 0a 20 20 20 20 20 20 20 20 20  1 : 0,.         
8df0: 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 44 66 6c        pCol->zDfl
8e00: 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
8e10: 20 20 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71    k);.        sq
8e20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8e30: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
8e40: 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 6);.      }.
8e50: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
8e60: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
8e70: 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20  yp_STATS: {.    
8e80: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
8e90: 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22  r *azCol[] = { "
8ea0: 74 61 62 6c 65 22 2c 20 22 69 6e 64 65 78 22 2c  table", "index",
8eb0: 20 22 77 69 64 74 68 22 2c 20 22 68 65 69 67 68   "width", "heigh
8ec0: 74 22 20 7d 3b 0a 20 20 20 20 49 6e 64 65 78 20  t" };.    Index 
8ed0: 2a 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45  *pIdx;.    HashE
8ee0: 6c 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20  lem *i;.    v = 
8ef0: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
8f00: 50 61 72 73 65 29 3b 0a 20 20 20 20 70 50 61 72  Parse);.    pPar
8f10: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20  se->nMem = 4;.  
8f20: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
8f30: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
8f40: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 65 74 41  , iDb);.    setA
8f50: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
8f60: 20 34 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73   4, azCol);  ass
8f70: 65 72 74 28 20 34 3d 3d 41 72 72 61 79 53 69 7a  ert( 4==ArraySiz
8f80: 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
8f90: 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68  for(i=sqliteHash
8fa0: 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68  First(&pDb->pSch
8fb0: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69  ema->tblHash); i
8fc0: 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; i=sqliteHashNe
8fd0: 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61  xt(i)){.      Ta
8fe0: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
8ff0: 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20  teHashData(i);. 
9000: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9010: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
9020: 22 73 73 69 69 22 2c 0a 20 20 20 20 20 20 20 20  "ssii",.        
9030: 20 20 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a     pTab->zName,.
9040: 20 20 20 20 20 20 20 20 20 20 20 30 2c 0a 20 20             0,.  
9050: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71           (int)sq
9060: 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
9070: 28 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29  (pTab->szTabRow)
9080: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 6e  ,.           (in
9090: 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  t)sqlite3LogEstT
90a0: 6f 49 6e 74 28 70 54 61 62 2d 3e 6e 52 6f 77 4c  oInt(pTab->nRowL
90b0: 6f 67 45 73 74 29 29 3b 0a 20 20 20 20 20 20 73  ogEst));.      s
90c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
90d0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
90e0: 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 66  , 1, 4);.      f
90f0: 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  or(pIdx=pTab->pI
9100: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
9110: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20  =pIdx->pNext){. 
9120: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9130: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 32  beMultiLoad(v, 2
9140: 2c 20 22 73 69 69 22 2c 0a 20 20 20 20 20 20 20  , "sii",.       
9150: 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c      pIdx->zName,
9160: 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74  .           (int
9170: 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f  )sqlite3LogEstTo
9180: 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64 78 52  Int(pIdx->szIdxR
9190: 6f 77 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ow),.           
91a0: 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45  (int)sqlite3LogE
91b0: 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 61 69  stToInt(pIdx->ai
91c0: 52 6f 77 4c 6f 67 45 73 74 5b 30 5d 29 29 3b 0a  RowLogEst[0]));.
91d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
91e0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
91f0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29  ResultRow, 1, 4)
9200: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
9210: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
9220: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44  case PragTyp_IND
9230: 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69  EX_INFO: if( zRi
9240: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
9250: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
9260: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64  e *pTab;.    pId
9270: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
9280: 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c  ndex(db, zRight,
9290: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
92a0: 49 64 78 20 29 7b 0a 20 20 20 20 20 20 73 74 61  Idx ){.      sta
92b0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
92c0: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20  azCol[] = {.    
92d0: 20 20 20 20 20 22 73 65 71 6e 6f 22 2c 20 22 63       "seqno", "c
92e0: 69 64 22 2c 20 22 6e 61 6d 65 22 2c 20 22 64 65  id", "name", "de
92f0: 73 63 22 2c 20 22 63 6f 6c 6c 22 2c 20 22 6b 65  sc", "coll", "ke
9300: 79 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  y".      };.    
9310: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 69    int i;.      i
9320: 6e 74 20 6d 78 3b 0a 20 20 20 20 20 20 69 66 28  nt mx;.      if(
9330: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 29   pPragma->iArg )
9340: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41  {.        /* PRA
9350: 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20  GMA index_xinfo 
9360: 28 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 20 77  (newer version w
9370: 69 74 68 20 6d 6f 72 65 20 72 6f 77 73 20 61 6e  ith more rows an
9380: 64 20 63 6f 6c 75 6d 6e 73 29 20 2a 2f 0a 20 20  d columns) */.  
9390: 20 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d        mx = pIdx-
93a0: 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20 20  >nColumn;.      
93b0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
93c0: 20 36 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   6;.      }else{
93d0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47  .        /* PRAG
93e0: 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20 28 6c  MA index_info (l
93f0: 65 67 61 63 79 20 76 65 72 73 69 6f 6e 29 20 2a  egacy version) *
9400: 2f 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70  /.        mx = p
9410: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20  Idx->nKeyCol;.  
9420: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
9430: 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a  em = 3;.      }.
9440: 20 20 20 20 20 20 70 54 61 62 20 3d 20 70 49 64        pTab = pId
9450: 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20  x->pTable;.     
9460: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
9470: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
9480: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 61 73 73   iDb);.      ass
9490: 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65  ert( pParse->nMe
94a0: 6d 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  m<=ArraySize(azC
94b0: 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 73 65 74  ol) );.      set
94c0: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
94d0: 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20  , pParse->nMem, 
94e0: 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20 66 6f  azCol);.      fo
94f0: 72 28 69 3d 30 3b 20 69 3c 6d 78 3b 20 69 2b 2b  r(i=0; i<mx; i++
9500: 29 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20 63  ){.        i16 c
9510: 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f  num = pIdx->aiCo
9520: 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20  lumn[i];.       
9530: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9540: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 69 73  iLoad(v, 1, "iis
9550: 22 2c 20 69 2c 20 63 6e 75 6d 2c 0a 20 20 20 20  ", i, cnum,.    
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 20 20 20 20 20 20 20 20 20 63 6e 75 6d 3c 30 20           cnum<0 
9580: 3f 20 30 20 3a 20 70 54 61 62 2d 3e 61 43 6f 6c  ? 0 : pTab->aCol
9590: 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  [cnum].zName);. 
95a0: 20 20 20 20 20 20 20 69 66 28 20 70 50 72 61 67         if( pPrag
95b0: 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20  ma->iArg ){.    
95c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
95d0: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 34 2c  eMultiLoad(v, 4,
95e0: 20 22 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20   "isi",.        
95f0: 20 20 20 20 70 49 64 78 2d 3e 61 53 6f 72 74 4f      pIdx->aSortO
9600: 72 64 65 72 5b 69 5d 2c 0a 20 20 20 20 20 20 20  rder[i],.       
9610: 20 20 20 20 20 70 49 64 78 2d 3e 61 7a 43 6f 6c       pIdx->azCol
9620: 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  l[i],.          
9630: 20 20 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f    i<pIdx->nKeyCo
9640: 6c 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  l);.        }.  
9650: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9660: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
9670: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 70 50 61 72  sultRow, 1, pPar
9680: 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20  se->nMem);.     
9690: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
96a0: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
96b0: 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54  agTyp_INDEX_LIST
96c0: 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
96d0: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
96e0: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
96f0: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
9700: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46   pTab = sqlite3F
9710: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69  indTable(db, zRi
9720: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
9730: 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20  f( pTab ){.     
9740: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
9750: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a  ar *azCol[] = {.
9760: 20 20 20 20 20 20 20 20 22 73 65 71 22 2c 20 22          "seq", "
9770: 6e 61 6d 65 22 2c 20 22 75 6e 69 71 75 65 22 2c  name", "unique",
9780: 20 22 6f 72 69 67 69 6e 22 2c 20 22 70 61 72 74   "origin", "part
9790: 69 61 6c 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20  ial".      };.  
97a0: 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47      v = sqlite3G
97b0: 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a  etVdbe(pParse);.
97c0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
97d0: 65 6d 20 3d 20 35 3b 0a 20 20 20 20 20 20 73 71  em = 5;.      sq
97e0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
97f0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
9800: 62 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c  b);.      setAll
9810: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 35  ColumnNames(v, 5
9820: 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72  , azCol);  asser
9830: 74 28 20 35 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 5==ArraySize(
9840: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20  azCol) );.      
9850: 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70  for(pIdx=pTab->p
9860: 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64 78  Index, i=0; pIdx
9870: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
9880: 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, i++){.      
9890: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a    const char *az
98a0: 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22 63 22  Origin[] = { "c"
98b0: 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b 0a 20  , "u", "pk" };. 
98c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
98d0: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
98e0: 2c 20 22 69 73 69 73 69 22 2c 0a 20 20 20 20 20  , "isisi",.     
98f0: 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20        i,.       
9900: 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c      pIdx->zName,
9910: 0a 20 20 20 20 20 20 20 20 20 20 20 49 73 55 6e  .           IsUn
9920: 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 2c  iqueIndex(pIdx),
9930: 0a 20 20 20 20 20 20 20 20 20 20 20 61 7a 4f 72  .           azOr
9940: 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78 54 79  igin[pIdx->idxTy
9950: 70 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pe],.           
9960: 70 49 64 78 2d 3e 70 50 61 72 74 49 64 78 57 68  pIdx->pPartIdxWh
9970: 65 72 65 21 3d 30 29 3b 0a 20 20 20 20 20 20 20  ere!=0);.       
9980: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9990: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
99a0: 6f 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20 20 20  ow, 1, 5);.     
99b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
99c0: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
99d0: 61 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c  agTyp_DATABASE_L
99e0: 49 53 54 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  IST: {.    stati
99f0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
9a00: 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65 71 22 2c  Col[] = { "seq",
9a10: 20 22 6e 61 6d 65 22 2c 20 22 66 69 6c 65 22 20   "name", "file" 
9a20: 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
9a30: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9a40: 20 33 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f   3;.    setAllCo
9a50: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 33 2c 20  lumnNames(v, 3, 
9a60: 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20  azCol); assert( 
9a70: 33 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  3==ArraySize(azC
9a80: 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 69  ol) );.    for(i
9a90: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
9aa0: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  ++){.      if( d
9ab0: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30  b->aDb[i].pBt==0
9ac0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
9ad0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
9ae0: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29  Db[i].zName!=0 )
9af0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9b00: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
9b10: 31 2c 20 22 69 73 73 22 2c 0a 20 20 20 20 20 20  1, "iss",.      
9b20: 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 64     i,.         d
9b30: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
9b40: 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  .         sqlite
9b50: 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d  3BtreeGetFilenam
9b60: 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  e(db->aDb[i].pBt
9b70: 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
9b80: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9b90: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
9ba0: 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  3);.    }.  }.  
9bb0: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
9bc0: 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e  ragTyp_COLLATION
9bd0: 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 73 74 61  _LIST: {.    sta
9be0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
9bf0: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65 71  azCol[] = { "seq
9c00: 22 2c 20 22 6e 61 6d 65 22 20 7d 3b 0a 20 20 20  ", "name" };.   
9c10: 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
9c20: 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20  HashElem *p;.   
9c30: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9c40: 32 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  2;.    setAllCol
9c50: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 32 2c 20 61  umnNames(v, 2, a
9c60: 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 32  zCol); assert( 2
9c70: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
9c80: 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d  l) );.    for(p=
9c90: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
9ca0: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20  &db->aCollSeq); 
9cb0: 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e  p; p=sqliteHashN
9cc0: 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43  ext(p)){.      C
9cd0: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20  ollSeq *pColl = 
9ce0: 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74  (CollSeq *)sqlit
9cf0: 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20  eHashData(p);.  
9d00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9d10: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
9d20: 69 73 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c 6c 2d  is", i++, pColl-
9d30: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 73  >zName);.      s
9d40: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9d50: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
9d60: 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 2);.    }. 
9d70: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
9d80: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
9d90: 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53  T_SCHEMA_PRAGMAS
9da0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
9db0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
9dc0: 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72 61 67  _KEY.  case Prag
9dd0: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
9de0: 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74  LIST: if( zRight
9df0: 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46   ){.    FKey *pF
9e00: 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  K;.    Table *pT
9e10: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
9e20: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
9e30: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
9e40: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
9e50: 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69  {.      v = sqli
9e60: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
9e70: 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20  e);.      pFK = 
9e80: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20  pTab->pFKey;.   
9e90: 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20     if( pFK ){.  
9ea0: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
9eb0: 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d  st char *azCol[]
9ec0: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   = {.           
9ed0: 22 69 64 22 2c 20 22 73 65 71 22 2c 20 22 74 61  "id", "seq", "ta
9ee0: 62 6c 65 22 2c 20 22 66 72 6f 6d 22 2c 20 22 74  ble", "from", "t
9ef0: 6f 22 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c  o", "on_update",
9f00: 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 0a 20 20   "on_delete",.  
9f10: 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 22           "match"
9f20: 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  .        };.    
9f30: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a      int i = 0; .
9f40: 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
9f50: 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20  nMem = 8;.      
9f60: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
9f70: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
9f80: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
9f90: 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65  setAllColumnName
9fa0: 73 28 76 2c 20 38 2c 20 61 7a 43 6f 6c 29 3b 20  s(v, 8, azCol); 
9fb0: 61 73 73 65 72 74 28 20 38 3d 3d 41 72 72 61 79  assert( 8==Array
9fc0: 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20  Size(azCol) );. 
9fd0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b         while(pFK
9fe0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
9ff0: 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f   j;.          fo
a000: 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43  r(j=0; j<pFK->nC
a010: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
a020: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a030: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
a040: 20 22 69 69 73 73 73 73 73 73 22 2c 0a 20 20 20   "iissssss",.   
a050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a060: 69 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  i,.             
a070: 20 20 20 20 20 20 6a 2c 0a 20 20 20 20 20 20 20        j,.       
a080: 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b 2d              pFK-
a090: 3e 7a 54 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  >zTo,.          
a0a0: 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61           pTab->a
a0b0: 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  Col[pFK->aCol[j]
a0c0: 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 0a 20  .iFrom].zName,. 
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0e0: 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a    pFK->aCol[j].z
a0f0: 43 6f 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Col,.           
a100: 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e 4e 61          actionNa
a110: 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b  me(pFK->aAction[
a120: 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20 55 50 44 41  1]),  /* ON UPDA
a130: 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  TE */.          
a140: 20 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e 4e           actionN
a150: 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e  ame(pFK->aAction
a160: 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e 20 44 45 4c  [0]),  /* ON DEL
a170: 45 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ETE */.         
a180: 20 20 20 20 20 20 20 20 20 20 22 4e 4f 4e 45 22            "NONE"
a190: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
a1a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
a1b0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
a1c0: 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20  , 1, 8);.       
a1d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b     }.          +
a1e0: 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46  +i;.          pF
a1f0: 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72  K = pFK->pNextFr
a200: 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  om;.        }.  
a210: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
a220: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
a230: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
a240: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
a250: 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  KEY) */..#ifndef
a260: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
a270: 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66  EIGN_KEY.#ifndef
a280: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
a290: 47 47 45 52 0a 20 20 63 61 73 65 20 50 72 61 67  GGER.  case Prag
a2a0: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
a2b0: 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65  CHECK: {.    FKe
a2c0: 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20  y *pFK;         
a2d0: 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e      /* A foreign
a2e0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
a2f0: 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
a300: 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
a310: 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e   Child table con
a320: 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53  tain "REFERENCES
a330: 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20  " keyword */.   
a340: 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b   Table *pParent;
a350: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
a360: 74 20 74 61 62 6c 65 20 74 68 61 74 20 63 68 69  t table that chi
a370: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a  ld points to */.
a380: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
a390: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
a3a0: 64 65 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e  dex in the paren
a3b0: 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  t table */.    i
a3c0: 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
a3d0: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
a3e0: 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20  unter:  Foreign 
a3f0: 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70  key number for p
a400: 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a  Tab */.    int j
a410: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a420: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
a430: 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65  r:  Field of the
a440: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a   foreign key */.
a450: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b      HashElem *k;
a460: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
a470: 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78  op counter:  Nex
a480: 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d  t table in schem
a490: 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20  a */.    int x; 
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4b0: 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61 62  /* result variab
a4c0: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  le */.    int re
a4d0: 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20  gResult;        
a4e0: 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73 20   /* 3 registers 
a4f0: 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74  to hold a result
a500: 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20   row */.    int 
a510: 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20  regKey;         
a520: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
a530: 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63  o hold key for c
a540: 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a  hecking the FK *
a550: 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77  /.    int regRow
a560: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a570: 52 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c  Registers to hol
a580: 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61  d a row from pTa
a590: 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  b */.    int add
a5a0: 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  rTop;           
a5b0: 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70  /* Top of a loop
a5c0: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67   checking foreig
a5d0: 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e  n keys */.    in
a5e0: 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20  t addrOk;       
a5f0: 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
a600: 65 20 69 66 20 74 68 65 20 6b 65 79 20 69 73 20  e if the key is 
a610: 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  OK */.    int *a
a620: 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  iCols;          
a630: 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72   /* child to par
a640: 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69  ent column mappi
a650: 6e 67 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63  ng */.    static
a660: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
a670: 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65 22  ol[] = { "table"
a680: 2c 20 22 72 6f 77 69 64 22 2c 20 22 70 61 72 65  , "rowid", "pare
a690: 6e 74 22 2c 20 22 66 6b 69 64 22 20 7d 3b 0a 0a  nt", "fkid" };..
a6a0: 20 20 20 20 72 65 67 52 65 73 75 6c 74 20 3d 20      regResult = 
a6b0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a  pParse->nMem+1;.
a6c0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
a6d0: 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b 65   += 4;.    regKe
a6e0: 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  y = ++pParse->nM
a6f0: 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77 20 3d  em;.    regRow =
a700: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
a710: 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33  .    v = sqlite3
a720: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
a730: 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  .    setAllColum
a740: 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61 7a 43  nNames(v, 4, azC
a750: 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 34 3d 3d  ol); assert( 4==
a760: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
a770: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
a780: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
a790: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
a7a0: 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68    k = sqliteHash
a7b0: 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69  First(&db->aDb[i
a7c0: 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c  Db].pSchema->tbl
a7d0: 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65  Hash);.    while
a7e0: 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ( k ){.      if(
a7f0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
a800: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
a810: 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61  3LocateTable(pPa
a820: 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20  rse, 0, zRight, 
a830: 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20  zDb);.        k 
a840: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
a850: 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d  {.        pTab =
a860: 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48   (Table*)sqliteH
a870: 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20  ashData(k);.    
a880: 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61      k = sqliteHa
a890: 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20  shNext(k);.     
a8a0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54 61   }.      if( pTa
a8b0: 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46  b==0 || pTab->pF
a8c0: 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  Key==0 ) continu
a8d0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
a8e0: 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65  TableLock(pParse
a8f0: 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75  , iDb, pTab->tnu
a900: 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  m, 0, pTab->zNam
a910: 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54  e);.      if( pT
a920: 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e  ab->nCol+regRow>
a930: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70  pParse->nMem ) p
a940: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54  Parse->nMem = pT
a950: 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f  ab->nCol + regRo
a960: 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  w;.      sqlite3
a970: 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65  OpenTable(pParse
a980: 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20  , 0, iDb, pTab, 
a990: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
a9a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
a9b0: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 72 65 67  oadString(v, reg
a9c0: 52 65 73 75 6c 74 2c 20 70 54 61 62 2d 3e 7a 4e  Result, pTab->zN
a9d0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  ame);.      for(
a9e0: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
a9f0: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
aa00: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
aa10: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
aa20: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69  rent = sqlite3Fi
aa30: 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d  ndTable(db, pFK-
aa40: 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20  >zTo, zDb);.    
aa50: 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d      if( pParent=
aa60: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
aa70: 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b         pIdx = 0;
aa80: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
aa90: 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65  TableLock(pParse
aaa0: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e  , iDb, pParent->
aab0: 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74  tnum, 0, pParent
aac0: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
aad0: 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c    x = sqlite3FkL
aae0: 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73  ocateIndex(pPars
aaf0: 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c  e, pParent, pFK,
ab00: 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20   &pIdx, 0);.    
ab10: 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a      if( x==0 ){.
ab20: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
ab30: 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  dx==0 ){.       
ab40: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
ab50: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c  Table(pParse, i,
ab60: 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f   iDb, pParent, O
ab70: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
ab80: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
ab90: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
aba0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
abb0: 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20 70  P_OpenRead, i, p
abc0: 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b  Idx->tnum, iDb);
abd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
abe0: 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65 79  ite3VdbeSetP4Key
abf0: 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64  Info(pParse, pId
ac00: 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  x);.          }.
ac10: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
ac20: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a           k = 0;.
ac30: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
ac40: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
ac50: 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
ac60: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20   pParse->nErr>0 
ac70: 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20  || pFK==0 );.   
ac80: 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72 65     if( pFK ) bre
ac90: 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50  ak;.      if( pP
aca0: 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70  arse->nTab<i ) p
acb0: 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b  Parse->nTab = i;
acc0: 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d  .      addrTop =
acd0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ace0: 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c  p1(v, OP_Rewind,
acf0: 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   0); VdbeCoverag
ad00: 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  e(v);.      for(
ad10: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
ad20: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
ad30: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
ad40: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
ad50: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69  rent = sqlite3Fi
ad60: 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d  ndTable(db, pFK-
ad70: 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20  >zTo, zDb);.    
ad80: 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20      pIdx = 0;.  
ad90: 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20 30        aiCols = 0
ada0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
adb0: 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  arent ){.       
adc0: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
add0: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
ade0: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
adf0: 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73  , &pIdx, &aiCols
ae00: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  );.          ass
ae10: 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20  ert( x==0 );.   
ae20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
ae30: 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56  ddrOk = sqlite3V
ae40: 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b  dbeMakeLabel(v);
ae50: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
ae60: 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30 20  rent && pIdx==0 
ae70: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
ae80: 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f   iKey = pFK->aCo
ae90: 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20  l[0].iFrom;.    
aea0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69 4b        assert( iK
aeb0: 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70 54  ey>=0 && iKey<pT
aec0: 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20  ab->nCol );.    
aed0: 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 21 3d        if( iKey!=
aee0: 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20  pTab->iPKey ){. 
aef0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
af00: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
af10: 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b  OP_Column, 0, iK
af20: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
af30: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
af40: 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c  ColumnDefault(v,
af50: 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65 67   pTab, iKey, reg
af60: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
af70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
af80: 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op2(v, OP_IsNull
af90: 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b  , regRow, addrOk
afa0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
afb0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
afc0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
afd0: 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49 6e  2(v, OP_MustBeIn
afe0: 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20 20 20  t, regRow, .    
aff0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b000: 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
b010: 72 28 76 29 2b 33 29 3b 20 56 64 62 65 43 6f 76  r(v)+3); VdbeCov
b020: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
b030: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b040: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b050: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
b060: 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77 29  owid, 0, regRow)
b070: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
b080: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b090: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
b0a0: 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30 2c  NotExists, i, 0,
b0b0: 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65 43 6f   regRow); VdbeCo
b0c0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
b0d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b0e0: 47 6f 74 6f 28 76 2c 20 61 64 64 72 4f 6b 29 3b  Goto(v, addrOk);
b0f0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
b100: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
b110: 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  , sqlite3VdbeCur
b120: 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a  rentAddr(v)-2);.
b130: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
b140: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30           for(j=0
b150: 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a  ; j<pFK->nCol; j
b160: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
b170: 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
b180: 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
b190: 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20  (v, pTab, 0,.   
b1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1b0: 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20           aiCols 
b1c0: 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46  ? aiCols[j] : pF
b1d0: 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d  K->aCol[j].iFrom
b1e0: 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20  , regRow+j);.   
b1f0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b200: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
b210: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b  _IsNull, regRow+
b220: 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65  j, addrOk); Vdbe
b230: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
b240: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
b250: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29     if( pParent )
b260: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
b270: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
b280: 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  v, OP_MakeRecord
b290: 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e  , regRow, pFK->n
b2a0: 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20  Col, regKey,.   
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2c0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b2d0: 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
b2e0: 74 72 28 64 62 2c 70 49 64 78 29 2c 20 70 46 4b  tr(db,pIdx), pFK
b2f0: 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20  ->nCol);.       
b300: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b310: 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f  AddOp4Int(v, OP_
b320: 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b  Found, i, addrOk
b330: 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20  , regKey, 0);.  
b340: 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f            VdbeCo
b350: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
b360: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
b370: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b380: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
b390: 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65  _Rowid, 0, regRe
b3a0: 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20  sult+1);.       
b3b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
b3c0: 69 4c 6f 61 64 28 76 2c 20 72 65 67 52 65 73 75  iLoad(v, regResu
b3d0: 6c 74 2b 32 2c 20 22 73 69 22 2c 20 70 46 4b 2d  lt+2, "si", pFK-
b3e0: 3e 7a 54 6f 2c 20 69 2d 31 29 3b 0a 20 20 20 20  >zTo, i-1);.    
b3f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b400: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
b410: 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74  ltRow, regResult
b420: 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 4);.        sq
b430: 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65  lite3VdbeResolve
b440: 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29  Label(v, addrOk)
b450: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
b460: 33 44 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f  3DbFree(db, aiCo
b470: 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ls);.      }.   
b480: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b490: 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c  dOp2(v, OP_Next,
b4a0: 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 20   0, addrTop+1); 
b4b0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
b4c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
b4d0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
b4e0: 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20  drTop);.    }.  
b4f0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
b500: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
b510: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
b520: 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  R) */.#endif /* 
b530: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
b540: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
b550: 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44  ) */..#ifndef ND
b560: 45 42 55 47 0a 20 20 63 61 73 65 20 50 72 61 67  EBUG.  case Prag
b570: 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45  Typ_PARSER_TRACE
b580: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
b590: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
b5a0: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
b5b0: 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a  n(zRight, 0) ){.
b5c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
b5d0: 61 72 73 65 72 54 72 61 63 65 28 73 74 64 6f 75  arserTrace(stdou
b5e0: 74 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a  t, "parser: ");.
b5f0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
b600: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73       sqlite3Pars
b610: 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a 20  erTrace(0, 0);. 
b620: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
b630: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
b640: 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c  ..  /* Reinstall
b650: 20 74 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c   the LIKE and GL
b660: 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54  OB functions.  T
b670: 68 65 20 76 61 72 69 61 6e 74 20 6f 66 20 4c 49  he variant of LI
b680: 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20 77 69 6c  KE.  ** used wil
b690: 6c 20 62 65 20 63 61 73 65 20 73 65 6e 73 69 74  l be case sensit
b6a0: 69 76 65 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e  ive or not depen
b6b0: 64 69 6e 67 20 6f 6e 20 74 68 65 20 52 48 53 2e  ding on the RHS.
b6c0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
b6d0: 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54  gTyp_CASE_SENSIT
b6e0: 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20  IVE_LIKE: {.    
b6f0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
b700: 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69 73      sqlite3Regis
b710: 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
b720: 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74 42  (db, sqlite3GetB
b730: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
b740: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
b750: 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20  break;..#ifndef 
b760: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
b770: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
b780: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
b790: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
b7a0: 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23  _ERROR_MAX 100.#
b7b0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
b7c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
b7d0: 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20  RITY_CHECK.  /* 
b7e0: 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f 63 68  Pragma "quick_ch
b7f0: 65 63 6b 22 20 69 73 20 72 65 64 75 63 65 64 20  eck" is reduced 
b800: 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a  version of .  **
b810: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
b820: 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64 65 74   designed to det
b830: 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62 61 73  ect most databas
b840: 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a  e corruption.  *
b850: 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f  * without most o
b860: 66 20 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f  f the overhead o
b870: 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67 72 69  f a full integri
b880: 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20  ty-check..  */. 
b890: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e   case PragTyp_IN
b8a0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b  TEGRITY_CHECK: {
b8b0: 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61  .    int i, j, a
b8c0: 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20  ddr, mxErr;..   
b8d0: 20 2f 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70   /* Code that ap
b8e0: 70 65 61 72 73 20 61 74 20 74 68 65 20 65 6e 64  pears at the end
b8f0: 20 6f 66 20 74 68 65 20 69 6e 74 65 67 72 69 74   of the integrit
b900: 79 20 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20  y check.  If no 
b910: 65 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73  error.    ** mes
b920: 73 61 67 65 73 20 68 61 76 65 20 62 65 65 6e 20  sages have been 
b930: 67 65 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75  generated, outpu
b940: 74 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65  t OK.  Otherwise
b950: 20 6f 75 74 70 75 74 20 74 68 65 0a 20 20 20 20   output the.    
b960: 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ** error message
b970: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74  .    */.    stat
b980: 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e  ic const int iLn
b990: 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c   = VDBE_OFFSET_L
b9a0: 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74  INENO(2);.    st
b9b0: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
b9c0: 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20  pList endCode[] 
b9d0: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 41  = {.      { OP_A
b9e0: 64 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30  ddImm,      1, 0
b9f0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
ba00: 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 0 */.      { 
ba10: 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20 20 20  OP_If,          
ba20: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 0,        0},
ba30: 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20      /* 1 */.    
ba40: 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20    { OP_String8, 
ba50: 20 20 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20      0, 3,       
ba60: 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a   0},    /* 2 */.
ba70: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
ba80: 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20  tRow,   3, 1,   
ba90: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a       0},.    };.
baa0: 0a 20 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b  .    int isQuick
bab0: 20 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77   = (sqlite3Tolow
bac0: 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71  er(zLeft[0])=='q
bad0: 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74  ');..    /* If t
bae0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
baf0: 64 20 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72  d was of the for
bb00: 6d 20 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69  m "PRAGMA <db>.i
bb10: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c  ntegrity_check",
bb20: 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62  .    ** then iDb
bb30: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 69   is set to the i
bb40: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
bb50: 62 61 73 65 20 69 64 65 6e 74 69 66 69 65 64 20  base identified 
bb60: 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20  by <db>..    ** 
bb70: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68  In this case, th
bb80: 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64  e integrity of d
bb90: 61 74 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79  atabase iDb only
bba0: 20 69 73 20 76 65 72 69 66 69 65 64 20 62 79 0a   is verified by.
bbb0: 20 20 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20      ** the VDBE 
bbc0: 63 72 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20  created below.. 
bbd0: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68     **.    ** Oth
bbe0: 65 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 63  erwise, if the c
bbf0: 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c  ommand was simpl
bc00: 79 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72  y "PRAGMA integr
bc10: 69 74 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20  ity_check" (or. 
bc20: 20 20 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75     ** "PRAGMA qu
bc30: 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65  ick_check"), the
bc40: 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20  n iDb is set to 
bc50: 30 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  0. In this case,
bc60: 20 73 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20   set iDb.    ** 
bc70: 74 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69  to -1 here, to i
bc80: 6e 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65  ndicate that the
bc90: 20 56 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72   VDBE should ver
bca0: 69 66 79 20 74 68 65 20 69 6e 74 65 67 72 69 74  ify the integrit
bcb0: 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20  y.    ** of all 
bcc0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
bcd0: 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  es.  */.    asse
bce0: 72 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20  rt( iDb>=0 );.  
bcf0: 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30    assert( iDb==0
bd00: 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20   || pId2->z );. 
bd10: 20 20 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d     if( pId2->z==
bd20: 30 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20  0 ) iDb = -1;.. 
bd30: 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65     /* Initialize
bd40: 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61   the VDBE progra
bd50: 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d  m */.    pParse-
bd60: 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73  >nMem = 6;.    s
bd70: 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28  etOneColumnName(
bd80: 76 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68  v, "integrity_ch
bd90: 65 63 6b 22 29 3b 0a 0a 20 20 20 20 2f 2a 20 53  eck");..    /* S
bda0: 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65  et the maximum e
bdb0: 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  rror count */.  
bdc0: 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
bdd0: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
bde0: 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
bdf0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
be00: 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e      sqlite3GetIn
be10: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45  t32(zRight, &mxE
be20: 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d  rr);.      if( m
be30: 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20  xErr<=0 ){.     
be40: 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54     mxErr = SQLIT
be50: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
be60: 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20  K_ERROR_MAX;.   
be70: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
be80: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
be90: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
bea0: 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72  mxErr, 1);  /* r
beb0: 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f  eg[1] holds erro
bec0: 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20  rs left */..    
bed0: 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69  /* Do an integri
bee0: 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68  ty check on each
bef0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a   database file *
bf00: 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
bf10: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
bf20: 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a        HashElem *
bf30: 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70  x;.      Hash *p
bf40: 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20  Tbls;.      int 
bf50: 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  cnt = 0;..      
bf60: 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  if( OMIT_TEMPDB 
bf70: 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e  && i==1 ) contin
bf80: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44  ue;.      if( iD
bf90: 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29  b>=0 && i!=iDb )
bfa0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20   continue;..    
bfb0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
bfc0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
bfd0: 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  , i);.      addr
bfe0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
bff0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
c000: 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66  , 1); /* Halt if
c010: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
c020: 2f 0a 20 20 20 20 20 20 56 64 62 65 43 6f 76 65  /.      VdbeCove
c030: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
c040: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c050: 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
c060: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
c070: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
c080: 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f   addr);..      /
c090: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
c0a0: 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42  y check of the B
c0b0: 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20  -Tree.      **. 
c0c0: 20 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79       ** Begin by
c0d0: 20 66 69 6c 6c 69 6e 67 20 72 65 67 69 73 74 65   filling registe
c0e0: 72 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74  rs 2, 3, ... wit
c0f0: 68 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73  h the root pages
c100: 20 6e 75 6d 62 65 72 73 0a 20 20 20 20 20 20 2a   numbers.      *
c110: 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73  * for all tables
c120: 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20   and indices in 
c130: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
c140: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
c150: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
c160: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
c170: 69 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70  i, 0) );.      p
c180: 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b  Tbls = &db->aDb[
c190: 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  i].pSchema->tblH
c1a0: 61 73 68 3b 0a 20 20 20 20 20 20 66 6f 72 28 78  ash;.      for(x
c1b0: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
c1c0: 28 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71  (pTbls); x; x=sq
c1d0: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29  liteHashNext(x))
c1e0: 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20  {.        Table 
c1f0: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
c200: 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20  shData(x);.     
c210: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
c220: 20 20 20 20 20 20 20 20 69 66 28 20 48 61 73 52          if( HasR
c230: 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
c240: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c250: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c260: 49 6e 74 65 67 65 72 2c 20 70 54 61 62 2d 3e 74  Integer, pTab->t
c270: 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20  num, 2+cnt);.   
c280: 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65         VdbeComme
c290: 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70 54 61  nt((v, "%s", pTa
c2a0: 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20  b->zName));.    
c2b0: 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
c2c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66       }.        f
c2d0: 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  or(pIdx=pTab->pI
c2e0: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
c2f0: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20  =pIdx->pNext){. 
c300: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c310: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c320: 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e  _Integer, pIdx->
c330: 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20  tnum, 2+cnt);.  
c340: 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d          VdbeComm
c350: 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70 49  ent((v, "%s", pI
c360: 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20  dx->zName));.   
c370: 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20         cnt++;.  
c380: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
c390: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
c3a0: 75 72 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e  ure sufficient n
c3b0: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
c3c0: 72 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  rs have been all
c3d0: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20  ocated */.      
c3e0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d  pParse->nMem = M
c3f0: 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  AX( pParse->nMem
c400: 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a 20 20 20 20  , cnt+8 );..    
c410: 20 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72    /* Do the b-tr
c420: 65 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  ee integrity che
c430: 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  cks */.      sql
c440: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
c450: 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  , OP_IntegrityCk
c460: 2c 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20  , 2, cnt, 1);.  
c470: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
c480: 68 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69  hangeP5(v, (u8)i
c490: 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20  );.      addr = 
c4a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c4b0: 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  1(v, OP_IsNull, 
c4c0: 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  2); VdbeCoverage
c4d0: 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (v);.      sqlit
c4e0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
c4f0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
c500: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71  , 0,.         sq
c510: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
c520: 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73   "*** in databas
c530: 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d  e %s ***\n", db-
c540: 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a  >aDb[i].zName),.
c550: 20 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41           P4_DYNA
c560: 4d 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  MIC);.      sqli
c570: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
c580: 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20   OP_Move, 2, 4, 
c590: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
c5a0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
c5b0: 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20  P_Concat, 4, 3, 
c5c0: 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2);.      sqlite
c5d0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c5e0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20  P_ResultRow, 2, 
c5f0: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
c600: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
c610: 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f   addr);..      /
c620: 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
c630: 74 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20  the indices are 
c640: 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72  constructed corr
c650: 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a  ectly..      */.
c660: 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69        for(x=sqli
c670: 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
c680: 73 29 3b 20 78 20 26 26 20 21 69 73 51 75 69 63  s); x && !isQuic
c690: 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e  k; x=sqliteHashN
c6a0: 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20  ext(x)){.       
c6b0: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
c6c0: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29  qliteHashData(x)
c6d0: 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
c6e0: 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20  *pIdx, *pPk;.   
c6f0: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72 69       Index *pPri
c700: 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  or = 0;.        
c710: 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20  int loopTop;.   
c720: 20 20 20 20 20 69 6e 74 20 69 44 61 74 61 43 75       int iDataCu
c730: 72 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20 20  r, iIdxCur;.    
c740: 20 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b      int r1 = -1;
c750: 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54  ..        if( pT
c760: 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20  ab->pIndex==0 ) 
c770: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
c780: 20 20 70 50 6b 20 3d 20 48 61 73 52 6f 77 69 64    pPk = HasRowid
c790: 28 70 54 61 62 29 20 3f 20 30 20 3a 20 73 71 6c  (pTab) ? 0 : sql
c7a0: 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
c7b0: 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20  dex(pTab);.     
c7c0: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
c7d0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
c7e0: 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a  P_IfPos, 1);  /*
c7f0: 20 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20   Stop if out of 
c800: 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20  errors */.      
c810: 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
c820: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c830: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c840: 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
c850: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c860: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
c870: 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71  ddr);.        sq
c880: 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
c890: 65 61 72 28 70 50 61 72 73 65 29 3b 0a 20 20 20  ear(pParse);.   
c8a0: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
c8b0: 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
c8c0: 70 50 61 72 73 65 2c 20 70 54 61 62 2c 20 4f 50  pParse, pTab, OP
c8d0: 5f 4f 70 65 6e 52 65 61 64 2c 20 30 2c 0a 20 20  _OpenRead, 0,.  
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c900: 20 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75 72   1, 0, &iDataCur
c910: 2c 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20 20  , &iIdxCur);.   
c920: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c930: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c940: 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20  eger, 0, 7);.   
c950: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
c960: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
c970: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
c980: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
c990: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c9a0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c9b0: 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a  _Integer, 0, 8+j
c9c0: 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72  ); /* index entr
c9d0: 69 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  ies counter */. 
c9e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c9f0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
ca00: 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  MAX(pParse->nMem
ca10: 2c 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20  , 8+j);.        
ca20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ca30: 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20  2(v, OP_Rewind, 
ca40: 69 44 61 74 61 43 75 72 2c 20 30 29 3b 20 56 64  iDataCur, 0); Vd
ca50: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
ca60: 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d         loopTop =
ca70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ca80: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
ca90: 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   7, 1);.        
caa0: 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61  /* Verify that a
cab0: 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75  ll NOT NULL colu
cac0: 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72 65 20 4e  mns really are N
cad0: 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20  OT NULL */.     
cae0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54     for(j=0; j<pT
caf0: 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a  ab->nCol; j++){.
cb00: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
cb10: 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20 20 20  zErr;.          
cb20: 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a  int jmp2, jmp3;.
cb30: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6a 3d            if( j=
cb40: 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 20 63  =pTab->iPKey ) c
cb50: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
cb60: 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f     if( pTab->aCo
cb70: 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20  l[j].notNull==0 
cb80: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
cb90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
cba0: 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
cbb0: 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 69  Table(v, pTab, i
cbc0: 44 61 74 61 43 75 72 2c 20 6a 2c 20 33 29 3b 0a  DataCur, j, 3);.
cbd0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cbe0: 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
cbf0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
cc00: 47 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d  G);.          jm
cc10: 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p2 = sqlite3Vdbe
cc20: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 6f 74  AddOp1(v, OP_Not
cc30: 4e 75 6c 6c 2c 20 33 29 3b 20 56 64 62 65 43 6f  Null, 3); VdbeCo
cc40: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
cc50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cc60: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
cc70: 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20  Imm, 1, -1); /* 
cc80: 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20  Decrement error 
cc90: 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  limit */.       
cca0: 20 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65     zErr = sqlite
ccb0: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 4e 55  3MPrintf(db, "NU
ccc0: 4c 4c 20 76 61 6c 75 65 20 69 6e 20 25 73 2e 25  LL value in %s.%
ccd0: 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  s", pTab->zName,
cce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
cd00: 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61  Tab->aCol[j].zNa
cd10: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  me);.          s
cd20: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
cd30: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
cd40: 30 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c 20 50  0, 3, 0, zErr, P
cd50: 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20  4_DYNAMIC);.    
cd60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cd70: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
cd80: 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a  sultRow, 3, 1);.
cd90: 20 20 20 20 20 20 20 20 20 20 6a 6d 70 33 20 3d            jmp3 =
cda0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cdb0: 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
cdc0: 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  1); VdbeCoverage
cdd0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
cde0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30  qlite3VdbeAddOp0
cdf0: 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20  (v, OP_Halt);.  
ce00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ce10: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
ce20: 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp2);.          
ce30: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
ce40: 65 72 65 28 76 2c 20 6a 6d 70 33 29 3b 0a 20 20  ere(v, jmp3);.  
ce50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
ce60: 2f 2a 20 56 61 6c 69 64 61 74 65 20 69 6e 64 65  /* Validate inde
ce70: 78 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68  x entries for th
ce80: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 2a 2f  e current row */
ce90: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
cea0: 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  , pIdx=pTab->pIn
ceb0: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
cec0: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b  pIdx->pNext, j++
ced0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
cee0: 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70   jmp2, jmp3, jmp
cef0: 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20 20 20  4, jmp5;.       
cf00: 20 20 20 69 6e 74 20 63 6b 55 6e 69 71 20 3d 20     int ckUniq = 
cf10: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c  sqlite3VdbeMakeL
cf20: 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20  abel(v);.       
cf30: 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78     if( pPk==pIdx
cf40: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
cf50: 20 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c 69         r1 = sqli
cf60: 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
cf70: 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49 64 78  Key(pParse, pIdx
cf80: 2c 20 69 44 61 74 61 43 75 72 2c 20 30 2c 20 30  , iDataCur, 0, 0
cf90: 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20 20 20  , &jmp3,.       
cfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfc0: 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20 20 20  pPrior, r1);.   
cfd0: 20 20 20 20 20 20 20 70 50 72 69 6f 72 20 3d 20         pPrior = 
cfe0: 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 20 20  pIdx;.          
cff0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d000: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
d010: 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69 6e 63  8+j, 1);  /* inc
d020: 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f 75  rement entry cou
d030: 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
d040: 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61  /* Verify that a
d050: 6e 20 69 6e 64 65 78 20 65 6e 74 72 79 20 65 78  n index entry ex
d060: 69 73 74 73 20 66 6f 72 20 74 68 65 20 63 75 72  ists for the cur
d070: 72 65 6e 74 20 74 61 62 6c 65 20 72 6f 77 20 2a  rent table row *
d080: 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32  /.          jmp2
d090: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
d0a0: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
d0b0: 75 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  und, iIdxCur+j, 
d0c0: 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20 20 20  ckUniq, r1,.    
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29    pIdx->nColumn)
d100: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
d110: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d120: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d130: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
d140: 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e  -1); /* Decremen
d150: 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f  t error limit */
d160: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d170: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
d180: 28 76 2c 20 33 2c 20 22 72 6f 77 20 22 29 3b 0a  (v, 3, "row ");.
d190: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d1a0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
d1b0: 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20  P_Concat, 7, 3, 
d1c0: 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  3);.          sq
d1d0: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
d1e0: 69 6e 67 28 76 2c 20 34 2c 20 22 20 6d 69 73 73  ing(v, 4, " miss
d1f0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22  ing from index "
d200: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d210: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
d220: 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20  , OP_Concat, 4, 
d230: 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 3);.         
d240: 20 6a 6d 70 35 20 3d 20 73 71 6c 69 74 65 33 56   jmp5 = sqlite3V
d250: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
d260: 20 34 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29   4, pIdx->zName)
d270: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d280: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
d290: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33   OP_Concat, 4, 3
d2a0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
d2b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d2c0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
d2d0: 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 3, 1);.      
d2e0: 20 20 20 20 6a 6d 70 34 20 3d 20 73 71 6c 69 74      jmp4 = sqlit
d2f0: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
d300: 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64  OP_IfPos, 1); Vd
d310: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d320: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d330: 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50  VdbeAddOp0(v, OP
d340: 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20  _Halt);.        
d350: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
d360: 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a  pHere(v, jmp2);.
d370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
d380: 20 55 4e 49 51 55 45 20 69 6e 64 65 78 65 73 2c   UNIQUE indexes,
d390: 20 76 65 72 69 66 79 20 74 68 61 74 20 6f 6e 6c   verify that onl
d3a0: 79 20 6f 6e 65 20 65 6e 74 72 79 20 65 78 69 73  y one entry exis
d3b0: 74 73 20 77 69 74 68 20 74 68 65 0a 20 20 20 20  ts with the.    
d3c0: 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
d3d0: 20 6b 65 79 2e 20 20 54 68 65 20 65 6e 74 72 79   key.  The entry
d3e0: 20 69 73 20 75 6e 69 71 75 65 20 69 66 20 28 31   is unique if (1
d3f0: 29 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 69 73 20  ) any column is 
d400: 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 2a  NULL.          *
d410: 2a 20 6f 72 20 28 32 29 20 74 68 65 20 6e 65 78  * or (2) the nex
d420: 74 20 65 6e 74 72 79 20 68 61 73 20 61 20 64 69  t entry has a di
d430: 66 66 65 72 65 6e 74 20 6b 65 79 20 2a 2f 0a 20  fferent key */. 
d440: 20 20 20 20 20 20 20 20 20 69 66 28 20 49 73 55           if( IsU
d450: 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29  niqueIndex(pIdx)
d460: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
d470: 69 6e 74 20 75 6e 69 71 4f 6b 20 3d 20 73 71 6c  int uniqOk = sql
d480: 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65  ite3VdbeMakeLabe
d490: 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  l(v);.          
d4a0: 20 20 69 6e 74 20 6a 6d 70 36 3b 0a 20 20 20 20    int jmp6;.    
d4b0: 20 20 20 20 20 20 20 20 69 6e 74 20 6b 6b 3b 0a          int kk;.
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 28              for(
d4d0: 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e  kk=0; kk<pIdx->n
d4e0: 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20  KeyCol; kk++){. 
d4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
d500: 20 69 43 6f 6c 20 3d 20 70 49 64 78 2d 3e 61 69   iCol = pIdx->ai
d510: 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20  Column[kk];.    
d520: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
d530: 28 20 69 43 6f 6c 21 3d 58 4e 5f 52 4f 57 49 44  ( iCol!=XN_ROWID
d540: 20 26 26 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e   && iCol<pTab->n
d550: 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Col );.         
d560: 20 20 20 20 20 69 66 28 20 69 43 6f 6c 3e 3d 30       if( iCol>=0
d570: 20 26 26 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69   && pTab->aCol[i
d580: 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20 29 20 63  Col].notNull ) c
d590: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
d5a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d5b0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
d5c0: 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e  sNull, r1+kk, un
d5d0: 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  iqOk);.         
d5e0: 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67       VdbeCoverag
d5f0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
d600: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
d610: 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp6 = sqlite3Vd
d620: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e  beAddOp1(v, OP_N
d630: 65 78 74 2c 20 69 49 64 78 43 75 72 2b 6a 29 3b  ext, iIdxCur+j);
d640: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d650: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d660: 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76 2c  lite3VdbeGoto(v,
d670: 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20   uniqOk);.      
d680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d690: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
d6a0: 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  6);.            
d6b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d6c0: 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47 54  4Int(v, OP_IdxGT
d6d0: 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e 69  , iIdxCur+j, uni
d6e0: 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20 20  qOk, r1,.       
d6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d700: 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
d710: 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65 43 6f  nKeyCol); VdbeCo
d720: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d730: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d740: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
d750: 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f  ddImm, 1, -1); /
d760: 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f  * Decrement erro
d770: 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20  r limit */.     
d780: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d790: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
d7a0: 33 2c 20 22 6e 6f 6e 2d 75 6e 69 71 75 65 20 65  3, "non-unique e
d7b0: 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20 22 29  ntry in index ")
d7c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d7d0: 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76 2c  lite3VdbeGoto(v,
d7e0: 20 6a 6d 70 35 29 3b 0a 20 20 20 20 20 20 20 20   jmp5);.        
d7f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
d800: 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 75  esolveLabel(v, u
d810: 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  niqOk);.        
d820: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71    }.          sq
d830: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
d840: 65 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20 20 20  e(v, jmp4);.    
d850: 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
d860: 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
d870: 28 70 50 61 72 73 65 2c 20 6a 6d 70 33 29 3b 0a  (pParse, jmp3);.
d880: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
d890: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d8a0: 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20  Op2(v, OP_Next, 
d8b0: 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70 54 6f  iDataCur, loopTo
d8c0: 70 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  p); VdbeCoverage
d8d0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  (v);.        sql
d8e0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
d8f0: 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a  (v, loopTop-1);.
d900: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d910: 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20  MIT_BTREECOUNT. 
d920: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d930: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
d940: 32 2c 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65  2, "wrong # of e
d950: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
d960: 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  ");.        for(
d970: 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
d980: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
d990: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
d9a0: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
d9b0: 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20  if( pPk==pIdx ) 
d9c0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
d9d0: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
d9e0: 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
d9f0: 72 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r(v);.          
da00: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
da10: 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  2(v, OP_IfPos, 1
da20: 2c 20 61 64 64 72 2b 32 29 3b 20 56 64 62 65 43  , addr+2); VdbeC
da30: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
da40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
da50: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61  eAddOp2(v, OP_Ha
da60: 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  lt, 0, 0);.     
da70: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
da80: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f 75  AddOp2(v, OP_Cou
da90: 6e 74 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 33  nt, iIdxCur+j, 3
daa0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
dab0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
dac0: 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c 20 61 64  , OP_Eq, 8+j, ad
dad0: 64 72 2b 38 2c 20 33 29 3b 20 56 64 62 65 43 6f  dr+8, 3); VdbeCo
dae0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
daf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
db00: 43 68 61 6e 67 65 50 35 28 76 2c 20 53 51 4c 49  ChangeP5(v, SQLI
db10: 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a 20 20 20  TE_NOTNULL);.   
db20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
db30: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
db40: 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20  ddImm, 1, -1);. 
db50: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
db60: 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76  VdbeLoadString(v
db70: 2c 20 33 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65  , 3, pIdx->zName
db80: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
db90: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
dba0: 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20  , OP_Concat, 3, 
dbb0: 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 20  2, 7);.         
dbc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
dbd0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
dbe0: 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 7, 1);.     
dbf0: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
dc00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
dc10: 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d  COUNT */.      }
dc20: 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64 72   .    }.    addr
dc30: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
dc40: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
dc50: 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65  Size(endCode), e
dc60: 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20  ndCode, iLn);.  
dc70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
dc80: 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2c 20 2d  ngeP2(v, addr, -
dc90: 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71 6c 69  mxErr);.    sqli
dca0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
dcb0: 76 2c 20 61 64 64 72 2b 31 29 3b 0a 20 20 20 20  v, addr+1);.    
dcc0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
dcd0: 65 50 34 28 76 2c 20 61 64 64 72 2b 32 2c 20 22  eP4(v, addr+2, "
dce0: 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  ok", P4_STATIC);
dcf0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
dd00: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
dd10: 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
dd20: 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  ECK */..#ifndef 
dd30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
dd40: 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  6.  /*.  **   PR
dd50: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20  AGMA encoding.  
dd60: 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f  **   PRAGMA enco
dd70: 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22  ding = "utf-8"|"
dd80: 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c  utf-16"|"utf-16l
dd90: 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20  e"|"utf-16be".  
dda0: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66  **.  ** In its f
ddb0: 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20  irst form, this 
ddc0: 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74  pragma returns t
ddd0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  he encoding of t
dde0: 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74  he main.  ** dat
ddf0: 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 64 61  abase. If the da
de00: 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e  tabase is not in
de10: 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73  itialized, it is
de20: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77   initialized now
de30: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
de40: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
de50: 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 61 20  his pragma is a 
de60: 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69  no-op if the mai
de70: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  n database file.
de80: 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72    ** has not alr
de90: 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61  eady been initia
dea0: 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63  lized. In this c
deb0: 61 73 65 20 69 74 20 73 65 74 73 20 74 68 65 20  ase it sets the 
dec0: 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63  default.  ** enc
ded0: 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20  oding that will 
dee0: 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
def0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
df00: 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65  le if a new file
df10: 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64  .  ** is created
df20: 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67  . If an existing
df30: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
df40: 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74  ile is opened, t
df50: 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  hen the.  ** def
df60: 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69  ault text encodi
df70: 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69 73 74  ng for the exist
df80: 69 6e 67 20 64 61 74 61 62 61 73 65 20 69 73 20  ing database is 
df90: 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  used..  ** .  **
dfa0: 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65   In all cases ne
dfb0: 77 20 64 61 74 61 62 61 73 65 73 20 63 72 65 61  w databases crea
dfc0: 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 41 54  ted using the AT
dfd0: 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65  TACH command are
dfe0: 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f  .  ** created to
dff0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 65   use the same de
e000: 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64  fault text encod
e010: 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20  ing as the main 
e020: 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a  database. If.  *
e030: 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
e040: 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e  ase has not been
e050: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64   initialized and
e060: 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68 65 6e  /or created when
e070: 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20   ATTACH.  ** is 
e080: 65 78 65 63 75 74 65 64 2c 20 74 68 69 73 20 69  executed, this i
e090: 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68  s done before th
e0a0: 65 20 41 54 54 41 43 48 20 6f 70 65 72 61 74 69  e ATTACH operati
e0b0: 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  on..  **.  ** In
e0c0: 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   the second form
e0d0: 20 74 68 69 73 20 70 72 61 67 6d 61 20 73 65 74   this pragma set
e0e0: 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  s the text encod
e0f0: 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 69  ing to be used i
e100: 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62  n.  ** new datab
e110: 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65  ase files create
e120: 64 20 75 73 69 6e 67 20 74 68 69 73 20 64 61 74  d using this dat
e130: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74  abase handle. It
e140: 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73   is only.  ** us
e150: 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20  eful if invoked 
e160: 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65  immediately afte
e170: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
e180: 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73  ase i.  */.  cas
e190: 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49  e PragTyp_ENCODI
e1a0: 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  NG: {.    static
e1b0: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e   const struct En
e1c0: 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68  cName {.      ch
e1d0: 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
e1e0: 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65   u8 enc;.    } e
e1f0: 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20  ncnames[] = {.  
e200: 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20      { "UTF8",   
e210: 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20    SQLITE_UTF8   
e220: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
e230: 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49  "UTF-8",    SQLI
e240: 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d  TE_UTF8        }
e250: 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c  ,  /* Must be el
e260: 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20  ement [1] */.   
e270: 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c     { "UTF-16le",
e280: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
e290: 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20      },  /* Must 
e2a0: 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a  be element [2] *
e2b0: 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31  /.      { "UTF-1
e2c0: 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  6be", SQLITE_UTF
e2d0: 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20  16BE     },  /* 
e2e0: 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20  Must be element 
e2f0: 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  [3] */.      { "
e300: 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54  UTF16le",  SQLIT
e310: 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c  E_UTF16LE     },
e320: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62  .      { "UTF16b
e330: 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
e340: 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6BE     },.     
e350: 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30   { "UTF-16",   0
e360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e370: 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55    }, /* SQLITE_U
e380: 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20  TF16NATIVE */.  
e390: 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20      { "UTF16",  
e3a0: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
e3b0: 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54       }, /* SQLIT
e3c0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f  E_UTF16NATIVE */
e3d0: 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a  .      { 0, 0 }.
e3e0: 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74      };.    const
e3f0: 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20   struct EncName 
e400: 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21  *pEnc;.    if( !
e410: 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20  zRight ){    /* 
e420: 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
e430: 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73  " */.      if( s
e440: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
e450: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
e460: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
e470: 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
e480: 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e  es[SQLITE_UTF8].
e490: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
e4a0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
e4b0: 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54  ( encnames[SQLIT
e4c0: 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d  E_UTF16LE].enc==
e4d0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29  SQLITE_UTF16LE )
e4e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
e4f0: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
e500: 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51  UTF16BE].enc==SQ
e510: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
e520: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
e530: 6c 65 54 65 78 74 28 76 2c 20 22 65 6e 63 6f 64  leText(v, "encod
e540: 69 6e 67 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 45  ing", encnames[E
e550: 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e  NC(pParse->db)].
e560: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73  zName);.    }els
e570: 65 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e{              
e580: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50 52            /* "PR
e590: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
e5a0: 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  XXX" */.      /*
e5b0: 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68 65   Only change the
e5c0: 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65   value of sqlite
e5d0: 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61 74 61  .enc if the data
e5e0: 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20 6e  base handle is n
e5f0: 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69 74  ot.      ** init
e600: 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65 20  ialized. If the 
e610: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 65 78  main database ex
e620: 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73 71  ists, the new sq
e630: 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20  lite.enc value. 
e640: 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20       ** will be 
e650: 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68 65 6e  overwritten when
e660: 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e   the schema is n
e670: 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20 69  ext loaded. If i
e680: 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20  t does not.     
e690: 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69 73   ** already exis
e6a0: 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 63  ts, it will be c
e6b0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
e6c0: 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20 76  e new encoding v
e6d0: 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
e6e0: 20 20 20 20 20 69 66 28 20 0a 20 20 20 20 20 20       if( .      
e6f0: 20 20 21 28 44 62 48 61 73 50 72 6f 70 65 72 74    !(DbHasPropert
e700: 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65  y(db, 0, DB_Sche
e710: 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20  maLoaded)) || . 
e720: 20 20 20 20 20 20 20 44 62 48 61 73 50 72 6f 70         DbHasProp
e730: 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 45  erty(db, 0, DB_E
e740: 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b 0a  mpty) .      ){.
e750: 20 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e 63          for(pEnc
e760: 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70  =&encnames[0]; p
e770: 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63  Enc->zName; pEnc
e780: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
e790: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
e7a0: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45 6e  ICmp(zRight, pEn
e7b0: 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20  c->zName) ){.   
e7c0: 20 20 20 20 20 20 20 20 20 53 43 48 45 4d 41 5f           SCHEMA_
e7d0: 45 4e 43 28 64 62 29 20 3d 20 45 4e 43 28 64 62  ENC(db) = ENC(db
e7e0: 29 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) =.            
e7f0: 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20      pEnc->enc ? 
e800: 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49  pEnc->enc : SQLI
e810: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a  TE_UTF16NATIVE;.
e820: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
e830: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
e840: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e850: 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d   if( !pEnc->zNam
e860: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
e870: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
e880: 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72  Parse, "unsuppor
e890: 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73  ted encoding: %s
e8a0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
e8b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
e8c0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
e8d0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
e8e0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
e8f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e900: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
e910: 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  ION_PRAGMAS.  /*
e920: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e930: 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76  schema.]schema_v
e940: 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52  ersion.  **   PR
e950: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63  AGMA [schema.]sc
e960: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c  hema_version = <
e970: 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
e980: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e990: 65 6d 61 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f  ema.]user_versio
e9a0: 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  n.  **   PRAGMA 
e9b0: 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65  [schema.]user_ve
e9c0: 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72  rsion = <integer
e9d0: 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52  >.  **.  **   PR
e9e0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 66 72  AGMA [schema.]fr
e9f0: 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c  eelist_count = <
ea00: 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
ea10: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
ea20: 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ema.]application
ea30: 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  _id.  **   PRAGM
ea40: 41 20 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69  A [schema.]appli
ea50: 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74  cation_id = <int
ea60: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
ea70: 54 68 65 20 70 72 61 67 6d 61 27 73 20 73 63 68  The pragma's sch
ea80: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema_version and 
ea90: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65  user_version are
eaa0: 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20   used to set or 
eab0: 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  get.  ** the val
eac0: 75 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ue of the schema
ead0: 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65  -version and use
eae0: 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65  r-version, respe
eaf0: 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20  ctively. Both.  
eb00: 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  ** the schema-ve
eb10: 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73  rsion and the us
eb20: 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33  er-version are 3
eb30: 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  2-bit signed int
eb40: 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65  egers.  ** store
eb50: 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
eb60: 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20  e header..  **. 
eb70: 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63   ** The schema-c
eb80: 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79  ookie is usually
eb90: 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65   only manipulate
eba0: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20  d internally by 
ebb0: 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20  SQLite. It.  ** 
ebc0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
ebd0: 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65  y SQLite wheneve
ebe0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
ebf0: 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65  chema is modifie
ec00: 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74  d (by.  ** creat
ec10: 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20  ing or dropping 
ec20: 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  a table or index
ec30: 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76 65  ). The schema ve
ec40: 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79  rsion is used by
ec50: 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63  .  ** SQLite eac
ec60: 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69  h time a query i
ec70: 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e  s executed to en
ec80: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e  sure that the in
ec90: 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a  ternal cache.  *
eca0: 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  * of the schema 
ecb0: 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c  used when compil
ecc0: 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72  ing the SQL quer
ecd0: 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63  y matches the sc
ece0: 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65  hema of.  ** the
ecf0: 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73   database agains
ed00: 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70  t which the comp
ed10: 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63  iled query is ac
ed20: 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e  tually executed.
ed30: 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67  .  ** Subverting
ed40: 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20   this mechanism 
ed50: 62 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41  by using "PRAGMA
ed60: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22   schema_version"
ed70: 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20   to modify.  ** 
ed80: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
ed90: 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c  on is potentiall
eda0: 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20  y dangerous and 
edb0: 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67  may lead to prog
edc0: 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73  ram.  ** crashes
edd0: 20 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f 72   or database cor
ede0: 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74  ruption. Use wit
edf0: 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a  h caution!.  **.
ee00: 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65    ** The user-ve
ee10: 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65  rsion is not use
ee20: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20  d internally by 
ee30: 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62  SQLite. It may b
ee40: 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61  e used by.  ** a
ee50: 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20  pplications for 
ee60: 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a  any purpose..  *
ee70: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
ee80: 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b  _HEADER_VALUE: {
ee90: 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  .    int iCookie
eea0: 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67   = pPragma->iArg
eeb0: 3b 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6f 6b  ;  /* Which cook
eec0: 69 65 20 74 6f 20 72 65 61 64 20 6f 72 20 77 72  ie to read or wr
eed0: 69 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ite */.    sqlit
eee0: 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28  e3VdbeUsesBtree(
eef0: 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28  v, iDb);.    if(
ef00: 20 7a 52 69 67 68 74 20 26 26 20 28 70 50 72 61   zRight && (pPra
ef10: 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26  gma->mPragFlag &
ef20: 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64 4f 6e   PragFlag_ReadOn
ef30: 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ly)==0 ){.      
ef40: 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73 70 65  /* Write the spe
ef50: 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61  cified cookie va
ef60: 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  lue */.      sta
ef70: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
ef80: 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d  List setCookie[]
ef90: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
efa0: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
efb0: 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
efc0: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
efd0: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
efe0: 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d        0,  1,  0}
eff0: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
f000: 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f       { OP_SetCoo
f010: 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c  kie,      0,  0,
f020: 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f    1},    /* 2 */
f030: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
f040: 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74  int addr = sqlit
f050: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
f060: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74  v, ArraySize(set
f070: 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b  Cookie), setCook
f080: 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  ie, 0);.      sq
f090: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
f0a0: 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b  1(v, addr, iDb);
f0b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f0c0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
f0d0: 64 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f  dr+1, sqlite3Ato
f0e0: 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
f0f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
f100: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP1(v, addr+2,
f110: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
f120: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32  ite3VdbeChangeP2
f130: 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f  (v, addr+2, iCoo
f140: 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  kie);.    }else{
f150: 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74  .      /* Read t
f160: 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f  he specified coo
f170: 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  kie value */.   
f180: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f190: 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43  VdbeOpList readC
f1a0: 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  ookie[] = {.    
f1b0: 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63      { OP_Transac
f1c0: 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c  tion,     0,  0,
f1d0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
f1e0: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
f1f0: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30  adCookie,      0
f200: 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
f210: 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   1 */.        { 
f220: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
f230: 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20      1,  1,  0}. 
f240: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
f250: 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33  t addr = sqlite3
f260: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
f270: 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43   ArraySize(readC
f280: 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b  ookie), readCook
f290: 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  ie, 0);.      sq
f2a0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
f2b0: 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b  1(v, addr, iDb);
f2c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f2d0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
f2e0: 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20  dr+1, iDb);.    
f2f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
f300: 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP3(v, addr+1,
f310: 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20   iCookie);.     
f320: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
f330: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
f340: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
f350: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
f360: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c  COLNAME_NAME, zL
f370: 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  eft, SQLITE_TRAN
f380: 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20  SIENT);.    }.  
f390: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
f3a0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
f3b0: 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f  _SCHEMA_VERSION_
f3c0: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
f3d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
f3e0: 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
f3f0: 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  AGS.  /*.  **   
f400: 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f  PRAGMA compile_o
f410: 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a  ptions.  **.  **
f420: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
f430: 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  s of all compile
f440: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73  -time options us
f450: 65 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64  ed in this build
f460: 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f  ,.  ** one optio
f470: 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a  n per row..  */.
f480: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
f490: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20  OMPILE_OPTIONS: 
f4a0: 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  {.    int i = 0;
f4b0: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
f4c0: 2a 7a 4f 70 74 3b 0a 20 20 20 20 70 50 61 72 73  *zOpt;.    pPars
f4d0: 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20  e->nMem = 1;.   
f4e0: 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d   setOneColumnNam
f4f0: 65 28 76 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70  e(v, "compile_op
f500: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 77 68 69 6c  tion");.    whil
f510: 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74  e( (zOpt = sqlit
f520: 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
f530: 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b  _get(i++))!=0 ){
f540: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f550: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
f560: 31 2c 20 7a 4f 70 74 29 3b 0a 20 20 20 20 20 20  1, zOpt);.      
f570: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f580: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
f590: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a  w, 1, 1);.    }.
f5a0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
f5b0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
f5c0: 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
f5d0: 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64  _DIAGS */..#ifnd
f5e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
f5f0: 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AL.  /*.  **   P
f600: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 77  RAGMA [schema.]w
f610: 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20  al_checkpoint = 
f620: 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73  passive|full|res
f630: 74 61 72 74 7c 74 72 75 6e 63 61 74 65 0a 20 20  tart|truncate.  
f640: 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69  **.  ** Checkpoi
f650: 6e 74 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  nt the database.
f660: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
f670: 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f  gTyp_WAL_CHECKPO
f680: 49 4e 54 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  INT: {.    stati
f690: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
f6a0: 43 6f 6c 5b 5d 20 3d 20 7b 20 22 62 75 73 79 22  Col[] = { "busy"
f6b0: 2c 20 22 6c 6f 67 22 2c 20 22 63 68 65 63 6b 70  , "log", "checkp
f6c0: 6f 69 6e 74 65 64 22 20 7d 3b 0a 20 20 20 20 69  ointed" };.    i
f6d0: 6e 74 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e  nt iBt = (pId2->
f6e0: 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58  z?iDb:SQLITE_MAX
f6f0: 5f 41 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20  _ATTACHED);.    
f700: 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49  int eMode = SQLI
f710: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
f720: 53 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a  SSIVE;.    if( z
f730: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
f740: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
f750: 70 28 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22  p(zRight, "full"
f760: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
f770: 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
f780: 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a  HECKPOINT_FULL;.
f790: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
f7a0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f7b0: 52 69 67 68 74 2c 20 22 72 65 73 74 61 72 74 22  Right, "restart"
f7c0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
f7d0: 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
f7e0: 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
f7f0: 54 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  T;.      }else i
f800: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
f810: 70 28 7a 52 69 67 68 74 2c 20 22 74 72 75 6e 63  p(zRight, "trunc
f820: 61 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ate")==0 ){.    
f830: 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
f840: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52  TE_CHECKPOINT_TR
f850: 55 4e 43 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a  UNCATE;.      }.
f860: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 41 6c 6c      }.    setAll
f870: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 33  ColumnNames(v, 3
f880: 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72  , azCol);  asser
f890: 74 28 20 33 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 3==ArraySize(
f8a0: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 70 50  azCol) );.    pP
f8b0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
f8c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f8d0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65 63  ddOp3(v, OP_Chec
f8e0: 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f  kpoint, iBt, eMo
f8f0: 64 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  de, 1);.    sqli
f900: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f910: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
f920: 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 3);.  }.  brea
f930: 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  k;..  /*.  **   
f940: 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63  PRAGMA wal_autoc
f950: 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20  heckpoint.  **  
f960: 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f   PRAGMA wal_auto
f970: 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20  checkpoint = N. 
f980: 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75   **.  ** Configu
f990: 72 65 20 61 20 64 61 74 61 62 61 73 65 20 63 6f  re a database co
f9a0: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f  nnection to auto
f9b0: 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b 70  matically checkp
f9c0: 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73 65 0a  oint a database.
f9d0: 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75 6d    ** after accum
f9e0: 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65 73  ulating N frames
f9f0: 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20   in the log. Or 
fa00: 71 75 65 72 79 20 66 6f 72 20 74 68 65 20 63 75  query for the cu
fa10: 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a  rrent value.  **
fa20: 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61   of N..  */.  ca
fa30: 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41  se PragTyp_WAL_A
fa40: 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b  UTOCHECKPOINT: {
fa50: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
fa60: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
fa70: 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f  _wal_autocheckpo
fa80: 69 6e 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41  int(db, sqlite3A
fa90: 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
faa0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
fab0: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 77 61 6c 5f  ngleInt(v, "wal_
fac0: 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c  autocheckpoint",
fad0: 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61   .       db->xWa
fae0: 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74  lCallback==sqlit
faf0: 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
fb00: 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53   ? .           S
fb10: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
fb20: 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20  (db->pWalArg) : 
fb30: 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
fb40: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
fb50: 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e  **  PRAGMA shrin
fb60: 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20  k_memory.  **.  
fb70: 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
fb80: 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35 2d 34 36  N-OF: R-23445-46
fb90: 31 30 39 20 54 68 69 73 20 70 72 61 67 6d 61 20  109 This pragma 
fba0: 63 61 75 73 65 73 20 74 68 65 20 64 61 74 61 62  causes the datab
fbb0: 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74  ase.  ** connect
fbc0: 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20 69 74 20  ion on which it 
fbd0: 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 66 72  is invoked to fr
fbe0: 65 65 20 75 70 20 61 73 20 6d 75 63 68 20 6d 65  ee up as much me
fbf0: 6d 6f 72 79 20 61 73 20 69 74 0a 20 20 2a 2a 20  mory as it.  ** 
fc00: 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69 6e 67 20  can, by calling 
fc10: 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61  sqlite3_db_relea
fc20: 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a 20 20 2a  se_memory()..  *
fc30: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
fc40: 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20  _SHRINK_MEMORY: 
fc50: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  {.    sqlite3_db
fc60: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
fc70: 64 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  db);.    break;.
fc80: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
fc90: 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d   PRAGMA busy_tim
fca0: 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  eout.  **   PRAG
fcb0: 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  MA busy_timeout 
fcc0: 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61  = N.  **.  ** Ca
fcd0: 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  ll sqlite3_busy_
fce0: 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20  timeout(db, N). 
fcf0: 20 52 65 74 75 72 6e 20 74 68 65 20 63 75 72 72   Return the curr
fd00: 65 6e 74 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  ent timeout valu
fd10: 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73  e.  ** if one is
fd20: 20 73 65 74 2e 20 20 49 66 20 6e 6f 20 62 75 73   set.  If no bus
fd30: 79 20 68 61 6e 64 6c 65 72 20 6f 72 20 61 20 64  y handler or a d
fd40: 69 66 66 65 72 65 6e 74 20 62 75 73 79 20 68 61  ifferent busy ha
fd50: 6e 64 6c 65 72 20 69 73 20 73 65 74 0a 20 20 2a  ndler is set.  *
fd60: 2a 20 74 68 65 6e 20 30 20 69 73 20 72 65 74 75  * then 0 is retu
fd70: 72 6e 65 64 2e 20 20 53 65 74 74 69 6e 67 20 74  rned.  Setting t
fd80: 68 65 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  he busy_timeout 
fd90: 74 6f 20 30 20 6f 72 20 6e 65 67 61 74 69 76 65  to 0 or negative
fda0: 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 73 20 74  .  ** disables t
fdb0: 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f  he timeout..  */
fdc0: 0a 20 20 2f 2a 63 61 73 65 20 50 72 61 67 54 79  .  /*case PragTy
fdd0: 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f  p_BUSY_TIMEOUT*/
fde0: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
fdf0: 61 73 73 65 72 74 28 20 70 50 72 61 67 6d 61 2d  assert( pPragma-
fe00: 3e 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67 54  >ePragTyp==PragT
fe10: 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 20  yp_BUSY_TIMEOUT 
fe20: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
fe30: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
fe40: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
fe50: 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28  db, sqlite3Atoi(
fe60: 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a  zRight));.    }.
fe70: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
fe80: 49 6e 74 28 76 2c 20 22 74 69 6d 65 6f 75 74 22  Int(v, "timeout"
fe90: 2c 20 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f  ,  db->busyTimeo
fea0: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
feb0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
fec0: 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61   PRAGMA soft_hea
fed0: 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 20 50  p_limit.  **   P
fee0: 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f  RAGMA soft_heap_
fef0: 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  limit = N.  **. 
ff00: 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
ff10: 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33 34 33 2d 34  ON-OF: R-26343-4
ff20: 35 39 33 30 20 54 68 69 73 20 70 72 61 67 6d 61  5930 This pragma
ff30: 20 69 6e 76 6f 6b 65 73 20 74 68 65 0a 20 20 2a   invokes the.  *
ff40: 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68  * sqlite3_soft_h
ff50: 65 61 70 5f 6c 69 6d 69 74 36 34 28 29 20 69 6e  eap_limit64() in
ff60: 74 65 72 66 61 63 65 20 77 69 74 68 20 74 68 65  terface with the
ff70: 20 61 72 67 75 6d 65 6e 74 20 4e 2c 20 69 66 20   argument N, if 
ff80: 4e 20 69 73 0a 20 20 2a 2a 20 73 70 65 63 69 66  N is.  ** specif
ff90: 69 65 64 20 61 6e 64 20 69 73 20 61 20 6e 6f 6e  ied and is a non
ffa0: 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
ffb0: 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  r..  ** IMPLEMEN
ffc0: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 36 34 34  TATION-OF: R-644
ffd0: 35 31 2d 30 37 31 36 33 20 54 68 65 20 73 6f 66  51-07163 The sof
ffe0: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 70 72 61  t_heap_limit pra
fff0: 67 6d 61 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20  gma always.  ** 
10000 72 65 74 75 72 6e 73 20 74 68 65 20 73 61 6d 65  returns the same
10010 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 77 6f   integer that wo
10020 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20  uld be returned 
10030 62 79 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  by the.  ** sqli
10040 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
10050 6d 69 74 36 34 28 2d 31 29 20 43 2d 6c 61 6e 67  mit64(-1) C-lang
10060 75 61 67 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  uage function.. 
10070 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
10080 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d  yp_SOFT_HEAP_LIM
10090 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  IT: {.    sqlite
100a0 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69  3_int64 N;.    i
100b0 66 28 20 7a 52 69 67 68 74 20 26 26 20 73 71 6c  f( zRight && sql
100c0 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
100d0 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53  4(zRight, &N)==S
100e0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
100f0 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
10100 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a  eap_limit64(N);.
10110 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
10120 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 73 6f  SingleInt(v, "so
10130 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20  ft_heap_limit", 
10140 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
10150 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b  ap_limit64(-1));
10160 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
10170 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
10180 47 4d 41 20 74 68 72 65 61 64 73 0a 20 20 2a 2a  GMA threads.  **
10190 20 20 20 50 52 41 47 4d 41 20 74 68 72 65 61 64     PRAGMA thread
101a0 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  s = N.  **.  ** 
101b0 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 6d 61  Configure the ma
101c0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
101d0 77 6f 72 6b 65 72 20 74 68 72 65 61 64 73 2e 20  worker threads. 
101e0 20 52 65 74 75 72 6e 20 74 68 65 20 6e 65 77 0a   Return the new.
101f0 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68    ** maximum, wh
10200 69 63 68 20 6d 69 67 68 74 20 62 65 20 6c 65 73  ich might be les
10210 73 20 74 68 61 6e 20 72 65 71 75 65 73 74 65 64  s than requested
10220 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
10230 61 67 54 79 70 5f 54 48 52 45 41 44 53 3a 20 7b  agTyp_THREADS: {
10240 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  .    sqlite3_int
10250 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52  64 N;.    if( zR
10260 69 67 68 74 0a 20 20 20 20 20 26 26 20 73 71 6c  ight.     && sql
10270 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
10280 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53  4(zRight, &N)==S
10290 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26  QLITE_OK.     &&
102a0 20 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20   N>=0.    ){.   
102b0 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
102c0 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49  (db, SQLITE_LIMI
102d0 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
102e0 2c 20 28 69 6e 74 29 28 4e 26 30 78 37 66 66 66  , (int)(N&0x7fff
102f0 66 66 66 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ffff));.    }.  
10300 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
10310 74 28 76 2c 20 22 74 68 72 65 61 64 73 22 2c 0a  t(v, "threads",.
10320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10330 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
10340 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d  t(db, SQLITE_LIM
10350 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
10360 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62 72 65  S, -1));.    bre
10370 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66  ak;.  }..#if def
10380 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
10390 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
103a0 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a  LITE_TEST).  /*.
103b0 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20    ** Report the 
103c0 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66  current state of
103d0 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61   file logs for a
103e0 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a  ll databases.  *
103f0 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
10400 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a  _LOCK_STATUS: {.
10410 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
10420 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c   char *const azL
10430 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20  ockName[] = {.  
10440 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20      "unlocked", 
10450 22 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72  "shared", "reser
10460 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c  ved", "pending",
10470 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20   "exclusive".   
10480 20 7d 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63   };.    static c
10490 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
104a0 5b 5d 20 3d 20 7b 20 22 64 61 74 61 62 61 73 65  [] = { "database
104b0 22 2c 20 22 73 74 61 74 75 73 22 20 7d 3b 0a 20  ", "status" };. 
104c0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 65     int i;.    se
104d0 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
104e0 76 2c 20 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73  v, 2, azCol); as
104f0 73 65 72 74 28 20 32 3d 3d 41 72 72 61 79 53 69  sert( 2==ArraySi
10500 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
10510 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
10520 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  2;.    for(i=0; 
10530 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
10540 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a 70 42  .      Btree *pB
10550 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  t;.      const c
10560 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75  har *zState = "u
10570 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69  nknown";.      i
10580 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20  nt j;.      if( 
10590 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
105a0 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
105b0 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e        pBt = db->
105c0 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20  aDb[i].pBt;.    
105d0 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20    if( pBt==0 || 
105e0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
105f0 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20  r(pBt)==0 ){.   
10600 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63       zState = "c
10610 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65  losed";.      }e
10620 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f  lse if( sqlite3_
10630 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
10640 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   i ? db->aDb[i].
10650 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20  zName : 0, .    
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10680 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f   SQLITE_FCNTL_LO
10690 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51  CKSTATE, &j)==SQ
106a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
106b0 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c      zState = azL
106c0 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20  ockName[j];.    
106d0 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
106e0 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
106f0 2c 20 31 2c 20 22 73 73 22 2c 20 64 62 2d 3e 61  , 1, "ss", db->a
10700 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 53 74  Db[i].zName, zSt
10710 61 74 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ate);.      sqli
10720 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10730 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
10740 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 2);.    }.    
10750 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
10760 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
10770 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73  _HAS_CODEC.  cas
10780 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b  e PragTyp_KEY: {
10790 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
107a0 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32  ) sqlite3_key_v2
107b0 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74  (db, zDb, zRight
107c0 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  , sqlite3Strlen3
107d0 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  0(zRight));.    
107e0 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73  break;.  }.  cas
107f0 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a  e PragTyp_REKEY:
10800 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
10810 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65  t ) sqlite3_reke
10820 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52  y_v2(db, zDb, zR
10830 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72  ight, sqlite3Str
10840 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a  len30(zRight));.
10850 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
10860 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45   case PragTyp_HE
10870 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  XKEY: {.    if( 
10880 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
10890 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20  u8 iByte;.      
108a0 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61  int i;.      cha
108b0 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20  r zKey[40];.    
108c0 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65    for(i=0, iByte
108d0 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65  =0; i<sizeof(zKe
108e0 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49  y)*2 && sqlite3I
108f0 73 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69  sxdigit(zRight[i
10900 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ]); i++){.      
10910 20 20 69 42 79 74 65 20 3d 20 28 69 42 79 74 65    iByte = (iByte
10920 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65  <<4) + sqlite3He
10930 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d  xToInt(zRight[i]
10940 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
10950 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69  i&1)!=0 ) zKey[i
10960 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20  /2] = iByte;.   
10970 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
10980 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d  zLeft[3] & 0xf)=
10990 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20  =0xb ){.        
109a0 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64  sqlite3_key_v2(d
109b0 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f  b, zDb, zKey, i/
109c0 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  2);.      }else{
109d0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
109e0 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  _rekey_v2(db, zD
109f0 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20  b, zKey, i/2);. 
10a00 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
10a10 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
10a20 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
10a30 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29  QLITE_HAS_CODEC)
10a40 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
10a50 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29  TE_ENABLE_CEROD)
10a60 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10a70 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49  ACTIVATE_EXTENSI
10a80 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20  ONS: if( zRight 
10a90 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ){.#ifdef SQLITE
10aa0 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69  _HAS_CODEC.    i
10ab0 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
10ac0 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d  mp(zRight, "see-
10ad0 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", 4)==0 ){.    
10ae0 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61    sqlite3_activa
10af0 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34  te_see(&zRight[4
10b00 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
10b10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
10b20 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20  NABLE_CEROD.    
10b30 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
10b40 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72  Cmp(zRight, "cer
10b50 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20  od-", 6)==0 ){. 
10b60 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74       sqlite3_act
10b70 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69  ivate_cerod(&zRi
10b80 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23  ght[6]);.    }.#
10b90 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
10ba0 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f  k;.#endif..  } /
10bb0 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41  * End of the PRA
10bc0 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70  GMA switch */..p
10bd0 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c  ragma_out:.  sql
10be0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
10bf0 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33  Left);.  sqlite3
10c00 44 62 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68  DbFree(db, zRigh
10c10 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  t);.}..#endif /*
10c20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
10c30 47 4d 41 20 2a 2f 0a                             GMA */.