/ Hex Artifact Content
Login

Artifact ea0be138a99784b14e87bd4522fea40e7b979e9c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20  or ON or NORMAL 
04c0: 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20  and 2 for FULL. 
04d0: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e   Return 1 for an
04e0: 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e   empty or .** un
04f0: 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e  recognized strin
0500: 67 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65  g argument.  The
0510: 20 46 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20   FULL option is 
0520: 64 69 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66  disallowed.** if
0530: 20 74 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61   the omitFull pa
0540: 72 61 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a  rameter it 1..**
0550: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
0560: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
0570: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
0580: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
0590: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
05a0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
05b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
05c0: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
05d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
05e0: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
05f0: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
0600: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
0610: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
0620: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
0630: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
0640: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
0650: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
0660: 2f 0a 73 74 61 74 69 63 20 75 38 20 67 65 74 53  /.static u8 getS
0670: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
0680: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d   char *z, int om
0690: 69 74 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29  itFull, u8 dflt)
06a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
06c0: 2a 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34  * 123456789 1234
06d0: 35 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69  56789 */.  stati
06e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65  c const char zTe
06f0: 78 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73  xt[] = "onoffals
0700: 65 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20  eyestruefull";. 
0710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0720: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0730: 20 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c   1, 2, 4, 9, 12,
0740: 20 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63   16};.  static c
0750: 6f 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b  onst u8 iLength[
0760: 5d 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c  ] = {2, 2, 3, 5,
0770: 20 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61   3, 4, 4};.  sta
0780: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61  tic const u8 iVa
0790: 6c 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20  lue[] =  {1, 0, 
07a0: 30 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a  0, 0, 1, 1, 2};.
07b0: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66    int i, n;.  if
07c0: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
07d0: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
07e0: 72 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74  rn (u8)sqlite3At
07f0: 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  oi(z);.  }.  n =
0800: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
0810: 28 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  (z);.  for(i=0; 
0820: 69 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e  i<ArraySize(iLen
0830: 67 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69  gth)-omitFull; i
0840: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65  ++){.    if( iLe
0850: 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71  ngth[i]==n && sq
0860: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a  lite3StrNICmp(&z
0870: 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d  Text[iOffset[i]]
0880: 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ,z,n)==0 ){.    
0890: 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b    return iValue[
08a0: 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  i];.    }.  }.  
08b0: 72 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a  return dflt;.}..
08c0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
08d0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
08e0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
08f0: 6c 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74  lue..*/.u8 sqlit
0900: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
0910: 73 74 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64  st char *z, u8 d
0920: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
0930: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
0940: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
0950: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
0960: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
0970: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
0980: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
0990: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
09a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
09b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
09c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
09d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
09e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
09f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
0a00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
0a10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
0a20: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0a30: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
0a40: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0a50: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0a60: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
0a70: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
0a80: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
0a90: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
0aa0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
0ab0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0ac0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
0ad0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
0ae0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
0af0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
0b00: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0b10: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
0b20: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
0b30: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0b40: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
0b50: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
0b60: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
0b70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
0b80: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0b90: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
0ba0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
0bb0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
0bc0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
0bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
0be0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
0bf0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
0c00: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
0c10: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
0c20: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
0c30: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
0c40: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
0c50: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
0c60: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
0c70: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
0c80: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
0c90: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0ca0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
0cb0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
0cc0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
0cd0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
0ce0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0cf0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
0d00: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
0d10: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
0d20: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
0d30: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
0d40: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d50: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
0d60: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
0d70: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
0d80: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
0d90: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
0da0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
0db0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
0dc0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
0dd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
0de0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
0df0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
0e00: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
0e10: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
0e20: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
0e30: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
0e40: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
0e50: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
0e60: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
0e70: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
0e80: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
0e90: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
0ea0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
0eb0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
0ec0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
0ed0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
0ee0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
0ef0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
0f00: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
0f10: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
0f20: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
0f30: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
0f40: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
0f50: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
0f60: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
0f70: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
0f80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
0f90: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
0fa0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
0fb0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
0fc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
0fd0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
0fe0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
0ff0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
1000: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
1010: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
1020: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
1030: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
1040: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
1050: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1060: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
1070: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
1080: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
1090: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
10a0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
10b0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
10c0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
10d0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
10e0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
10f0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
1100: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
1110: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
1120: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
1130: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
1140: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
1150: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
1160: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
1170: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
1180: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
1190: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11a0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
11b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
11c0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
11d0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
11e0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
11f0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1200: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1210: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
1220: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1230: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
1240: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
1250: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
1260: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1270: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
1280: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
1290: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
12a0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
12b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12c0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
12d0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
12e0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
12f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
1300: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
1310: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
1320: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
1330: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
1340: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
1350: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
1360: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
1370: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
1380: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
1390: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
13a0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
13b0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
13c0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
13d0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
13e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
13f0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
1400: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
1410: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
1420: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
1430: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1440: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
1450: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
1460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1470: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
1480: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
1490: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72   */../*.** Gener
14a0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
14b0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
14c0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
14d0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
14e0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
14f0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
1500: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
1510: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
1520: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
1530: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
1540: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
1550: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
1560: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
1570: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
1580: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
1590: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
15a0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
15b0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
15c0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
15d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
15e0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
15f0: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
1600: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
1610: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
1620: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
1630: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
1640: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
1650: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
1660: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
1670: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
1680: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
1690: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
16a0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
16b0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
16c0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
16d0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
16e0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
16f0: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
1700: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
1710: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
1720: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1730: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
1740: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
1750: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
1760: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
1770: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
1780: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
1790: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
17a0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
17b0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
17c0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
17d0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
17e0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
17f0: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
1800: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
1810: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1820: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
1830: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
1840: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
1850: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
1860: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
1870: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
1880: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
1890: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
18a0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
18b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
18c0: 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  (pDb->safety_lev
18d0: 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48  el & PAGER_SYNCH
18e0: 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44  RONOUS_MASK)==pD
18f0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
1900: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e  );.    while( (n
1910: 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20  --) > 0 ){.     
1920: 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b   if( pDb->pBt ){
1930: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1940: 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c 61  BtreeSetPagerFla
1950: 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20  gs(pDb->pBt,.   
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
1970: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
1980: 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50  | (db->flags & P
1990: 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29  AGER_FLAGS_MASK)
19a0: 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   );.      }.    
19b0: 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20    pDb++;.    }. 
19c0: 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66   }.}.#else.# def
19d0: 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46  ine setAllPagerF
19e0: 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f  lags(X)  /* no-o
19f0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  p */.#endif.../*
1a00: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d  .** Return a hum
1a10: 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65  an-readable name
1a20: 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e   for a constrain
1a30: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74  t resolution act
1a40: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ion..*/.#ifndef 
1a50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
1a60: 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63  IGN_KEY.static c
1a70: 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f  onst char *actio
1a80: 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29  nName(u8 action)
1a90: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1aa0: 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28  zName;.  switch(
1ab0: 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63   action ){.    c
1ac0: 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20  ase OE_SetNull: 
1ad0: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55   zName = "SET NU
1ae0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  LL";        brea
1af0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  k;.    case OE_S
1b00: 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d  etDflt:  zName =
1b10: 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20   "SET DEFAULT"; 
1b20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
1b30: 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20  ase OE_Cascade: 
1b40: 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44   zName = "CASCAD
1b50: 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  E";         brea
1b60: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52  k;.    case OE_R
1b70: 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d  estrict: zName =
1b80: 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20   "RESTRICT";    
1b90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
1ba0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
1bb0: 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54   zName = "NO ACT
1bc0: 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20  ION";  .        
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
1be0: 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45  sert( action==OE
1bf0: 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a  _None ); break;.
1c00: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61    }.  return zNa
1c10: 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  me;.}.#endif.../
1c20: 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65  *.** Parameter e
1c30: 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65  Mode must be one
1c40: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
1c50: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f  URNALMODE_XXX co
1c60: 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e  nstants.** defin
1c70: 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54  ed in pager.h. T
1c80: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
1c90: 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61  urns the associa
1ca0: 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a  ted lowercase.**
1cb0: 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61   journal-mode na
1cc0: 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  me..*/.const cha
1cd0: 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
1ce0: 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d  lModename(int eM
1cf0: 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63  ode){.  static c
1d00: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f  har * const azMo
1d10: 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  deName[] = {.   
1d20: 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73   "delete", "pers
1d30: 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72  ist", "off", "tr
1d40: 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79  uncate", "memory
1d50: 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
1d60: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c  _OMIT_WAL.     ,
1d70: 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20   "wal".#endif.  
1d80: 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  };.  assert( PAG
1d90: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
1da0: 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73  ELETE==0 );.  as
1db0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
1dc0: 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d  NALMODE_PERSIST=
1dd0: 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
1de0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
1df0: 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73  E_OFF==2 );.  as
1e00: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
1e10: 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
1e20: 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==3 );.  assert(
1e30: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
1e40: 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a  DE_MEMORY==4 );.
1e50: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
1e60: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d  JOURNALMODE_WAL=
1e70: 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =5 );.  assert( 
1e80: 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64  eMode>=0 && eMod
1e90: 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d  e<=ArraySize(azM
1ea0: 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69  odeName) );..  i
1eb0: 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53  f( eMode==ArrayS
1ec0: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
1ed0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
1ee0: 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b  turn azModeName[
1ef0: 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  eMode];.}../*.**
1f00: 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d   Process a pragm
1f10: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a  a statement.  .*
1f20: 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65  *.** Pragmas are
1f30: 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a   of this form:.*
1f40: 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41  *.**      PRAGMA
1f50: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b   [database.]id [
1f60: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
1f70: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
1f80: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
1f90: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
1fa0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
1fb0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
1fc0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
1fd0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
1fe0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
1ff0: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
2000: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
2010: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
2020: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
2030: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
2040: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
2050: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
2060: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
2070: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
2080: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
2090: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
20a0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
20b0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
20c0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
20d0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
20e0: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
20f0: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
2100: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
2110: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
2120: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
2130: 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20  e.]id field */. 
2140: 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20   Token *pId2,   
2150: 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70       /* Second p
2160: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
2170: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
2180: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
2190: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
21a0: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
21b0: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
21c0: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
21d0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
21e0: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
21f0: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
2200: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
2210: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
2220: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
2230: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
2240: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
2250: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
2260: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
2270: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
2280: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
2290: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
22a0: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
22b0: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
22c0: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
22d0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
22e0: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
22f0: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
2300: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
2310: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
2320: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
2330: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
2340: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
2350: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
2360: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
2370: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
2380: 69 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a  id = 0;       /*
2390: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
23a0: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
23b0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
23c0: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
23d0: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
23e0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
23f0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
2400: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
2410: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
2420: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
2430: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2450: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
2460: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
2470: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
2480: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
2490: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
24a0: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
24b0: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
24c0: 20 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e   struct sPragmaN
24d0: 61 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a  ames *pPragma;..
24e0: 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74    if( v==0 ) ret
24f0: 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  urn;.  sqlite3Vd
2500: 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29  beRunOnlyOnce(v)
2510: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  ;.  pParse->nMem
2520: 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65   = 2;..  /* Inte
2530: 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62  rpret the [datab
2540: 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68  ase.] part of th
2550: 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  e pragma stateme
2560: 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20  nt. iDb is the. 
2570: 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ** index of the
2580: 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70   database this p
2590: 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61  ragma is being a
25a0: 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e  pplied to in db.
25b0: 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20  aDb[]. */.  iDb 
25c0: 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  = sqlite3TwoPart
25d0: 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64  Name(pParse, pId
25e0: 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a  1, pId2, &pId);.
25f0: 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65    if( iDb<0 ) re
2600: 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64  turn;.  pDb = &d
2610: 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20  b->aDb[iDb];..  
2620: 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64  /* If the temp d
2630: 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e  atabase has been
2640: 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65   explicitly name
2650: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
2660: 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d   .  ** pragma, m
2670: 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f  ake sure it is o
2680: 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28  pen. .  */.  if(
2690: 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74   iDb==1 && sqlit
26a0: 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
26b0: 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  se(pParse) ){.  
26c0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
26d0: 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33   zLeft = sqlite3
26e0: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
26f0: 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a  , pId);.  if( !z
2700: 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20  Left ) return;. 
2710: 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29   if( minusFlag )
2720: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
2730: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2740: 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29  , "-%T", pValue)
2750: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  ;.  }else{.    z
2760: 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e  Right = sqlite3N
2770: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
2780: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20   pValue);.  }.. 
2790: 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b   assert( pId2 );
27a0: 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e  .  zDb = pId2->n
27b0: 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20  >0 ? pDb->zName 
27c0: 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  : 0;.  if( sqlit
27d0: 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72  e3AuthCheck(pPar
27e0: 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d  se, SQLITE_PRAGM
27f0: 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  A, zLeft, zRight
2800: 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f  , zDb) ){.    go
2810: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2820: 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e   }..  /* Send an
2830: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2840: 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f  AGMA file-contro
2850: 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  l to the underly
2860: 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e  ing VFS.  ** con
2870: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20  nection.  If it 
2880: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
2890: 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74  K, then assume t
28a0: 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a  hat the VFS.  **
28b0: 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61   handled the pra
28c0: 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65  gma and generate
28d0: 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65   a no-op prepare
28e0: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a  d statement..  *
28f0: 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d 20  /.  aFcntl[0] = 
2900: 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20 3d  0;.  aFcntl[1] =
2910: 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74 6c   zLeft;.  aFcntl
2920: 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20  [2] = zRight;.  
2930: 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a 20  aFcntl[3] = 0;. 
2940: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
2950: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 63  .nBusy = 0;.  rc
2960: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f   = sqlite3_file_
2970: 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c  control(db, zDb,
2980: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2990: 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46 63  AGMA, (void*)aFc
29a0: 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ntl);.  if( rc==
29b0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
29c0: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
29d0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65 6d 20  {.      int mem 
29e0: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
29f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
2a00: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
2a10: 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65 6d 2c  String8, 0, mem,
2a20: 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20 30   0, aFcntl[0], 0
2a30: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2a40: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
2a50: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
2a60: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
2a70: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
2a80: 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22 2c 20  NAME, "result", 
2a90: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
2aa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2ab0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
2ac0: 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31 29  sultRow, mem, 1)
2ad0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
2ae0: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
2af0: 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
2b00: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2b10: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2b20: 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20  _NOTFOUND ){.   
2b30: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
2b40: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
2b50: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
2b60: 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29  "%s", aFcntl[0])
2b70: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
2b80: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
2b90: 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72 73  .    }.    pPars
2ba0: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70  e->nErr++;.    p
2bb0: 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a  Parse->rc = rc;.
2bc0: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
2bd0: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c  out;.  }..  /* L
2be0: 6f 63 61 74 65 20 74 68 65 20 70 72 61 67 6d 61  ocate the pragma
2bf0: 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20 74   in the lookup t
2c00: 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d 20  able */.  lwr = 
2c10: 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61 79  0;.  upr = Array
2c20: 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d 65  Size(aPragmaName
2c30: 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20 6c  s)-1;.  while( l
2c40: 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20 6d  wr<=upr ){.    m
2c50: 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f 32  id = (lwr+upr)/2
2c60: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2c70: 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66 74  e3_stricmp(zLeft
2c80: 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  , aPragmaNames[m
2c90: 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  id].zName);.    
2ca0: 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65 61  if( rc==0 ) brea
2cb0: 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30 20  k;.    if( rc<0 
2cc0: 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20 6d  ){.      upr = m
2cd0: 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  id - 1;.    }els
2ce0: 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20 6d  e{.      lwr = m
2cf0: 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20  id + 1;.    }.  
2d00: 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72 20  }.  if( lwr>upr 
2d10: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
2d20: 74 3b 0a 20 20 70 50 72 61 67 6d 61 20 3d 20 26  t;.  pPragma = &
2d30: 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64  aPragmaNames[mid
2d40: 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ];..  /* Make su
2d50: 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
2d60: 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64  schema is loaded
2d70: 20 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 72   if the pragma r
2d80: 65 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f 0a  equires that */.
2d90: 20 20 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e    if( (pPragma->
2da0: 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67  mPragFlag & Prag
2db0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29  Flag_NeedSchema)
2dc0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  !=0 ){.    if( s
2dd0: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
2de0: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
2df0: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2e00: 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68  .  /* Jump to th
2e10: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72  e appropriate pr
2e20: 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a  agma handler */.
2e30: 20 20 73 77 69 74 63 68 28 20 70 50 72 61 67 6d    switch( pPragm
2e40: 61 2d 3e 65 50 72 61 67 54 79 70 20 29 7b 0a 20  a->ePragTyp ){. 
2e50: 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53   .#if !defined(S
2e60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
2e70: 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64 65  _PRAGMAS) && !de
2e80: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2e90: 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20 20  T_DEPRECATED).  
2ea0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
2eb0: 5b 64 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75  [database.]defau
2ec0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20 20  lt_cache_size.  
2ed0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
2ee0: 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61  base.]default_ca
2ef0: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
2f00: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
2f10: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
2f20: 63 75 72 72 65 6e 74 20 70 65 72 73 69 73 74 65  current persiste
2f30: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
2f40: 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  he.  ** page cac
2f50: 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61  he size.  The va
2f60: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  lue returned is 
2f70: 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
2f80: 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73  er of.  ** pages
2f90: 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63   in the page cac
2fa0: 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20  he.  The second 
2fb0: 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74  form sets both t
2fc0: 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20  he current.  ** 
2fd0: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20  page cache size 
2fe0: 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65  value and the pe
2ff0: 72 73 69 73 74 65 6e 74 20 70 61 67 65 20 63 61  rsistent page ca
3000: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20  che size value. 
3010: 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68   ** stored in th
3020: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
3030: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72  .  **.  ** Older
3040: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
3050: 69 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68  ite would set th
3060: 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 20  e default cache 
3070: 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e  size to a.  ** n
3080: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74  egative number t
3090: 6f 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68  o indicate synch
30a0: 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65  ronous=OFF.  The
30b0: 73 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f  se days, synchro
30c0: 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77  nous.  ** is alw
30d0: 61 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c  ays on by defaul
30e0: 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  t regardless of 
30f0: 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20  the sign of the 
3100: 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20  default cache.  
3110: 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f  ** size.  But co
3120: 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74  ntinue to take t
3130: 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75  he absolute valu
3140: 65 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  e of the default
3150: 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65   cache.  ** size
3160: 20 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63   of historical c
3170: 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20  ompatibility..  
3180: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
3190: 70 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  p_DEFAULT_CACHE_
31a0: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74  SIZE: {.    stat
31b0: 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e  ic const int iLn
31c0: 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c   = VDBE_OFFSET_L
31d0: 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74  INENO(2);.    st
31e0: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
31f0: 70 4c 69 73 74 20 67 65 74 43 61 63 68 65 53 69  pList getCacheSi
3200: 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  ze[] = {.      {
3210: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
3220: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
3230: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
3240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a            /* 0 *
3250: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61  /.      { OP_Rea
3260: 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20  dCookie,  0, 1, 
3270: 20 20 20 20 20 20 20 42 54 52 45 45 5f 44 45 46         BTREE_DEF
3280: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d  AULT_CACHE_SIZE}
3290: 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20  ,  /* 1 */.     
32a0: 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20   { OP_IfPos,    
32b0: 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20     1, 8,        
32c0: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  0},.      { OP_I
32d0: 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32  nteger,     0, 2
32e0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
32f0: 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74     { OP_Subtract
3300: 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20  ,    1, 2,      
3310: 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    1},.      { OP
3320: 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c  _IfPos,       1,
3330: 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   8,        0},. 
3340: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
3350: 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20  r,     0, 1,    
3360: 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20      0},         
3370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3380: 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 6 */.      { 
3390: 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20  OP_Noop,        
33a0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
33b0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75  .      { OP_Resu
33c0: 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20  ltRow,   1, 1,  
33d0: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b        0},.    };
33e0: 0a 20 20 20 20 69 6e 74 20 61 64 64 72 3b 0a 20  .    int addr;. 
33f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
3400: 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b  esBtree(v, iDb);
3410: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
3420: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
3430: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
3440: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
3450: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
3460: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
3470: 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65 5f 73 69  _NAME, "cache_si
3480: 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ze", SQLITE_STAT
3490: 49 43 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73  IC);.      pPars
34a0: 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20  e->nMem += 2;.  
34b0: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
34c0: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
34d0: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74  v, ArraySize(get
34e0: 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43  CacheSize), getC
34f0: 61 63 68 65 53 69 7a 65 2c 69 4c 6e 29 3b 0a 20  acheSize,iLn);. 
3500: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3510: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
3520: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
3530: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
3540: 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 44 62  1(v, addr+1, iDb
3550: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3560: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
3570: 61 64 64 72 2b 36 2c 20 53 51 4c 49 54 45 5f 44  addr+6, SQLITE_D
3580: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
3590: 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  E);.    }else{. 
35a0: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
35b0: 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
35c0: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
35d0: 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ht));.      sqli
35e0: 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
35f0: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30  ration(pParse, 0
3600: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
3610: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
3620: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 73  v, OP_Integer, s
3630: 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  ize, 1);.      s
3640: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
3650: 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  (v, OP_SetCookie
3660: 2c 20 69 44 62 2c 20 42 54 52 45 45 5f 44 45 46  , iDb, BTREE_DEF
3670: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 2c  AULT_CACHE_SIZE,
3680: 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72   1);.      asser
3690: 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
36a0: 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
36b0: 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70  b, 0) );.      p
36c0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
36d0: 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a  he_size = size;.
36e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
36f0: 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28 70  eeSetCacheSize(p
3700: 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53  Db->pBt, pDb->pS
3710: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
3720: 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  e);.    }.    br
3730: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
3740: 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  /* !SQLITE_OMIT_
3750: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 26 26  PAGER_PRAGMAS &&
3760: 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45   !SQLITE_OMIT_DE
3770: 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 23 69 66  PRECATED */..#if
3780: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3790: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
37a0: 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  MAS).  /*.  **  
37b0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
37c0: 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20 20 2a 2a  .]page_size.  **
37d0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
37e0: 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 3d 4e 0a  se.]page_size=N.
37f0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69    **.  ** The fi
3800: 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73  rst form reports
3810: 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74   the current set
3820: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
3830: 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  * database page 
3840: 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e 20 20  size in bytes.  
3850: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
3860: 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20 64 61  sets the.  ** da
3870: 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
3880: 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76 61 6c   value.  The val
3890: 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 73  ue can only be s
38a0: 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65 20 64  et if.  ** the d
38b0: 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
38c0: 79 65 74 20 62 65 65 6e 20 63 72 65 61 74 65 64  yet been created
38d0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
38e0: 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a 45 3a  agTyp_PAGE_SIZE:
38f0: 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42   {.    Btree *pB
3900: 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  t = pDb->pBt;.  
3910: 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30    assert( pBt!=0
3920: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
3930: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ght ){.      int
3940: 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53 28 70   size = ALWAYS(p
3950: 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42 74 72  Bt) ? sqlite3Btr
3960: 65 65 47 65 74 50 61 67 65 53 69 7a 65 28 70 42  eeGetPageSize(pB
3970: 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20 72 65  t) : 0;.      re
3980: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
3990: 61 72 73 65 2c 20 22 70 61 67 65 5f 73 69 7a 65  arse, "page_size
39a0: 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  ", size);.    }e
39b0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  lse{.      /* Ma
39c0: 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20 77 68  lloc may fail wh
39d0: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 70  en setting the p
39e0: 61 67 65 2d 73 69 7a 65 2c 20 61 73 20 74 68 65  age-size, as the
39f0: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61  re is an interna
3a00: 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65  l.      ** buffe
3a10: 72 20 74 68 61 74 20 74 68 65 20 70 61 67 65 72  r that the pager
3a20: 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65 73 20   module resizes 
3a30: 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 72 65  using sqlite3_re
3a40: 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a  alloc()..      *
3a50: 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74  /.      db->next
3a60: 50 61 67 65 73 69 7a 65 20 3d 20 73 71 6c 69 74  Pagesize = sqlit
3a70: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
3a80: 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
3a90: 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42  _NOMEM==sqlite3B
3aa0: 74 72 65 65 53 65 74 50 61 67 65 53 69 7a 65 28  treeSetPageSize(
3ab0: 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67  pBt, db->nextPag
3ac0: 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20  esize,-1,0) ){. 
3ad0: 20 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f         db->mallo
3ae0: 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
3af0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
3b00: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
3b10: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
3b20: 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64  tabase.]secure_d
3b30: 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47  elete.  **  PRAG
3b40: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65  MA [database.]se
3b50: 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f  cure_delete=ON/O
3b60: 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  FF.  **.  ** The
3b70: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
3b80: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
3b90: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
3ba0: 20 20 2a 2a 20 73 65 63 75 72 65 5f 64 65 6c 65    ** secure_dele
3bb0: 74 65 20 66 6c 61 67 2e 20 20 54 68 65 20 73 65  te flag.  The se
3bc0: 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67 65  cond form change
3bd0: 73 20 74 68 65 20 73 65 63 75 72 65 5f 64 65 6c  s the secure_del
3be0: 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67 20 73 65  ete.  ** flag se
3bf0: 74 74 69 6e 67 20 61 6e 64 20 72 65 70 6f 72 74  tting and report
3c00: 73 20 74 68 65 6e 65 77 20 76 61 6c 75 65 2e 0a  s thenew value..
3c10: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
3c20: 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54  Typ_SECURE_DELET
3c30: 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  E: {.    Btree *
3c40: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
3c50: 20 20 20 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a      int b = -1;.
3c60: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
3c70: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  =0 );.    if( zR
3c80: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 62 20  ight ){.      b 
3c90: 3d 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  = sqlite3GetBool
3ca0: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 3b 0a  ean(zRight, 0);.
3cb0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49      }.    if( pI
3cc0: 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d 30  d2->n==0 && b>=0
3cd0: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
3ce0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30  ;.      for(ii=0
3cf0: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
3d00: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
3d10: 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65 44  ite3BtreeSecureD
3d20: 65 6c 65 74 65 28 64 62 2d 3e 61 44 62 5b 69 69  elete(db->aDb[ii
3d30: 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 20  ].pBt, b);.     
3d40: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 20 3d   }.    }.    b =
3d50: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63   sqlite3BtreeSec
3d60: 75 72 65 44 65 6c 65 74 65 28 70 42 74 2c 20 62  ureDelete(pBt, b
3d70: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e  );.    returnSin
3d80: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
3d90: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22 2c 20  secure_delete", 
3da0: 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  b);.    break;. 
3db0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
3dc0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
3dd0: 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 0a  ]max_page_count.
3de0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
3df0: 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61 67 65  tabase.]max_page
3e00: 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20  _count=N.  **.  
3e10: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
3e20: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
3e30: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  rrent setting fo
3e40: 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d  r the.  ** maxim
3e50: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  um number of pag
3e60: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
3e70: 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20  se file.  The . 
3e80: 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20   ** second form 
3e90: 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e  attempts to chan
3ea0: 67 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e  ge this setting.
3eb0: 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d    Both.  ** form
3ec0: 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 75 72  s return the cur
3ed0: 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20  rent setting..  
3ee0: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f  **.  ** The abso
3ef0: 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20  lute value of N 
3f00: 69 73 20 75 73 65 64 2e 20 20 54 68 69 73 20 69  is used.  This i
3f10: 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61  s undocumented a
3f20: 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68  nd might.  ** ch
3f30: 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20  ange.  The only 
3f40: 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72  purpose is to pr
3f50: 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20 77 61  ovide an easy wa
3f60: 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74  y to test.  ** t
3f70: 68 65 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  he sqlite3AbsInt
3f80: 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  32() function.. 
3f90: 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   **.  **  PRAGMA
3fa0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65   [database.]page
3fb0: 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a  _count.  **.  **
3fc0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
3fd0: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
3fe0: 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74  he specified dat
3ff0: 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  abase..  */.  ca
4000: 73 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  se PragTyp_PAGE_
4010: 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74  COUNT: {.    int
4020: 20 69 52 65 67 3b 0a 20 20 20 20 73 71 6c 69 74   iReg;.    sqlit
4030: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
4040: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
4050: 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b 70 50  .    iReg = ++pP
4060: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
4070: 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  if( sqlite3Tolow
4080: 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70  er(zLeft[0])=='p
4090: 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ' ){.      sqlit
40a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
40b0: 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69 44  OP_Pagecount, iD
40c0: 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20 7d 65  b, iReg);.    }e
40d0: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
40e0: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
40f0: 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44 62  OP_MaxPgcnt, iDb
4100: 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20 20 20  , iReg, .       
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4120: 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
4130: 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69  (sqlite3Atoi(zRi
4140: 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ght)));.    }.  
4150: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4160: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
4170: 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20  Row, iReg, 1);. 
4180: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4190: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
41a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
41b0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
41c0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c  COLNAME_NAME, zL
41d0: 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  eft, SQLITE_TRAN
41e0: 53 49 45 4e 54 29 3b 0a 20 20 20 20 62 72 65 61  SIENT);.    brea
41f0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
4200: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
4210: 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ase.]locking_mod
4220: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
4230: 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e  database.]lockin
4240: 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72 6d 61 6c  g_mode = (normal
4250: 7c 65 78 63 6c 75 73 69 76 65 29 0a 20 20 2a 2f  |exclusive).  */
4260: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
4270: 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a  LOCKING_MODE: {.
4280: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
4290: 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b  zRet = "normal";
42a0: 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d  .    int eMode =
42b0: 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28   getLockingMode(
42c0: 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20 20 69 66  zRight);..    if
42d0: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20  ( pId2->n==0 && 
42e0: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
42f0: 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 20 29  KINGMODE_QUERY )
4300: 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c  {.      /* Simpl
4310: 65 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e  e "PRAGMA lockin
4320: 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74 65 6d 65  g_mode;" stateme
4330: 6e 74 2e 20 54 68 69 73 20 69 73 20 61 20 71 75  nt. This is a qu
4340: 65 72 79 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ery for.      **
4350: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 65 66   the current def
4360: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64  ault locking mod
4370: 65 20 28 77 68 69 63 68 20 6d 61 79 20 62 65 20  e (which may be 
4380: 64 69 66 66 65 72 65 6e 74 20 74 6f 0a 20 20 20  different to.   
4390: 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e     ** the lockin
43a0: 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65 20 6d 61  g-mode of the ma
43b0: 69 6e 20 64 61 74 61 62 61 73 65 29 2e 0a 20 20  in database)..  
43c0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f      */.      eMo
43d0: 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63  de = db->dfltLoc
43e0: 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65  kMode;.    }else
43f0: 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70  {.      Pager *p
4400: 50 61 67 65 72 3b 0a 20 20 20 20 20 20 69 66 28  Pager;.      if(
4410: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20   pId2->n==0 ){. 
4420: 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
4430: 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 6e 6f  ndicates that no
4440: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 77   database name w
4450: 61 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  as specified as 
4460: 70 61 72 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  part.        ** 
4470: 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f  of the PRAGMA co
4480: 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69 73 20 63  mmand. In this c
4490: 61 73 65 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d  ase the locking-
44a0: 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a 20 20 20  mode must be.   
44b0: 20 20 20 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61       ** set on a
44c0: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
44d0: 62 61 73 65 73 2c 20 61 73 20 77 65 6c 6c 20 61  bases, as well a
44e0: 73 20 74 68 65 20 6d 61 69 6e 20 64 62 20 66 69  s the main db fi
44f0: 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20  le..        **. 
4500: 20 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20         ** Also, 
4510: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 66 6c 74  the sqlite3.dflt
4520: 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c  LockMode variabl
4530: 65 20 69 73 20 73 65 74 20 73 6f 20 74 68 61 74  e is set so that
4540: 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 79 20  .        ** any 
4550: 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61 74 74  subsequently att
4560: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
4570: 61 6c 73 6f 20 75 73 65 20 74 68 65 20 73 70 65  also use the spe
4580: 63 69 66 69 65 64 0a 20 20 20 20 20 20 20 20 2a  cified.        *
4590: 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a  * locking mode..
45a0: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
45b0: 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
45c0: 20 20 20 61 73 73 65 72 74 28 70 44 62 3d 3d 26     assert(pDb==&
45d0: 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20  db->aDb[0]);.   
45e0: 20 20 20 20 20 66 6f 72 28 69 69 3d 32 3b 20 69       for(ii=2; i
45f0: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
4600: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 50 61 67  {.          pPag
4610: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
4620: 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 69  ePager(db->aDb[i
4630: 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 20  i].pBt);.       
4640: 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c     sqlite3PagerL
4650: 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65  ockingMode(pPage
4660: 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20  r, eMode);.     
4670: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
4680: 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20  >dfltLockMode = 
4690: 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20  (u8)eMode;.     
46a0: 20 7d 0a 20 20 20 20 20 20 70 50 61 67 65 72 20   }.      pPager 
46b0: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
46c0: 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ger(pDb->pBt);. 
46d0: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c       eMode = sql
46e0: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
46f0: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
4700: 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  de);.    }..    
4710: 61 73 73 65 72 74 28 20 65 4d 6f 64 65 3d 3d 50  assert( eMode==P
4720: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4730: 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20 20 20 20  _NORMAL.        
4740: 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41      || eMode==PA
4750: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
4760: 45 58 43 4c 55 53 49 56 45 20 29 3b 0a 20 20 20  EXCLUSIVE );.   
4770: 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45   if( eMode==PAGE
4780: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58  R_LOCKINGMODE_EX
4790: 43 4c 55 53 49 56 45 20 29 7b 0a 20 20 20 20 20  CLUSIVE ){.     
47a0: 20 7a 52 65 74 20 3d 20 22 65 78 63 6c 75 73 69   zRet = "exclusi
47b0: 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ve";.    }.    s
47c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
47d0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
47e0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
47f0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
4800: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 63 6b 69  AME_NAME, "locki
4810: 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45  ng_mode", SQLITE
4820: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
4830: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
4840: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
4850: 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c 20 30 29  , 1, 0, zRet, 0)
4860: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4870: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
4880: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
4890: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
48a0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
48b0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75  A [database.]jou
48c0: 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20  rnal_mode.  **  
48d0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
48e0: 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  .]journal_mode =
48f0: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20  .  **           
4900: 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65             (dele
4910: 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74  te|persist|off|t
4920: 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77  runcate|memory|w
4930: 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63  al|off).  */.  c
4940: 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52  ase PragTyp_JOUR
4950: 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  NAL_MODE: {.    
4960: 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20  int eMode;      
4970: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
4980: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
4990: 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f  E_XXX symbols */
49a0: 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20  .    int ii;    
49b0: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
49c0: 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73  ounter */..    s
49d0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
49e0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
49f0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
4a00: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
4a10: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f 75 72 6e  AME_NAME, "journ
4a20: 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45  al_mode", SQLITE
4a30: 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 69  _STATIC);..    i
4a40: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a  f( zRight==0 ){.
4a50: 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
4a60: 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20  e is no "=MODE" 
4a70: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
4a80: 6d 61 2c 20 64 6f 20 61 20 71 75 65 72 79 20 66  ma, do a query f
4a90: 6f 72 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  or the.      ** 
4aa0: 63 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a  current mode */.
4ab0: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41        eMode = PA
4ac0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4ad0: 51 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65  QUERY;.    }else
4ae0: 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
4af0: 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20  ar *zMode;.     
4b00: 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33   int n = sqlite3
4b10: 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
4b20: 3b 0a 20 20 20 20 20 20 66 6f 72 28 65 4d 6f 64  ;.      for(eMod
4b30: 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71  e=0; (zMode = sq
4b40: 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
4b50: 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b  name(eMode))!=0;
4b60: 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20   eMode++){.     
4b70: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
4b80: 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a  rNICmp(zRight, z
4b90: 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72  Mode, n)==0 ) br
4ba0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
4bb0: 20 20 20 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b     if( !zMode ){
4bc0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
4bd0: 68 65 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20  he "=MODE" part 
4be0: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61  does not match a
4bf0: 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c  ny known journal
4c00: 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 2a   mode,.        *
4c10: 2a 20 74 68 65 6e 20 64 6f 20 61 20 71 75 65 72  * then do a quer
4c20: 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f  y */.        eMo
4c30: 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e  de = PAGER_JOURN
4c40: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20  ALMODE_QUERY;.  
4c50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
4c60: 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52  if( eMode==PAGER
4c70: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
4c80: 52 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30  RY && pId2->n==0
4c90: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
4ca0: 76 65 72 74 20 22 50 52 41 47 4d 41 20 6a 6f 75  vert "PRAGMA jou
4cb0: 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20  rnal_mode" into 
4cc0: 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75  "PRAGMA main.jou
4cd0: 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20  rnal_mode" */.  
4ce0: 20 20 20 20 69 44 62 20 3d 20 30 3b 0a 20 20 20      iDb = 0;.   
4cf0: 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a     pId2->n = 1;.
4d00: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69      }.    for(ii
4d10: 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d  =db->nDb-1; ii>=
4d20: 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20  0; ii--){.      
4d30: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  if( db->aDb[ii].
4d40: 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20  pBt && (ii==iDb 
4d50: 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29  || pId2->n==0) )
4d60: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4d70: 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
4d80: 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 73  , ii);.        s
4d90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
4da0: 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  (v, OP_JournalMo
4db0: 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65  de, ii, 1, eMode
4dc0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4dd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4de0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
4df0: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
4e00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
4e10: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
4e20: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72   [database.]jour
4e30: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 0a 20  nal_size_limit. 
4e40: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
4e50: 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73  abase.]journal_s
4e60: 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20 20 2a 2a  ize_limit=N.  **
4e70: 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74  .  ** Get or set
4e80: 20 74 68 65 20 73 69 7a 65 20 6c 69 6d 69 74 20   the size limit 
4e90: 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  on rollback jour
4ea0: 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20 2a 2f 0a  nal files..  */.
4eb0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
4ec0: 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49  OURNAL_SIZE_LIMI
4ed0: 54 3a 20 7b 0a 20 20 20 20 50 61 67 65 72 20 2a  T: {.    Pager *
4ee0: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
4ef0: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
4f00: 70 42 74 29 3b 0a 20 20 20 20 69 36 34 20 69 4c  pBt);.    i64 iL
4f10: 69 6d 69 74 20 3d 20 2d 32 3b 0a 20 20 20 20 69  imit = -2;.    i
4f20: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
4f30: 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48     sqlite3DecOrH
4f40: 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
4f50: 26 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 20 20  &iLimit);.      
4f60: 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31 20 29 20  if( iLimit<-1 ) 
4f70: 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20 20 20  iLimit = -1;.   
4f80: 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74 20 3d 20   }.    iLimit = 
4f90: 73 71 6c 69 74 65 33 50 61 67 65 72 4a 6f 75 72  sqlite3PagerJour
4fa0: 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28 70 50 61  nalSizeLimit(pPa
4fb0: 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20  ger, iLimit);.  
4fc0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
4fd0: 74 28 70 50 61 72 73 65 2c 20 22 6a 6f 75 72 6e  t(pParse, "journ
4fe0: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 20  al_size_limit", 
4ff0: 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72 65  iLimit);.    bre
5000: 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20  ak;.  }..#endif 
5010: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
5020: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
5030: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
5040: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75  MA [database.]au
5050: 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20  to_vacuum.  **  
5060: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
5070: 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a  .]auto_vacuum=N.
5080: 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72    **.  ** Get or
5090: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
50a0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 27  f the database '
50b0: 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70 61 72  auto-vacuum' par
50c0: 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65  ameter..  ** The
50d0: 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66   value is one of
50e0: 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c  :  0 NONE 1 FULL
50f0: 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20   2 INCREMENTAL. 
5100: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
5110: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
5120: 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UM.  case PragTy
5130: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b  p_AUTO_VACUUM: {
5140: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
5150: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
5160: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
5170: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
5180: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
5190: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
51a0: 65 2c 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 22  e, "auto_vacuum"
51b0: 2c 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  , sqlite3BtreeGe
51c0: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 29  tAutoVacuum(pBt)
51d0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
51e0: 20 20 20 20 69 6e 74 20 65 41 75 74 6f 20 3d 20      int eAuto = 
51f0: 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28 7a 52  getAutoVacuum(zR
5200: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 61 73 73  ight);.      ass
5210: 65 72 74 28 20 65 41 75 74 6f 3e 3d 30 20 26 26  ert( eAuto>=0 &&
5220: 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a 20 20 20   eAuto<=2 );.   
5230: 20 20 20 64 62 2d 3e 6e 65 78 74 41 75 74 6f 76     db->nextAutov
5240: 61 63 20 3d 20 28 75 38 29 65 41 75 74 6f 3b 0a  ac = (u8)eAuto;.
5250: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20 53 65        /* Call Se
5260: 74 41 75 74 6f 56 61 63 75 75 6d 28 29 20 74 6f  tAutoVacuum() to
5270: 20 73 65 74 20 69 6e 69 74 69 61 6c 69 7a 65 20   set initialize 
5280: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 61 75 74  the internal aut
5290: 6f 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 69  o and.      ** i
52a0: 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c 61 67 73  ncr-vacuum flags
52b0: 2e 20 54 68 69 73 20 69 73 20 72 65 71 75 69 72  . This is requir
52c0: 65 64 20 69 6e 20 63 61 73 65 20 74 68 69 73 20  ed in case this 
52d0: 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20  connection.     
52e0: 20 2a 2a 20 63 72 65 61 74 65 73 20 74 68 65 20   ** creates the 
52f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49  database file. I
5300: 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
5310: 68 61 74 20 69 74 20 69 73 20 63 72 65 61 74 65  hat it is create
5320: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e  d.      ** as an
5330: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70   auto-vacuum cap
5340: 61 62 6c 65 20 64 62 2e 0a 20 20 20 20 20 20 2a  able db..      *
5350: 2f 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  /.      rc = sql
5360: 69 74 65 33 42 74 72 65 65 53 65 74 41 75 74 6f  ite3BtreeSetAuto
5370: 56 61 63 75 75 6d 28 70 42 74 2c 20 65 41 75 74  Vacuum(pBt, eAut
5380: 6f 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  o);.      if( rc
5390: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 28  ==SQLITE_OK && (
53a0: 65 41 75 74 6f 3d 3d 31 20 7c 7c 20 65 41 75 74  eAuto==1 || eAut
53b0: 6f 3d 3d 32 29 20 29 7b 0a 20 20 20 20 20 20 20  o==2) ){.       
53c0: 20 2f 2a 20 57 68 65 6e 20 73 65 74 74 69 6e 67   /* When setting
53d0: 20 74 68 65 20 61 75 74 6f 5f 76 61 63 75 75 6d   the auto_vacuum
53e0: 20 6d 6f 64 65 20 74 6f 20 65 69 74 68 65 72 20   mode to either 
53f0: 22 66 75 6c 6c 22 20 6f 72 20 0a 20 20 20 20 20  "full" or .     
5400: 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d 65 6e 74     ** "increment
5410: 61 6c 22 2c 20 77 72 69 74 65 20 74 68 65 20 76  al", write the v
5420: 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b 36 5d 20  alue of meta[6] 
5430: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
5440: 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
5450: 20 42 65 66 6f 72 65 20 77 72 69 74 69 6e 67 20   Before writing 
5460: 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63 68 65 63  to meta[6], chec
5470: 6b 20 74 68 61 74 20 6d 65 74 61 5b 33 5d 20 69  k that meta[3] i
5480: 6e 64 69 63 61 74 65 73 0a 20 20 20 20 20 20 20  ndicates.       
5490: 20 2a 2a 20 74 68 61 74 20 74 68 69 73 20 72 65   ** that this re
54a0: 61 6c 6c 79 20 69 73 20 61 6e 20 61 75 74 6f 2d  ally is an auto-
54b0: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
54c0: 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 20  atabase..       
54d0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 74 61 74   */.        stat
54e0: 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e  ic const int iLn
54f0: 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c   = VDBE_OFFSET_L
5500: 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 20 20  INENO(2);.      
5510: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
5520: 64 62 65 4f 70 4c 69 73 74 20 73 65 74 4d 65 74  dbeOpList setMet
5530: 61 36 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  a6[] = {.       
5540: 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
5550: 69 6f 6e 2c 20 20 20 20 30 2c 20 20 20 20 20 20  ion,    0,      
5560: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20     1,           
5570: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
5580: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b  0 */.          {
5590: 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20   OP_ReadCookie, 
55a0: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31      0,         1
55b0: 2c 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f  ,         BTREE_
55c0: 4c 41 52 47 45 53 54 5f 52 4f 4f 54 5f 50 41 47  LARGEST_ROOT_PAG
55d0: 45 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 7b 20  E},.          { 
55e0: 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20 20 20  OP_If,          
55f0: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 30 2c     1,         0,
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a   0},    /* 2 */.
5620: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 48            { OP_H
5630: 61 6c 74 2c 20 20 20 20 20 20 20 20 20 20 20 53  alt,           S
5640: 51 4c 49 54 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f  QLITE_OK, OE_Abo
5650: 72 74 2c 20 20 20 20 20 20 20 20 20 20 30 7d 2c  rt,          0},
5660: 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20      /* 3 */.    
5670: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
5680: 65 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 20  er,        0,   
5690: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
56a0: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
56b0: 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 4 */.        
56c0: 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65    { OP_SetCookie
56d0: 2c 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20  ,      0,       
56e0: 20 20 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43    BTREE_INCR_VAC
56f0: 55 55 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a 20 35  UUM, 1},    /* 5
5700: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20   */.        };. 
5710: 20 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72         int iAddr
5720: 3b 0a 20 20 20 20 20 20 20 20 69 41 64 64 72 20  ;.        iAddr 
5730: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
5740: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
5750: 69 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73  ize(setMeta6), s
5760: 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20  etMeta6, iLn);. 
5770: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5780: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
5790: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
57a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
57b0: 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64 72 2b  angeP1(v, iAddr+
57c0: 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20  1, iDb);.       
57d0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
57e0: 67 65 50 32 28 76 2c 20 69 41 64 64 72 2b 32 2c  geP2(v, iAddr+2,
57f0: 20 69 41 64 64 72 2b 34 29 3b 0a 20 20 20 20 20   iAddr+4);.     
5800: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
5810: 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64 72 2b  angeP1(v, iAddr+
5820: 34 2c 20 65 41 75 74 6f 2d 31 29 3b 0a 20 20 20  4, eAuto-1);.   
5830: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5840: 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64  ChangeP1(v, iAdd
5850: 72 2b 35 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+5, iDb);.     
5860: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
5870: 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b  esBtree(v, iDb);
5880: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5890: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
58a0: 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ndif..  /*.  ** 
58b0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
58c0: 65 2e 5d 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  e.]incremental_v
58d0: 61 63 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20  acuum(N).  **.  
58e0: 2a 2a 20 44 6f 20 4e 20 73 74 65 70 73 20 6f 66  ** Do N steps of
58f0: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
5900: 75 75 6d 69 6e 67 20 6f 6e 20 61 20 64 61 74 61  uuming on a data
5910: 62 61 73 65 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64  base..  */.#ifnd
5920: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
5930: 55 54 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65  UTOVACUUM.  case
5940: 20 50 72 61 67 54 79 70 5f 49 4e 43 52 45 4d 45   PragTyp_INCREME
5950: 4e 54 41 4c 5f 56 41 43 55 55 4d 3a 20 7b 0a 20  NTAL_VACUUM: {. 
5960: 20 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 61     int iLimit, a
5970: 64 64 72 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  ddr;.    if( zRi
5980: 67 68 74 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74  ght==0 || !sqlit
5990: 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68  e3GetInt32(zRigh
59a0: 74 2c 20 26 69 4c 69 6d 69 74 29 20 7c 7c 20 69  t, &iLimit) || i
59b0: 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a 20 20 20 20  Limit<=0 ){.    
59c0: 20 20 69 4c 69 6d 69 74 20 3d 20 30 78 37 66 66    iLimit = 0x7ff
59d0: 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a 20 20 20  fffff;.    }.   
59e0: 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
59f0: 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72  teOperation(pPar
5a00: 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20  se, 0, iDb);.   
5a10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5a20: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
5a30: 2c 20 69 4c 69 6d 69 74 2c 20 31 29 3b 0a 20 20  , iLimit, 1);.  
5a40: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
5a50: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
5a60: 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20 69 44 62  _IncrVacuum, iDb
5a70: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
5a80: 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
5a90: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
5aa0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 29 3b 0a 20  ResultRow, 1);. 
5ab0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
5ac0: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
5ad0: 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 73  m, 1, -1);.    s
5ae0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
5af0: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c  (v, OP_IfPos, 1,
5b00: 20 61 64 64 72 29 3b 20 56 64 62 65 43 6f 76 65   addr); VdbeCove
5b10: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c  rage(v);.    sql
5b20: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
5b30: 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 62  (v, addr);.    b
5b40: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
5b50: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
5b60: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
5b70: 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  MAS.  /*.  **  P
5b80: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
5b90: 5d 63 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a  ]cache_size.  **
5ba0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
5bb0: 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 3d 4e  se.]cache_size=N
5bc0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
5bd0: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
5be0: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 6f  s the current lo
5bf0: 63 61 6c 20 73 65 74 74 69 6e 67 20 66 6f 72 20  cal setting for 
5c00: 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  the.  ** page ca
5c10: 63 68 65 20 73 69 7a 65 2e 20 54 68 65 20 73 65  che size. The se
5c20: 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74  cond form sets t
5c30: 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a 20 70 61  he local.  ** pa
5c40: 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61  ge cache size va
5c50: 6c 75 65 2e 20 20 49 66 20 4e 20 69 73 20 70 6f  lue.  If N is po
5c60: 73 69 74 69 76 65 20 74 68 65 6e 20 74 68 61 74  sitive then that
5c70: 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d   is the.  ** num
5c80: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
5c90: 74 68 65 20 63 61 63 68 65 2e 20 20 49 66 20 4e  the cache.  If N
5ca0: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
5cb0: 65 6e 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62  en the.  ** numb
5cc0: 65 72 20 6f 66 20 70 61 67 65 73 20 69 73 20 61  er of pages is a
5cd0: 64 6a 75 73 74 65 64 20 73 6f 20 74 68 61 74 20  djusted so that 
5ce0: 74 68 65 20 63 61 63 68 65 20 75 73 65 73 20 2d  the cache uses -
5cf0: 4e 20 6b 69 62 69 62 79 74 65 73 0a 20 20 2a 2a  N kibibytes.  **
5d00: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2f   of memory..  */
5d10: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
5d20: 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20  CACHE_SIZE: {.  
5d30: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5d40: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
5d50: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
5d60: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
5d70: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
5d80: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
5d90: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70   "cache_size", p
5da0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
5db0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  he_size);.    }e
5dc0: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
5dd0: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  ize = sqlite3Ato
5de0: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  i(zRight);.     
5df0: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
5e00: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
5e10: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
5e20: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
5e30: 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e  (pDb->pBt, pDb->
5e40: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
5e50: 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ize);.    }.    
5e60: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
5e70: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
5e80: 61 74 61 62 61 73 65 2e 5d 6d 6d 61 70 5f 73 69  atabase.]mmap_si
5e90: 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ze(N).  **.  ** 
5ea0: 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61 70 70  Used to set mapp
5eb0: 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20  ing size limit. 
5ec0: 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69 7a 65  The mapping size
5ed0: 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75   limit is.  ** u
5ee0: 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  sed to limit the
5ef0: 20 61 67 67 72 65 67 61 74 65 20 73 69 7a 65 20   aggregate size 
5f00: 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61  of all memory ma
5f10: 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f 66 20  pped regions of 
5f20: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
5f30: 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69 73 20  e file. If this 
5f40: 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74  parameter is set
5f50: 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d   to zero, then m
5f60: 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20 20  emory mapping.  
5f70: 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  ** is not used a
5f80: 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20  t all.  If N is 
5f90: 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74  negative, then t
5fa0: 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72  he default memor
5fb0: 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74  y map.  ** limit
5fc0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 73   determined by s
5fd0: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
5fe0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50  LITE_CONFIG_MMAP
5ff0: 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e 0a 20  _SIZE) is set.. 
6000: 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65 74 65   ** The paramete
6010: 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20  r N is measured 
6020: 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20  in bytes..  **. 
6030: 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69   ** This value i
6040: 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65  s advisory.  The
6050: 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20   underlying VFS 
6060: 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72  is free to memor
6070: 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69  y map.  ** as li
6080: 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20  ttle or as much 
6090: 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78  as it wants.  Ex
60a0: 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65  cept, if N is se
60b0: 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a  t to 0 then the.
60c0: 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72    ** upper layer
60d0: 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76  s will never inv
60e0: 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68 20 69  oke the xFetch i
60f0: 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74 68 65  nterfaces to the
6100: 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   VFS..  */.  cas
6110: 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53  e PragTyp_MMAP_S
6120: 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  IZE: {.    sqlit
6130: 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66  e3_int64 sz;.#if
6140: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
6150: 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65  _SIZE>0.    asse
6160: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
6170: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
6180: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
6190: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
61a0: 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20    int ii;.      
61b0: 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
61c0: 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a  oI64(zRight, &sz
61d0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c  );.      if( sz<
61e0: 30 20 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33  0 ) sz = sqlite3
61f0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d  GlobalConfig.szM
6200: 6d 61 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70  map;.      if( p
6210: 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e  Id2->n==0 ) db->
6220: 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20  szMmap = sz;.   
6230: 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44     for(ii=db->nD
6240: 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d  b-1; ii>=0; ii--
6250: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 64  ){.        if( d
6260: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26  b->aDb[ii].pBt &
6270: 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49  & (ii==iDb || pI
6280: 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20  d2->n==0) ){.   
6290: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
62a0: 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28  reeSetMmapLimit(
62b0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
62c0: 20 73 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   sz);.        }.
62d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
62e0: 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72    sz = -1;.    r
62f0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
6300: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
6310: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d  , SQLITE_FCNTL_M
6320: 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a  MAP_SIZE, &sz);.
6330: 23 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30  #else.    sz = 0
6340: 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
6350: 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  E_OK;.#endif.   
6360: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
6370: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  OK ){.      retu
6380: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
6390: 73 65 2c 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c  se, "mmap_size",
63a0: 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20   sz);.    }else 
63b0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e  if( rc!=SQLITE_N
63c0: 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20  OTFOUND ){.     
63d0: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b   pParse->nErr++;
63e0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72  .      pParse->r
63f0: 63 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20  c = rc;.    }.  
6400: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6410: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
6420: 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a   temp_store.  **
6430: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6440: 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22  tore = "default"
6450: 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22  |"memory"|"file"
6460: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
6470: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
6480: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
6490: 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e  temp_store flag.
64a0: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
64b0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
64c0: 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68  does not make ch
64d0: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73  anges to the dis
64e0: 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64  k file and the d
64f0: 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75  efault.  ** valu
6500: 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72  e will be restor
6510: 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65  ed the next time
6520: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
6530: 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20   opened..  **.  
6540: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20  ** Note that it 
6550: 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20  is possible for 
6560: 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70  the library comp
6570: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
6580: 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64   to.  ** overrid
6590: 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20  e this setting. 
65a0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
65b0: 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 3a 20 7b  yp_TEMP_STORE: {
65c0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
65d0: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
65e0: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
65f0: 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 20  , "temp_store", 
6600: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 29 3b  db->temp_store);
6610: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
6620: 20 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72    changeTempStor
6630: 61 67 65 28 70 50 61 72 73 65 2c 20 7a 52 69 67  age(pParse, zRig
6640: 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  ht);.    }.    b
6650: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
6660: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
6670: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6680: 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ry.  **   PRAGMA
6690: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
66a0: 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65  ctory = ""|"dire
66b0: 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a  ctory_name".  **
66c0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
66d0: 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61  set the local va
66e0: 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f  lue of the temp_
66f0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
6700: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
6710: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73    ** the value s
6720: 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64  ets a specific d
6730: 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75  irectory to be u
6740: 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
6750: 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53 65  y files..  ** Se
6760: 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20  tting to a null 
6770: 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 20 74  string reverts t
6780: 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65  o the default te
6790: 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
67a0: 79 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20 49  y search..  ** I
67b0: 66 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  f temporary dire
67c0: 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64  ctory is changed
67d0: 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69 64 61 74  , then invalidat
67e0: 65 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20 20  eTempStorage..  
67f0: 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  **.  */.  case P
6800: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
6810: 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20  E_DIRECTORY: {. 
6820: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
6830: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
6840: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
6850: 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ry ){.        sq
6860: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
6870: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
6880: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6890: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
68a0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20  OLNAME_NAME, .  
68b0: 20 20 20 20 20 20 20 20 20 20 22 74 65 6d 70 5f            "temp_
68c0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22  store_directory"
68d0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
68e0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
68f0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
6900: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
6910: 20 30 2c 20 73 71 6c 69 74 65 33 5f 74 65 6d 70   0, sqlite3_temp
6920: 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a  _directory, 0);.
6930: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
6940: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
6950: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
6960: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
6970: 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  lse{.#ifndef SQL
6980: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20  ITE_OMIT_WSD.   
6990: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
69a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
69b0: 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20  res;.        rc 
69c0: 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73  = sqlite3OsAcces
69d0: 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67  s(db->pVfs, zRig
69e0: 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53  ht, SQLITE_ACCES
69f0: 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72 65  S_READWRITE, &re
6a00: 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
6a10: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc!=SQLITE_OK ||
6a20: 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
6a30: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
6a40: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f  rMsg(pParse, "no
6a50: 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72  t a writable dir
6a60: 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20  ectory");.      
6a70: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
6a80: 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  out;.        }. 
6a90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
6aa0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
6ab0: 52 45 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20  RE==0.       || 
6ac0: 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  (SQLITE_TEMP_STO
6ad0: 52 45 3d 3d 31 20 26 26 20 64 62 2d 3e 74 65 6d  RE==1 && db->tem
6ae0: 70 5f 73 74 6f 72 65 3c 3d 31 29 0a 20 20 20 20  p_store<=1).    
6af0: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
6b00: 4d 50 5f 53 54 4f 52 45 3d 3d 32 20 26 26 20 64  MP_STORE==2 && d
6b10: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 31  b->temp_store==1
6b20: 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
6b30: 20 20 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d     invalidateTem
6b40: 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 29  pStorage(pParse)
6b50: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6b60: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c  sqlite3_free(sql
6b70: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
6b80: 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ory);.      if( 
6b90: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
6ba0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 6d       sqlite3_tem
6bb0: 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71  p_directory = sq
6bc0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
6bd0: 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20  s", zRight);.   
6be0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6bf0: 20 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64    sqlite3_temp_d
6c00: 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20  irectory = 0;.  
6c10: 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
6c20: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20  SQLITE_OMIT_WSD 
6c30: 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  */.    }.    bre
6c40: 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 53 51 4c  ak;.  }..#if SQL
6c50: 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 2f 2a 0a  ITE_OS_WIN.  /*.
6c60: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61    **   PRAGMA da
6c70: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
6c80: 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ry.  **   PRAGMA
6c90: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
6ca0: 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65  ctory = ""|"dire
6cb0: 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a  ctory_name".  **
6cc0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
6cd0: 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61  set the local va
6ce0: 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 5f  lue of the data_
6cf0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
6d00: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
6d10: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73    ** the value s
6d20: 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64  ets a specific d
6d30: 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75  irectory to be u
6d40: 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65  sed for database
6d50: 20 66 69 6c 65 73 20 74 68 61 74 0a 20 20 2a 2a   files that.  **
6d60: 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 20   were specified 
6d70: 77 69 74 68 20 61 20 72 65 6c 61 74 69 76 65 20  with a relative 
6d80: 70 61 74 68 6e 61 6d 65 2e 20 20 53 65 74 74 69  pathname.  Setti
6d90: 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72  ng to a null str
6da0: 69 6e 67 20 72 65 76 65 72 74 73 0a 20 20 2a 2a  ing reverts.  **
6db0: 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   to the default 
6dc0: 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f  database directo
6dd0: 72 79 2c 20 77 68 69 63 68 20 66 6f 72 20 64 61  ry, which for da
6de0: 74 61 62 61 73 65 20 66 69 6c 65 73 20 73 70 65  tabase files spe
6df0: 63 69 66 69 65 64 20 77 69 74 68 0a 20 20 2a 2a  cified with.  **
6e00: 20 61 20 72 65 6c 61 74 69 76 65 20 70 61 74 68   a relative path
6e10: 20 77 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 62   will probably b
6e20: 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  e based on the c
6e30: 75 72 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79  urrent directory
6e40: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 72   for the.  ** pr
6e50: 6f 63 65 73 73 2e 20 20 44 61 74 61 62 61 73 65  ocess.  Database
6e60: 20 66 69 6c 65 20 73 70 65 63 69 66 69 65 64 20   file specified 
6e70: 77 69 74 68 20 61 6e 20 61 62 73 6f 6c 75 74 65  with an absolute
6e80: 20 70 61 74 68 20 61 72 65 20 6e 6f 74 20 69 6d   path are not im
6e90: 70 61 63 74 65 64 0a 20 20 2a 2a 20 62 79 20 74  pacted.  ** by t
6ea0: 68 69 73 20 73 65 74 74 69 6e 67 2c 20 72 65 67  his setting, reg
6eb0: 61 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20 76  ardless of its v
6ec0: 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a  alue..  **.  */.
6ed0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44    case PragTyp_D
6ee0: 41 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54  ATA_STORE_DIRECT
6ef0: 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORY: {.    if( !
6f00: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6f10: 69 66 28 20 73 71 6c 69 74 65 33 5f 64 61 74 61  if( sqlite3_data
6f20: 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20  _directory ){.  
6f30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6f40: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
6f50: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
6f60: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
6f70: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
6f80: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
6f90: 20 20 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69    "data_store_di
6fa0: 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45  rectory", SQLITE
6fb0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
6fc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
6fd0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
6fe0: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69  8, 0, 1, 0, sqli
6ff0: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
7000: 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  ry, 0);.        
7010: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
7020: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
7030: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 1, 1);.      
7040: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66  }.    }else{.#if
7050: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7060: 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a  _WSD.      if( z
7070: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
7080: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
7090: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
70a0: 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56  3OsAccess(db->pV
70b0: 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49  fs, zRight, SQLI
70c0: 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52  TE_ACCESS_READWR
70d0: 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  ITE, &res);.    
70e0: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
70f0: 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20  TE_OK || res==0 
7100: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
7110: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
7120: 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74  rse, "not a writ
7130: 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29  able directory")
7140: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
7150: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
7160: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
7170: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
7180: 65 28 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  e(sqlite3_data_d
7190: 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20  irectory);.     
71a0: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
71b0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
71c0: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
71d0: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
71e0: 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29  tf("%s", zRight)
71f0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
7200: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64         sqlite3_d
7210: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ata_directory = 
7220: 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  0;.      }.#endi
7230: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
7240: 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  _WSD */.    }.  
7250: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
7260: 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
7270: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
7280: 54 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  TYLE.  /*.  **  
7290: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
72a0: 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  e.]lock_proxy_fi
72b0: 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  le.  **   PRAGMA
72c0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b   [database.]lock
72d0: 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d 20 22 3a  _proxy_file = ":
72e0: 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c  auto:"|"lock_fil
72f0: 65 5f 70 61 74 68 22 0a 20 20 2a 2a 0a 20 20 2a  e_path".  **.  *
7300: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
7310: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
7320: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7330: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
7340: 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  .  ** the value 
7350: 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20  sets a specific 
7360: 66 69 6c 65 20 74 6f 20 62 65 20 75 73 65 64 20  file to be used 
7370: 66 6f 72 20 64 61 74 61 62 61 73 65 20 61 63 63  for database acc
7380: 65 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 2a 2a 0a  ess locks..  **.
7390: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
73a0: 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58 59 5f 46  Typ_LOCK_PROXY_F
73b0: 49 4c 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ILE: {.    if( !
73c0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
73d0: 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20  Pager *pPager = 
73e0: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
73f0: 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  r(pDb->pBt);.   
7400: 20 20 20 63 68 61 72 20 2a 70 72 6f 78 79 5f 66     char *proxy_f
7410: 69 6c 65 5f 70 61 74 68 20 3d 20 4e 55 4c 4c 3b  ile_path = NULL;
7420: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7430: 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c  ile *pFile = sql
7440: 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50  ite3PagerFile(pP
7450: 61 67 65 72 29 3b 0a 20 20 20 20 20 20 73 71 6c  ager);.      sql
7460: 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f  ite3OsFileContro
7470: 6c 48 69 6e 74 28 70 46 69 6c 65 2c 20 53 51 4c  lHint(pFile, SQL
7480: 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_GET_LOCKPROX
7490: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74b0: 20 20 20 26 70 72 6f 78 79 5f 66 69 6c 65 5f 70     &proxy_file_p
74c0: 61 74 68 29 3b 0a 20 20 20 20 20 20 0a 20 20 20  ath);.      .   
74d0: 20 20 20 69 66 28 20 70 72 6f 78 79 5f 66 69 6c     if( proxy_fil
74e0: 65 5f 70 61 74 68 20 29 7b 0a 20 20 20 20 20 20  e_path ){.      
74f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7500: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
7510: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
7520: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
7530: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
7540: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
7550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7560: 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65  "lock_proxy_file
7570: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
7580: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
7590: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
75a0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
75b0: 2c 20 30 2c 20 70 72 6f 78 79 5f 66 69 6c 65 5f  , 0, proxy_file_
75c0: 70 61 74 68 2c 20 30 29 3b 0a 20 20 20 20 20 20  path, 0);.      
75d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
75e0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
75f0: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
7600: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
7610: 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67       Pager *pPag
7620: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
7630: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
7640: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
7650: 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71  file *pFile = sq
7660: 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70  lite3PagerFile(p
7670: 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 69 6e  Pager);.      in
7680: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 69 66 28  t res;.      if(
7690: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
76a0: 20 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65        res=sqlite
76b0: 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70  3OsFileControl(p
76c0: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54  File, SQLITE_SET
76d0: 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20  _LOCKPROXYFILE, 
76e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 20 20 20 20 20 7a 52 69 67 68 74 29 3b 0a 20        zRight);. 
7710: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
7720: 20 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65        res=sqlite
7730: 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70  3OsFileControl(p
7740: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54  File, SQLITE_SET
7750: 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20  _LOCKPROXYFILE, 
7760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7780: 20 20 20 20 20 20 4e 55 4c 4c 29 3b 0a 20 20 20        NULL);.   
7790: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
77a0: 65 73 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  es!=SQLITE_OK ){
77b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
77c0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
77d0: 20 22 66 61 69 6c 65 64 20 74 6f 20 73 65 74 20   "failed to set 
77e0: 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c 65 22  lock proxy file"
77f0: 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  );.        goto 
7800: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
7810: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
7820: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
7830: 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  /* SQLITE_ENABLE
7840: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20 2a  _LOCKING_STYLE *
7850: 2f 20 20 20 20 20 20 0a 20 20 20 20 0a 20 20 2f  /      .    .  /
7860: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
7870: 5b 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68  [database.]synch
7880: 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52  ronous.  **   PR
7890: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
78a0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c  synchronous=OFF|
78b0: 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20  ON|NORMAL|FULL. 
78c0: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
78d0: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
78e0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79   value of the sy
78f0: 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20  nchronous flag. 
7900: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
7910: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64  he local value d
7920: 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61  oes not make cha
7930: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b  nges to the disk
7940: 20 66 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20   file and the.  
7950: 2a 2a 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ** default value
7960: 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65   will be restore
7970: 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
7980: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 0a  the database is.
7990: 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a    ** opened..  *
79a0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
79b0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a  _SYNCHRONOUS: {.
79c0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
79d0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
79e0: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
79f0: 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 20   "synchronous", 
7a00: 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65  pDb->safety_leve
7a10: 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  l-1);.    }else{
7a20: 0a 20 20 20 20 20 20 69 66 28 20 21 64 62 2d 3e  .      if( !db->
7a30: 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
7a40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
7a50: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 0a 20  orMsg(pParse, . 
7a60: 20 20 20 20 20 20 20 20 20 20 20 22 53 61 66 65             "Safe
7a70: 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74  ty level may not
7a80: 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69   be changed insi
7a90: 64 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  de a transaction
7aa0: 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ");.      }else{
7ab0: 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e 73 61  .        pDb->sa
7ac0: 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 67 65 74  fety_level = get
7ad0: 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67  SafetyLevel(zRig
7ae0: 68 74 2c 30 2c 31 29 2b 31 3b 0a 20 20 20 20 20  ht,0,1)+1;.     
7af0: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
7b00: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ags(db);.      }
7b10: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
7b20: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
7b30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
7b40: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
7b50: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7b60: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20  T_FLAG_PRAGMAS. 
7b70: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c   case PragTyp_FL
7b80: 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  AG: {.    if( zR
7b90: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
7ba0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7bb0: 28 70 50 61 72 73 65 2c 20 70 50 72 61 67 6d 61  (pParse, pPragma
7bc0: 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e 66 6c  ->zName, (db->fl
7bd0: 61 67 73 20 26 20 70 50 72 61 67 6d 61 2d 3e 69  ags & pPragma->i
7be0: 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d  Arg)!=0 );.    }
7bf0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
7c00: 6d 61 73 6b 20 3d 20 70 50 72 61 67 6d 61 2d 3e  mask = pPragma->
7c10: 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73 6b  iArg;    /* Mask
7c20: 20 6f 66 20 62 69 74 73 20 74 6f 20 73 65 74 20   of bits to set 
7c30: 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20  or clear. */.   
7c40: 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
7c50: 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ommit==0 ){.    
7c60: 20 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20 6b      /* Foreign k
7c70: 65 79 20 73 75 70 70 6f 72 74 20 6d 61 79 20 6e  ey support may n
7c80: 6f 74 20 62 65 20 65 6e 61 62 6c 65 64 20 6f 72  ot be enabled or
7c90: 20 64 69 73 61 62 6c 65 64 20 77 68 69 6c 65 20   disabled while 
7ca0: 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  not.        ** i
7cb0: 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f  n auto-commit mo
7cc0: 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20  de.  */.        
7cd0: 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45  mask &= ~(SQLITE
7ce0: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20  _ForeignKeys);. 
7cf0: 20 20 20 20 20 7d 0a 23 69 66 20 53 51 4c 49 54       }.#if SQLIT
7d00: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
7d10: 41 54 49 4f 4e 0a 20 20 20 20 20 20 69 66 28 20  ATION.      if( 
7d20: 64 62 2d 3e 61 75 74 68 2e 61 75 74 68 4c 65 76  db->auth.authLev
7d30: 65 6c 3d 3d 55 41 55 54 48 5f 55 73 65 72 20 29  el==UAUTH_User )
7d40: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20  {.        /* Do 
7d50: 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64  not allow non-ad
7d60: 6d 69 6e 20 75 73 65 72 73 20 74 6f 20 6d 6f 64  min users to mod
7d70: 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20 61  ify the schema a
7d80: 72 62 69 74 72 61 72 69 6c 79 20 2a 2f 0a 20 20  rbitrarily */.  
7d90: 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28        mask &= ~(
7da0: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
7db0: 6d 61 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  ma);.      }.#en
7dc0: 64 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20 73  dif..      if( s
7dd0: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
7de0: 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20  (zRight, 0) ){. 
7df0: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
7e00: 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20   |= mask;.      
7e10: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
7e20: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73  b->flags &= ~mas
7e30: 6b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6d  k;.        if( m
7e40: 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65  ask==SQLITE_Defe
7e50: 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65 66 65  rFKs ) db->nDefe
7e60: 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b  rredImmCons = 0;
7e70: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
7e80: 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65 20 66  /* Many of the f
7e90: 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69  lag-pragmas modi
7ea0: 66 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  fy the code gene
7eb0: 72 61 74 65 64 20 62 79 20 74 68 65 20 53 51 4c  rated by the SQL
7ec0: 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69   .      ** compi
7ed0: 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63  ler (eg. count_c
7ee0: 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64 64 20  hanges). So add 
7ef0: 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65 78 70  an opcode to exp
7f00: 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a  ire all.      **
7f10: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
7f20: 61 74 65 6d 65 6e 74 73 20 61 66 74 65 72 20 6d  atements after m
7f30: 6f 64 69 66 79 69 6e 67 20 61 20 70 72 61 67 6d  odifying a pragm
7f40: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a  a value..      *
7f50: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
7f60: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
7f70: 45 78 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20  Expire, 0, 0);. 
7f80: 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72       setAllPager
7f90: 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d  Flags(db);.    }
7fa0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7fb0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
7fc0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
7fd0: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
7fe0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
7ff0: 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  A_PRAGMAS.  /*. 
8000: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61 62   **   PRAGMA tab
8010: 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29  le_info(<table>)
8020: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
8030: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66  n a single row f
8040: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  or each column o
8050: 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  f the named tabl
8060: 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  e. The columns o
8070: 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75 72  f.  ** the retur
8080: 6e 65 64 20 64 61 74 61 20 73 65 74 20 61 72 65  ned data set are
8090: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a  :.  **.  ** cid:
80a0: 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69          Column i
80b0: 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  d (numbered from
80c0: 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c 20   left to right, 
80d0: 73 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a 20  starting at 0). 
80e0: 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20 20   ** name:       
80f0: 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a  Column name.  **
8100: 20 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f 6c   type:       Col
8110: 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  umn declaration 
8120: 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75  type..  ** notnu
8130: 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20 27  ll:    True if '
8140: 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61 72  NOT NULL' is par
8150: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
8160: 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c  aration.  ** dfl
8170: 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65 66  t_value: The def
8180: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
8190: 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e  he column, if an
81a0: 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  y..  */.  case P
81b0: 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46  ragTyp_TABLE_INF
81c0: 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  O: if( zRight ){
81d0: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
81e0: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
81f0: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
8200: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
8210: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
8220: 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a        int i, k;.
8230: 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64 64 65        int nHidde
8240: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c  n = 0;.      Col
8250: 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20  umn *pCol;.     
8260: 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20 73 71   Index *pPk = sq
8270: 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
8280: 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20  ndex(pTab);.    
8290: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
82a0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20  NumCols(v, 6);. 
82b0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
82c0: 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c  m = 6;.      sql
82d0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
82e0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
82f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8300: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
8310: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
8320: 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45  E, "cid", SQLITE
8330: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
8340: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8350: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
8360: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
8370: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8380: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8390: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
83a0: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
83b0: 2c 20 22 74 79 70 65 22 2c 20 53 51 4c 49 54 45  , "type", SQLITE
83c0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
83d0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
83e0: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
83f0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75  AME_NAME, "notnu
8400: 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ll", SQLITE_STAT
8410: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
8420: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
8430: 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 4, COLNAME_N
8440: 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65  AME, "dflt_value
8450: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
8460: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8470: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
8480: 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 5, COLNAME_NAM
8490: 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49 54 45 5f  E, "pk", SQLITE_
84a0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
84b0: 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
84c0: 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c  umnNames(pParse,
84d0: 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f   pTab);.      fo
84e0: 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62  r(i=0, pCol=pTab
84f0: 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e  ->aCol; i<pTab->
8500: 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b  nCol; i++, pCol+
8510: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
8520: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70  IsHiddenColumn(p
8530: 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Col) ){.        
8540: 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20    nHidden++;.   
8550: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
8560: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
8570: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8580: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
8590: 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e 2c 20 31  er, i-nHidden, 1
85a0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
85b0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
85c0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
85d0: 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65  , 0, pCol->zName
85e0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
85f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
8600: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
8610: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
8620: 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f     pCol->zType ?
8630: 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22   pCol->zType : "
8640: 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  ", 0);.        s
8650: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
8660: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
8670: 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f  (pCol->notNull ?
8680: 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a 20 20 20   1 : 0), 4);.   
8690: 20 20 20 20 20 69 66 28 20 70 43 6f 6c 2d 3e 7a       if( pCol->z
86a0: 44 66 6c 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Dflt ){.        
86b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
86c0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
86d0: 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28 63 68 61  8, 0, 5, 0, (cha
86e0: 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20  r*)pCol->zDflt, 
86f0: 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  0);.        }els
8700: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e{.          sql
8710: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
8720: 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29  , OP_Null, 0, 5)
8730: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
8740: 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63      if( (pCol->c
8750: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
8760: 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b  G_PRIMKEY)==0 ){
8770: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
8780: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
8790: 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20  if( pPk==0 ){.  
87a0: 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20          k = 1;. 
87b0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
87c0: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b          for(k=1;
87d0: 20 41 4c 57 41 59 53 28 6b 3c 3d 70 54 61 62 2d   ALWAYS(k<=pTab-
87e0: 3e 6e 43 6f 6c 29 20 26 26 20 70 50 6b 2d 3e 61  >nCol) && pPk->a
87f0: 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b  iColumn[k-1]!=i;
8800: 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20   k++){}.        
8810: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
8820: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8830: 50 5f 49 6e 74 65 67 65 72 2c 20 6b 2c 20 36 29  P_Integer, k, 6)
8840: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
8850: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8860: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
8870: 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  6);.      }.    
8880: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
8890: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53    case PragTyp_S
88a0: 54 41 54 53 3a 20 7b 0a 20 20 20 20 49 6e 64 65  TATS: {.    Inde
88b0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 48 61 73  x *pIdx;.    Has
88c0: 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20  hElem *i;.    v 
88d0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
88e0: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71  (pParse);.    sq
88f0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
8900: 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 70  ols(v, 4);.    p
8910: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b  Parse->nMem = 4;
8920: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65  .    sqlite3Code
8930: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
8940: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 73  rse, iDb);.    s
8950: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8960: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
8970: 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22  ME_NAME, "table"
8980: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8990: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
89a0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
89b0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
89c0: 22 69 6e 64 65 78 22 2c 20 53 51 4c 49 54 45 5f  "index", SQLITE_
89d0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
89e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
89f0: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
8a00: 5f 4e 41 4d 45 2c 20 22 77 69 64 74 68 22 2c 20  _NAME, "width", 
8a10: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8a20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8a30: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
8a40: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 68  COLNAME_NAME, "h
8a50: 65 69 67 68 74 22 2c 20 53 51 4c 49 54 45 5f 53  eight", SQLITE_S
8a60: 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
8a70: 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  i=sqliteHashFirs
8a80: 74 28 26 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t(&pDb->pSchema-
8a90: 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d  >tblHash); i; i=
8aa0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69  sqliteHashNext(i
8ab0: 29 29 7b 0a 20 20 20 20 20 20 54 61 62 6c 65 20  )){.      Table 
8ac0: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
8ad0: 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20 20  shData(i);.     
8ae0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8af0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
8b00: 2c 20 30 2c 20 31 2c 20 30 2c 20 70 54 61 62 2d  , 0, 1, 0, pTab-
8b10: 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  >zName, 0);.    
8b20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8b30: 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20  Op2(v, OP_Null, 
8b40: 30 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 2);.      sql
8b50: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
8b60: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20  , OP_Integer,.  
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b80: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71           (int)sq
8b90: 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
8ba0: 28 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29  (pTab->szTabRow)
8bb0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 3);.      sqli
8bc0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8bd0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a 20 20   OP_Integer, .  
8be0: 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c          (int)sql
8bf0: 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
8c00: 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74  pTab->nRowLogEst
8c10: 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 73 71 6c  ), 4);.      sql
8c20: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
8c30: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
8c40: 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 66 6f 72  1, 4);.      for
8c50: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
8c60: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
8c70: 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Idx->pNext){.   
8c80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8c90: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
8ca0: 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70  ing8, 0, 2, 0, p
8cb0: 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  Idx->zName, 0);.
8cc0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8cd0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8ce0: 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20 20 20  Integer,.       
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
8d10: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 49  e3LogEstToInt(pI
8d20: 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29 2c 20 33  dx->szIdxRow), 3
8d30: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8d40: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8d50: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a 20 20 20  OP_Integer, .   
8d60: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71           (int)sq
8d70: 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
8d80: 28 70 49 64 78 2d 3e 61 69 52 6f 77 4c 6f 67 45  (pIdx->aiRowLogE
8d90: 73 74 5b 30 5d 29 2c 20 34 29 3b 0a 20 20 20 20  st[0]), 4);.    
8da0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8db0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
8dc0: 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20  ltRow, 1, 4);.  
8dd0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
8de0: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65    break;..  case
8df0: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49   PragTyp_INDEX_I
8e00: 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20  NFO: if( zRight 
8e10: 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  ){.    Index *pI
8e20: 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  dx;.    Table *p
8e30: 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d 20  Tab;.    pIdx = 
8e40: 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
8e50: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
8e60: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 20  );.    if( pIdx 
8e70: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a  ){.      int i;.
8e80: 20 20 20 20 20 20 69 6e 74 20 6d 78 20 3d 20 70        int mx = p
8e90: 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 3f 20 70  Pragma->iArg ? p
8ea0: 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 20 3a 20 70  Idx->nColumn : p
8eb0: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20  Idx->nKeyCol;.  
8ec0: 20 20 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d      pTab = pIdx-
8ed0: 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73  >pTable;.      s
8ee0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
8ef0: 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20 20 20 20  Cols(v, 6);.    
8f00: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
8f10: 20 36 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   6;.      sqlite
8f20: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
8f30: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
8f40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8f50: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
8f60: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
8f70: 22 73 65 71 6e 6f 22 2c 20 53 51 4c 49 54 45 5f  "seqno", SQLITE_
8f80: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
8f90: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8fa0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
8fb0: 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20  ME_NAME, "cid", 
8fc0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8fd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8fe0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
8ff0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
9000: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
9010: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
9020: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9030: 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d  ame(v, 3, COLNAM
9040: 45 5f 4e 41 4d 45 2c 20 22 64 65 73 63 22 2c 20  E_NAME, "desc", 
9050: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9060: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9070: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34  eSetColName(v, 4
9080: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
9090: 22 63 6f 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53  "coll", SQLITE_S
90a0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
90b0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
90c0: 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d  ame(v, 5, COLNAM
90d0: 45 5f 4e 41 4d 45 2c 20 22 6b 65 79 22 2c 20 53  E_NAME, "key", S
90e0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
90f0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
9100: 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  mx; i++){.      
9110: 20 20 69 31 36 20 63 6e 75 6d 20 3d 20 70 49 64    i16 cnum = pId
9120: 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a  x->aiColumn[i];.
9130: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9140: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9150: 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a  Integer, i, 1);.
9160: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9170: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9180: 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20 32  Integer, cnum, 2
9190: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  );.        if( c
91a0: 6e 75 6d 3c 30 20 29 7b 0a 20 20 20 20 20 20 20  num<0 ){.       
91b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
91c0: 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c  dOp2(v, OP_Null,
91d0: 20 30 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   0, 3);.        
91e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
91f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9200: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
9210: 2c 20 30 2c 20 33 2c 20 30 2c 20 70 54 61 62 2d  , 0, 3, 0, pTab-
9220: 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d  >aCol[cnum].zNam
9230: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  e, 0);.        }
9240: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9250: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9260: 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e  _Integer, pIdx->
9270: 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 2c 20 34  aSortOrder[i], 4
9280: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9290: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
92a0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 35  OP_String8, 0, 5
92b0: 2c 20 30 2c 20 70 49 64 78 2d 3e 61 7a 43 6f 6c  , 0, pIdx->azCol
92c0: 6c 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[i], 0);.      
92d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
92e0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
92f0: 72 2c 20 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43  r, i<pIdx->nKeyC
9300: 6f 6c 2c 20 36 29 3b 0a 20 20 20 20 20 20 20 20  ol, 6);.        
9310: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9320: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
9330: 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20  w, 1, 6);.      
9340: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
9350: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
9360: 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a  gTyp_INDEX_LIST:
9370: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
9380: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
9390: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
93a0: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
93b0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
93c0: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67  ndTable(db, zRig
93d0: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
93e0: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
93f0: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
9400: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
9410: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9420: 4e 75 6d 43 6f 6c 73 28 76 2c 20 35 29 3b 0a 20  NumCols(v, 5);. 
9430: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
9440: 6d 20 3d 20 35 3b 0a 20 20 20 20 20 20 73 71 6c  m = 5;.      sql
9450: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
9460: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
9470: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9480: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9490: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
94a0: 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45  E, "seq", SQLITE
94b0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
94c0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
94d0: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
94e0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
94f0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9500: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9510: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
9520: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
9530: 2c 20 22 75 6e 69 71 75 65 22 2c 20 53 51 4c 49  , "unique", SQLI
9540: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9550: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9560: 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f  ColName(v, 3, CO
9570: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 72 69  LNAME_NAME, "ori
9580: 67 69 6e 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  gin", SQLITE_STA
9590: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
95a0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
95b0: 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 4, COLNAME_
95c0: 4e 41 4d 45 2c 20 22 70 61 72 74 69 61 6c 22 2c  NAME, "partial",
95d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
95e0: 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d  .      for(pIdx=
95f0: 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d  pTab->pIndex, i=
9600: 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  0; pIdx; pIdx=pI
9610: 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b  dx->pNext, i++){
9620: 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
9630: 68 61 72 20 2a 61 7a 4f 72 69 67 69 6e 5b 5d 20  har *azOrigin[] 
9640: 3d 20 7b 20 22 63 22 2c 20 22 75 22 2c 20 22 70  = { "c", "u", "p
9650: 6b 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 73 71  k" };.        sq
9660: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9670: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
9680: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 1);.        sq
9690: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
96a0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
96b0: 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e  , 2, 0, pIdx->zN
96c0: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
96d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
96e0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
96f0: 2c 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  , IsUniqueIndex(
9700: 70 49 64 78 29 2c 20 33 29 3b 0a 20 20 20 20 20  pIdx), 3);.     
9710: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9720: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
9730: 67 38 2c 20 30 2c 20 34 2c 20 30 2c 20 61 7a 4f  g8, 0, 4, 0, azO
9740: 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78 54  rigin[pIdx->idxT
9750: 79 70 65 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  ype], 0);.      
9760: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9770: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
9780: 72 2c 20 70 49 64 78 2d 3e 70 50 61 72 74 49 64  r, pIdx->pPartId
9790: 78 57 68 65 72 65 21 3d 30 2c 20 35 29 3b 0a 20  xWhere!=0, 5);. 
97a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
97b0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
97c0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 35 29 3b  esultRow, 1, 5);
97d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
97e0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
97f0: 61 73 65 20 50 72 61 67 54 79 70 5f 44 41 54 41  ase PragTyp_DATA
9800: 42 41 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20  BASE_LIST: {.   
9810: 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69   int i;.    sqli
9820: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
9830: 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61  s(v, 3);.    pPa
9840: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
9850: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9860: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
9870: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65  OLNAME_NAME, "se
9880: 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  q", SQLITE_STATI
9890: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
98a0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
98b0: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
98c0: 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45  , "name", SQLITE
98d0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
98e0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
98f0: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
9900: 45 5f 4e 41 4d 45 2c 20 22 66 69 6c 65 22 2c 20  E_NAME, "file", 
9910: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9920: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
9930: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
9940: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
9950: 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74  i].pBt==0 ) cont
9960: 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65  inue;.      asse
9970: 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  rt( db->aDb[i].z
9980: 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20  Name!=0 );.     
9990: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
99a0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
99b0: 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  , i, 1);.      s
99c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
99d0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
99e0: 30 2c 20 32 2c 20 30 2c 20 64 62 2d 3e 61 44 62  0, 2, 0, db->aDb
99f0: 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  [i].zName, 0);. 
9a00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9a10: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
9a20: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
9a30: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9a40: 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d  3BtreeGetFilenam
9a50: 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  e(db->aDb[i].pBt
9a60: 29 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  ), 0);.      sql
9a70: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9a80: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9a90: 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  1, 3);.    }.  }
9aa0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
9ab0: 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54  e PragTyp_COLLAT
9ac0: 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20  ION_LIST: {.    
9ad0: 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 48  int i = 0;.    H
9ae0: 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20  ashElem *p;.    
9af0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
9b00: 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20  mCols(v, 2);.   
9b10: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9b20: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  2;.    sqlite3Vd
9b30: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
9b40: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
9b50: 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53   "seq", SQLITE_S
9b60: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
9b70: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
9b80: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
9b90: 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51  NAME, "name", SQ
9ba0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9bb0: 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61    for(p=sqliteHa
9bc0: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f  shFirst(&db->aCo
9bd0: 6c 6c 53 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c  llSeq); p; p=sql
9be0: 69 74 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b  iteHashNext(p)){
9bf0: 0a 20 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a  .      CollSeq *
9c00: 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71  pColl = (CollSeq
9c10: 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74   *)sqliteHashDat
9c20: 61 28 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  a(p);.      sqli
9c30: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9c40: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2b 2b   OP_Integer, i++
9c50: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
9c60: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
9c70: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
9c80: 32 2c 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61  2, 0, pColl->zNa
9c90: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  me, 0);.      sq
9ca0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9cb0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9cc0: 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20   1, 2);.    }.  
9cd0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
9ce0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
9cf0: 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 20  _SCHEMA_PRAGMAS 
9d00: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
9d10: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
9d20: 4b 45 59 0a 20 20 63 61 73 65 20 50 72 61 67 54  KEY.  case PragT
9d30: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c  yp_FOREIGN_KEY_L
9d40: 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20  IST: if( zRight 
9d50: 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46 4b  ){.    FKey *pFK
9d60: 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  ;.    Table *pTa
9d70: 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71  b;.    pTab = sq
9d80: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
9d90: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  b, zRight, zDb);
9da0: 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b  .    if( pTab ){
9db0: 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
9dc0: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
9dd0: 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70  );.      pFK = p
9de0: 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20  Tab->pFKey;.    
9df0: 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20 20    if( pFK ){.   
9e00: 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20       int i = 0; 
9e10: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9e20: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
9e30: 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 70 50  , 8);.        pP
9e40: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a  arse->nMem = 8;.
9e50: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43          sqlite3C
9e60: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
9e70: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
9e80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9e90: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
9ea0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
9eb0: 22 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  "id", SQLITE_STA
9ec0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
9ed0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9ee0: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
9ef0: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
9f00: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
9f10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9f20: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
9f30: 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
9f40: 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45   "table", SQLITE
9f50: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
9f60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9f70: 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f  ColName(v, 3, CO
9f80: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 72 6f  LNAME_NAME, "fro
9f90: 6d 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  m", SQLITE_STATI
9fa0: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
9fb0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
9fc0: 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 4, COLNAME_
9fd0: 4e 41 4d 45 2c 20 22 74 6f 22 2c 20 53 51 4c 49  NAME, "to", SQLI
9fe0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9ff0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
a000: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20  etColName(v, 5, 
a010: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f  COLNAME_NAME, "o
a020: 6e 5f 75 70 64 61 74 65 22 2c 20 53 51 4c 49 54  n_update", SQLIT
a030: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
a040: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a050: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c 20 43  tColName(v, 6, C
a060: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e  OLNAME_NAME, "on
a070: 5f 64 65 6c 65 74 65 22 2c 20 53 51 4c 49 54 45  _delete", SQLITE
a080: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
a090: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a0a0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 37 2c 20 43 4f  ColName(v, 7, CO
a0b0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d 61 74  LNAME_NAME, "mat
a0c0: 63 68 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ch", SQLITE_STAT
a0d0: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69  IC);.        whi
a0e0: 6c 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20  le(pFK){.       
a0f0: 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
a100: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70      for(j=0; j<p
a110: 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a  FK->nCol; j++){.
a120: 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72              char
a130: 20 2a 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e 61 43   *zCol = pFK->aC
a140: 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20 20 20  ol[j].zCol;.    
a150: 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f          char *zO
a160: 6e 44 65 6c 65 74 65 20 3d 20 28 63 68 61 72 20  nDelete = (char 
a170: 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b  *)actionName(pFK
a180: 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 3b 0a 20  ->aAction[0]);. 
a190: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20             char 
a1a0: 2a 7a 4f 6e 55 70 64 61 74 65 20 3d 20 28 63 68  *zOnUpdate = (ch
a1b0: 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28  ar *)actionName(
a1c0: 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29  pFK->aAction[1])
a1d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
a1e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
a1f0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
a200: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
a210: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a220: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
a230: 72 2c 20 6a 2c 20 32 29 3b 0a 20 20 20 20 20 20  r, j, 2);.      
a240: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a250: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
a260: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20  ring8, 0, 3, 0, 
a270: 70 46 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20  pFK->zTo, 0);.  
a280: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a290: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
a2a0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c  P_String8, 0, 4,
a2b0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2d0: 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b    pTab->aCol[pFK
a2e0: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d  ->aCol[j].iFrom]
a2f0: 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  .zName, 0);.    
a300: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a310: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 7a 43 6f  dbeAddOp4(v, zCo
a320: 6c 20 3f 20 4f 50 5f 53 74 72 69 6e 67 38 20 3a  l ? OP_String8 :
a330: 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 2c 20   OP_Null, 0, 5, 
a340: 30 2c 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20 20  0, zCol, 0);.   
a350: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a360: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
a370: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 36 2c 20  _String8, 0, 6, 
a380: 30 2c 20 7a 4f 6e 55 70 64 61 74 65 2c 20 30 29  0, zOnUpdate, 0)
a390: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
a3a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
a3b0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
a3c0: 2c 20 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c 65 74  , 7, 0, zOnDelet
a3d0: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e, 0);.         
a3e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a3f0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
a400: 67 38 2c 20 30 2c 20 38 2c 20 30 2c 20 22 4e 4f  g8, 0, 8, 0, "NO
a410: 4e 45 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  NE", 0);.       
a420: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a430: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
a440: 75 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20  ultRow, 1, 8);. 
a450: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
a460: 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20       ++i;.      
a470: 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70      pFK = pFK->p
a480: 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20  NextFrom;.      
a490: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
a4a0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
a4b0: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
a4c0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
a4d0: 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23  REIGN_KEY) */..#
a4e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a4f0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23  IT_FOREIGN_KEY.#
a500: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a510: 49 54 5f 54 52 49 47 47 45 52 0a 20 20 63 61 73  IT_TRIGGER.  cas
a520: 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47  e PragTyp_FOREIG
a530: 4e 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20  N_KEY_CHECK: {. 
a540: 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20     FKey *pFK;   
a550: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66            /* A f
a560: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
a570: 72 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62  raint */.    Tab
a580: 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
a590: 20 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61 62      /* Child tab
a5a0: 6c 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46 45  le contain "REFE
a5b0: 52 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64 20  RENCES" keyword 
a5c0: 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 50  */.    Table *pP
a5d0: 61 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  arent;        /*
a5e0: 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74 68   Parent table th
a5f0: 61 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73 20  at child points 
a600: 74 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20  to */.    Index 
a610: 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20 20 20  *pIdx;          
a620: 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68 65   /* Index in the
a630: 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f   parent table */
a640: 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20  .    int i;     
a650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
a660: 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f  oop counter:  Fo
a670: 72 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72  reign key number
a680: 20 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20 20   for pTab */.   
a690: 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
a6a0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
a6b0: 63 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64 20  counter:  Field 
a6c0: 6f 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  of the foreign k
a6d0: 65 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c  ey */.    HashEl
a6e0: 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20  em *k;          
a6f0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
a700: 3a 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69 6e  :  Next table in
a710: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69   schema */.    i
a720: 6e 74 20 78 3b 20 20 20 20 20 20 20 20 20 20 20  nt x;           
a730: 20 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74 20        /* result 
a740: 76 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20  variable */.    
a750: 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
a760: 20 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67 69         /* 3 regi
a770: 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20  sters to hold a 
a780: 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20  result row */.  
a790: 20 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20 20    int regKey;   
a7a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
a7b0: 73 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79  ster to hold key
a7c0: 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74 68   for checking th
a7d0: 65 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20  e FK */.    int 
a7e0: 72 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20 20  regRow;         
a7f0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
a800: 74 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66 72  to hold a row fr
a810: 6f 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69  om pTab */.    i
a820: 6e 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20 20  nt addrTop;     
a830: 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20        /* Top of 
a840: 61 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20  a loop checking 
a850: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a  foreign keys */.
a860: 20 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20      int addrOk; 
a870: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75             /* Ju
a880: 6d 70 20 68 65 72 65 20 69 66 20 74 68 65 20 6b  mp here if the k
a890: 65 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20  ey is OK */.    
a8a0: 69 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20  int *aiCols;    
a8b0: 20 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64 20         /* child 
a8c0: 74 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e  to parent column
a8d0: 20 6d 61 70 70 69 6e 67 20 2a 2f 0a 0a 20 20 20   mapping */..   
a8e0: 20 72 65 67 52 65 73 75 6c 74 20 3d 20 70 50 61   regResult = pPa
a8f0: 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20  rse->nMem+1;.   
a900: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d   pParse->nMem +=
a910: 20 34 3b 0a 20 20 20 20 72 65 67 4b 65 79 20 3d   4;.    regKey =
a920: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
a930: 0a 20 20 20 20 72 65 67 52 6f 77 20 3d 20 2b 2b  .    regRow = ++
a940: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20  pParse->nMem;.  
a950: 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74    v = sqlite3Get
a960: 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20  Vdbe(pParse);.  
a970: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a980: 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20  NumCols(v, 4);. 
a990: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a9a0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
a9b0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61  OLNAME_NAME, "ta
a9c0: 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ble", SQLITE_STA
a9d0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
a9e0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
a9f0: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
aa00: 4d 45 2c 20 22 72 6f 77 69 64 22 2c 20 53 51 4c  ME, "rowid", SQL
aa10: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
aa20: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
aa30: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
aa40: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 61 72 65  NAME_NAME, "pare
aa50: 6e 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  nt", SQLITE_STAT
aa60: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
aa70: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
aa80: 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 3, COLNAME_NAM
aa90: 45 2c 20 22 66 6b 69 64 22 2c 20 53 51 4c 49 54  E, "fkid", SQLIT
aaa0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
aab0: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
aac0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
aad0: 44 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c  Db);.    k = sql
aae0: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
aaf0: 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65  ->aDb[iDb].pSche
ab00: 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20  ma->tblHash);.  
ab10: 20 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20    while( k ){.  
ab20: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
ab30: 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d  {.        pTab =
ab40: 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61   sqlite3LocateTa
ab50: 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 7a  ble(pParse, 0, z
ab60: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
ab70: 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20       k = 0;.    
ab80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
ab90: 20 70 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29   pTab = (Table*)
aba0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b  sqliteHashData(k
abb0: 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 73  );.        k = s
abc0: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 6b 29  qliteHashNext(k)
abd0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
abe0: 69 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70  if( pTab==0 || p
abf0: 54 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20  Tab->pFKey==0 ) 
ac00: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
ac10: 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
ac20: 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 54  (pParse, iDb, pT
ac30: 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61  ab->tnum, 0, pTa
ac40: 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  b->zName);.     
ac50: 20 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b   if( pTab->nCol+
ac60: 72 65 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e  regRow>pParse->n
ac70: 4d 65 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d  Mem ) pParse->nM
ac80: 65 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20  em = pTab->nCol 
ac90: 2b 20 72 65 67 52 6f 77 3b 0a 20 20 20 20 20 20  + regRow;.      
aca0: 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
acb0: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 2c  (pParse, 0, iDb,
acc0: 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65   pTab, OP_OpenRe
acd0: 61 64 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ad);.      sqlit
ace0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
acf0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72  OP_String8, 0, r
ad00: 65 67 52 65 73 75 6c 74 2c 20 30 2c 20 70 54 61  egResult, 0, pTa
ad10: 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  b->zName,.      
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad30: 20 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b    P4_TRANSIENT);
ad40: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20  .      for(i=1, 
ad50: 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b  pFK=pTab->pFKey;
ad60: 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70   pFK; i++, pFK=p
ad70: 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a  FK->pNextFrom){.
ad80: 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74 20          pParent 
ad90: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
ada0: 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c  le(db, pFK->zTo,
adb0: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 69   zDb);.        i
adc0: 66 28 20 70 50 61 72 65 6e 74 3d 3d 30 20 29 20  f( pParent==0 ) 
add0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
ade0: 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20    pIdx = 0;.    
adf0: 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65      sqlite3Table
ae00: 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62  Lock(pParse, iDb
ae10: 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c  , pParent->tnum,
ae20: 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e 7a 4e 61   0, pParent->zNa
ae30: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 78 20 3d  me);.        x =
ae40: 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
ae50: 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70 50  Index(pParse, pP
ae60: 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64  arent, pFK, &pId
ae70: 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69  x, 0);.        i
ae80: 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20  f( x==0 ){.     
ae90: 20 20 20 20 20 69 66 28 20 70 49 64 78 3d 3d 30       if( pIdx==0
aea0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
aeb0: 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
aec0: 28 70 50 61 72 73 65 2c 20 69 2c 20 69 44 62 2c  (pParse, i, iDb,
aed0: 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f 4f 70 65   pParent, OP_Ope
aee0: 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20  nRead);.        
aef0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
af00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
af10: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4f 70 65  AddOp3(v, OP_Ope
af20: 6e 52 65 61 64 2c 20 69 2c 20 70 49 64 78 2d 3e  nRead, i, pIdx->
af30: 74 6e 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20  tnum, iDb);.    
af40: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
af50: 64 62 65 53 65 74 50 34 4b 65 79 49 6e 66 6f 28  dbeSetP4KeyInfo(
af60: 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a 20  pParse, pIdx);. 
af70: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
af80: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
af90: 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20      k = 0;.     
afa0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
afb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
afc0: 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61 72      assert( pPar
afd0: 73 65 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20 70 46  se->nErr>0 || pF
afe0: 4b 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  K==0 );.      if
aff0: 28 20 70 46 4b 20 29 20 62 72 65 61 6b 3b 0a 20  ( pFK ) break;. 
b000: 20 20 20 20 20 69 66 28 20 70 50 61 72 73 65 2d       if( pParse-
b010: 3e 6e 54 61 62 3c 69 20 29 20 70 50 61 72 73 65  >nTab<i ) pParse
b020: 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20 20 20  ->nTab = i;.    
b030: 20 20 61 64 64 72 54 6f 70 20 3d 20 73 71 6c 69    addrTop = sqli
b040: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
b050: 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29 3b 20   OP_Rewind, 0); 
b060: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
b070: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20  .      for(i=1, 
b080: 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b  pFK=pTab->pFKey;
b090: 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70   pFK; i++, pFK=p
b0a0: 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a  FK->pNextFrom){.
b0b0: 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74 20          pParent 
b0c0: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
b0d0: 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c  le(db, pFK->zTo,
b0e0: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 70   zDb);.        p
b0f0: 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  Idx = 0;.       
b100: 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20 20   aiCols = 0;.   
b110: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
b120: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78 20   ){.          x 
b130: 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  = sqlite3FkLocat
b140: 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70  eIndex(pParse, p
b150: 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49  Parent, pFK, &pI
b160: 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20 20  dx, &aiCols);.  
b170: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
b180: 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  x==0 );.        
b190: 7d 0a 20 20 20 20 20 20 20 20 61 64 64 72 4f 6b  }.        addrOk
b1a0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61   = sqlite3VdbeMa
b1b0: 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20  keLabel(v);.    
b1c0: 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20      if( pParent 
b1d0: 26 26 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20  && pIdx==0 ){.  
b1e0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 4b 65 79          int iKey
b1f0: 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e   = pFK->aCol[0].
b200: 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 20  iFrom;.         
b210: 20 61 73 73 65 72 74 28 20 69 4b 65 79 3e 3d 30   assert( iKey>=0
b220: 20 26 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e 6e   && iKey<pTab->n
b230: 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20  Col );.         
b240: 20 69 66 28 20 69 4b 65 79 21 3d 70 54 61 62 2d   if( iKey!=pTab-
b250: 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  >iPKey ){.      
b260: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b270: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
b280: 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20 72  lumn, 0, iKey, r
b290: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
b2a0: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d      sqlite3Colum
b2b0: 6e 44 65 66 61 75 6c 74 28 76 2c 20 70 54 61 62  nDefault(v, pTab
b2c0: 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b  , iKey, regRow);
b2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
b2e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b2f0: 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67  , OP_IsNull, reg
b300: 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64  Row, addrOk); Vd
b310: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
b320: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b330: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b340: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c 20 72 65  OP_MustBeInt, re
b350: 67 52 6f 77 2c 20 0a 20 20 20 20 20 20 20 20 20  gRow, .         
b360: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b370: 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 2b  eCurrentAddr(v)+
b380: 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  3); VdbeCoverage
b390: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  (v);.          }
b3a0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
b3b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b3c0: 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c  Op2(v, OP_Rowid,
b3d0: 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20   0, regRow);.   
b3e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
b3f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b400: 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f 74 45 78  dOp3(v, OP_NotEx
b410: 69 73 74 73 2c 20 69 2c 20 30 2c 20 72 65 67 52  ists, i, 0, regR
b420: 6f 77 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  ow); VdbeCoverag
b430: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
b440: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b450: 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c  2(v, OP_Goto, 0,
b460: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
b470: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
b480: 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c 69 74  umpHere(v, sqlit
b490: 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
b4a0: 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20 20 20  r(v)-2);.       
b4b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
b4c0: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b    for(j=0; j<pFK
b4d0: 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20  ->nCol; j++){.  
b4e0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b4f0: 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
b500: 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61  mnOfTable(v, pTa
b510: 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  b, 0,.          
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b530: 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c    aiCols ? aiCol
b540: 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c  s[j] : pFK->aCol
b550: 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f  [j].iFrom, regRo
b560: 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  w+j);.          
b570: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b580: 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op2(v, OP_IsNull
b590: 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72  , regRow+j, addr
b5a0: 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  Ok); VdbeCoverag
b5b0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
b5c0: 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  }.          if( 
b5d0: 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20  pParent ){.     
b5e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b5f0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d  beAddOp4(v, OP_M
b600: 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f  akeRecord, regRo
b610: 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65  w, pFK->nCol, re
b620: 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  gKey,.          
b630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b640: 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65 78      sqlite3Index
b650: 41 66 66 69 6e 69 74 79 53 74 72 28 76 2c 70 49  AffinityStr(v,pI
b660: 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b  dx), pFK->nCol);
b670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
b680: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e  ite3VdbeAddOp4In
b690: 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69  t(v, OP_Found, i
b6a0: 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79  , addrOk, regKey
b6b0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
b6c0: 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
b6d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
b6e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
b6f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b700: 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20  p2(v, OP_Rowid, 
b710: 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 31 29 3b  0, regResult+1);
b720: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b730: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
b740: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67  _String8, 0, reg
b750: 52 65 73 75 6c 74 2b 32 2c 20 30 2c 20 0a 20 20  Result+2, 0, .  
b760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b770: 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f          pFK->zTo
b780: 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b  , P4_TRANSIENT);
b790: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b7a0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
b7b0: 5f 49 6e 74 65 67 65 72 2c 20 69 2d 31 2c 20 72  _Integer, i-1, r
b7c0: 65 67 52 65 73 75 6c 74 2b 33 29 3b 0a 20 20 20  egResult+3);.   
b7d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b7e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
b7f0: 75 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c  ultRow, regResul
b800: 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73  t, 4);.        s
b810: 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76  qlite3VdbeResolv
b820: 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b  eLabel(v, addrOk
b830: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b840: 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 69 43  e3DbFree(db, aiC
b850: 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ols);.      }.  
b860: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b870: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp2(v, OP_Next
b880: 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b  , 0, addrTop+1);
b890: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
b8a0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
b8b0: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
b8c0: 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20  ddrTop);.    }. 
b8d0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
b8e0: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
b8f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
b900: 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ER) */.#endif /*
b910: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
b920: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
b930: 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e  Y) */..#ifndef N
b940: 44 45 42 55 47 0a 20 20 63 61 73 65 20 50 72 61  DEBUG.  case Pra
b950: 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43  gTyp_PARSER_TRAC
b960: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  E: {.    if( zRi
b970: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
b980: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
b990: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b  an(zRight, 0) ){
b9a0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b9b0: 50 61 72 73 65 72 54 72 61 63 65 28 73 74 64 65  ParserTrace(stde
b9c0: 72 72 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b  rr, "parser: ");
b9d0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
b9e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72        sqlite3Par
b9f0: 73 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a  serTrace(0, 0);.
ba00: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
ba10: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
ba20: 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c  f..  /* Reinstal
ba30: 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64 20 47  l the LIKE and G
ba40: 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  LOB functions.  
ba50: 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66 20 4c  The variant of L
ba60: 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20 77 69  IKE.  ** used wi
ba70: 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e 73 69  ll be case sensi
ba80: 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65 70 65  tive or not depe
ba90: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52 48 53  nding on the RHS
baa0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
bab0: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
bac0: 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20  TIVE_LIKE: {.   
bad0: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
bae0: 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69       sqlite3Regi
baf0: 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
bb00: 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74  s(db, sqlite3Get
bb10: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
bb20: 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  0));.    }.  }. 
bb30: 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66   break;..#ifndef
bb40: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
bb50: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
bb60: 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  X.# define SQLIT
bb70: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
bb80: 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a  K_ERROR_MAX 100.
bb90: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
bba0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
bbb0: 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a  GRITY_CHECK.  /*
bbc0: 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f 63   Pragma "quick_c
bbd0: 68 65 63 6b 22 20 69 73 20 72 65 64 75 63 65 64  heck" is reduced
bbe0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a   version of .  *
bbf0: 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  * integrity_chec
bc00: 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64 65  k designed to de
bc10: 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62 61  tect most databa
bc20: 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20  se corruption.  
bc30: 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74 20  ** without most 
bc40: 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61 64 20  of the overhead 
bc50: 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67 72  of a full integr
bc60: 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a  ity-check..  */.
bc70: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
bc80: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a 20  NTEGRITY_CHECK: 
bc90: 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20  {.    int i, j, 
bca0: 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20  addr, mxErr;..  
bcb0: 20 20 2f 2a 20 43 6f 64 65 20 74 68 61 74 20 61    /* Code that a
bcc0: 70 70 65 61 72 73 20 61 74 20 74 68 65 20 65 6e  ppears at the en
bcd0: 64 20 6f 66 20 74 68 65 20 69 6e 74 65 67 72 69  d of the integri
bce0: 74 79 20 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f  ty check.  If no
bcf0: 20 65 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65   error.    ** me
bd00: 73 73 61 67 65 73 20 68 61 76 65 20 62 65 65 6e  ssages have been
bd10: 20 67 65 6e 65 72 61 74 65 64 2c 20 6f 75 74 70   generated, outp
bd20: 75 74 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73  ut OK.  Otherwis
bd30: 65 20 6f 75 74 70 75 74 20 74 68 65 0a 20 20 20  e output the.   
bd40: 20 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67   ** error messag
bd50: 65 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 74 61  e.    */.    sta
bd60: 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c  tic const int iL
bd70: 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f  n = VDBE_OFFSET_
bd80: 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73  LINENO(2);.    s
bd90: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
bda0: 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d  OpList endCode[]
bdb0: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
bdc0: 49 66 4e 65 67 2c 20 20 20 20 20 20 20 31 2c 20  IfNeg,       1, 
bdd0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
bde0: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 0 */.      {
bdf0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20   OP_String8,    
be00: 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d   0, 3,        0}
be10: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
be20: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
be30: 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20 20 20  w,   3, 1,      
be40: 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20    0},.    };..  
be50: 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d 20    int isQuick = 
be60: 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28  (sqlite3Tolower(
be70: 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b  zLeft[0])=='q');
be80: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
be90: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77  PRAGMA command w
bea0: 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  as of the form "
beb0: 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65  PRAGMA <db>.inte
bec0: 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20  grity_check",.  
bed0: 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69 73    ** then iDb is
bee0: 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64 65   set to the inde
bef0: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
bf00: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
bf10: 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20  <db>..    ** In 
bf20: 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 69  this case, the i
bf30: 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61 74 61  ntegrity of data
bf40: 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69 73  base iDb only is
bf50: 20 76 65 72 69 66 69 65 64 20 62 79 0a 20 20 20   verified by.   
bf60: 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72 65   ** the VDBE cre
bf70: 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20  ated below..    
bf80: 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 77  **.    ** Otherw
bf90: 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d  ise, if the comm
bfa0: 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20 22  and was simply "
bfb0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
bfc0: 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20 20  _check" (or.    
bfd0: 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63 6b  ** "PRAGMA quick
bfe0: 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20 69  _check"), then i
bff0: 44 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e 20  Db is set to 0. 
c000: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65  In this case, se
c010: 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20  t iDb.    ** to 
c020: 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64 69  -1 here, to indi
c030: 63 61 74 65 20 74 68 61 74 20 74 68 65 20 56 44  cate that the VD
c040: 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66 79  BE should verify
c050: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a 20   the integrity. 
c060: 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74     ** of all att
c070: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
c080: 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
c090: 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61   iDb>=0 );.    a
c0a0: 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c  ssert( iDb==0 ||
c0b0: 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20   pId2->z );.    
c0c0: 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29  if( pId2->z==0 )
c0d0: 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20   iDb = -1;..    
c0e0: 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68  /* Initialize th
c0f0: 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 2a  e VDBE program *
c100: 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  /.    pParse->nM
c110: 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71 6c 69  em = 6;.    sqli
c120: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
c130: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  s(v, 1);.    sql
c140: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c150: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
c160: 5f 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72 69 74  _NAME, "integrit
c170: 79 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49 54 45  y_check", SQLITE
c180: 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 2f  _STATIC);..    /
c190: 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75  * Set the maximu
c1a0: 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f  m error count */
c1b0: 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c  .    mxErr = SQL
c1c0: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
c1d0: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20  ECK_ERROR_MAX;. 
c1e0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
c1f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65  .      sqlite3Ge
c200: 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26  tInt32(zRight, &
c210: 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66  mxErr);.      if
c220: 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20  ( mxErr<=0 ){.  
c230: 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51        mxErr = SQ
c240: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
c250: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a  HECK_ERROR_MAX;.
c260: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
c270: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c280: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c290: 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f  r, mxErr, 1);  /
c2a0: 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65  * reg[1] holds e
c2b0: 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20  rrors left */.. 
c2c0: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
c2d0: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65  grity check on e
c2e0: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
c2f0: 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30  e */.    for(i=0
c300: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
c310: 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65  ){.      HashEle
c320: 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73 68  m *x;.      Hash
c330: 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20 69   *pTbls;.      i
c340: 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  nt cnt = 0;..   
c350: 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50     if( OMIT_TEMP
c360: 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e  DB && i==1 ) con
c370: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28  tinue;.      if(
c380: 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69 44   iDb>=0 && i!=iD
c390: 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20  b ) continue;.. 
c3a0: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
c3b0: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
c3c0: 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 61  rse, i);.      a
c3d0: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
c3e0: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
c3f0: 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74  Pos, 1); /* Halt
c400: 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72   if out of error
c410: 73 20 2a 2f 0a 20 20 20 20 20 20 56 64 62 65 43  s */.      VdbeC
c420: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
c430: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c440: 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20  Op2(v, OP_Halt, 
c450: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 0);.      sql
c460: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
c470: 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20  (v, addr);..    
c480: 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67    /* Do an integ
c490: 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74 68  rity check of th
c4a0: 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20 2a  e B-Tree.      *
c4b0: 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67 69 6e  *.      ** Begin
c4c0: 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65 67 69   by filling regi
c4d0: 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e 20  sters 2, 3, ... 
c4e0: 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20 70 61  with the root pa
c4f0: 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20 20  ges numbers.    
c500: 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62    ** for all tab
c510: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20  les and indices 
c520: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
c530: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
c540: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
c550: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
c560: 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20 20  b, i, 0) );.    
c570: 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61    pTbls = &db->a
c580: 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74  Db[i].pSchema->t
c590: 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66 6f  blHash;.      fo
c5a0: 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(x=sqliteHashFi
c5b0: 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20 78  rst(pTbls); x; x
c5c0: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
c5d0: 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62  x)){.        Tab
c5e0: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
c5f0: 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20  eHashData(x);.  
c600: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64        Index *pId
c610: 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 48  x;.        if( H
c620: 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b  asRowid(pTab) ){
c630: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
c640: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c650: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61 62  OP_Integer, pTab
c660: 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a  ->tnum, 2+cnt);.
c670: 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f            VdbeCo
c680: 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20  mment((v, "%s", 
c690: 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20  pTab->zName));. 
c6a0: 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a           cnt++;.
c6b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
c6c0: 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d    for(pIdx=pTab-
c6d0: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
c6e0: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29  Idx=pIdx->pNext)
c6f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
c700: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c710: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64   OP_Integer, pId
c720: 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b  x->tnum, 2+cnt);
c730: 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43  .          VdbeC
c740: 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c  omment((v, "%s",
c750: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a   pIdx->zName));.
c760: 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b            cnt++;
c770: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
c780: 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   }..      /* Mak
c790: 65 20 73 75 72 65 20 73 75 66 66 69 63 69 65 6e  e sure sufficien
c7a0: 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  t number of regi
c7b0: 73 74 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  sters have been 
c7c0: 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20  allocated */.   
c7d0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
c7e0: 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e 6e  = MAX( pParse->n
c7f0: 4d 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a 20  Mem, cnt+8 );.. 
c800: 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65 20 62       /* Do the b
c810: 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74 79 20  -tree integrity 
c820: 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20  checks */.      
c830: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c840: 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74  3(v, OP_Integrit
c850: 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29 3b  yCk, 2, cnt, 1);
c860: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c870: 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28 75  beChangeP5(v, (u
c880: 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  8)i);.      addr
c890: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
c8a0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp1(v, OP_IsNul
c8b0: 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76 65 72  l, 2); VdbeCover
c8c0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
c8d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c8e0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c8f0: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
c900: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
c910: 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61  db, "*** in data
c920: 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20  base %s ***\n", 
c930: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
c940: 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f 44  ),.         P4_D
c950: 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 73  YNAMIC);.      s
c960: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
c970: 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20  (v, OP_Move, 2, 
c980: 34 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  4, 1);.      sql
c990: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
c9a0: 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20  , OP_Concat, 4, 
c9b0: 33 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c  3, 2);.      sql
c9c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c9d0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
c9e0: 32 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  2, 1);.      sql
c9f0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
ca00: 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20  (v, addr);..    
ca10: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
ca20: 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73 20 61  ll the indices a
ca30: 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 63  re constructed c
ca40: 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20 20 20  orrectly..      
ca50: 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73  */.      for(x=s
ca60: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70  qliteHashFirst(p
ca70: 54 62 6c 73 29 3b 20 78 20 26 26 20 21 69 73 51  Tbls); x && !isQ
ca80: 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61  uick; x=sqliteHa
ca90: 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20  shNext(x)){.    
caa0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20      Table *pTab 
cab0: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
cac0: 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  (x);.        Ind
cad0: 65 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a  ex *pIdx, *pPk;.
cae0: 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70          Index *p
caf0: 50 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20  Prior = 0;.     
cb00: 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a     int loopTop;.
cb10: 20 20 20 20 20 20 20 20 69 6e 74 20 69 44 61 74          int iDat
cb20: 61 43 75 72 2c 20 69 49 64 78 43 75 72 3b 0a 20  aCur, iIdxCur;. 
cb30: 20 20 20 20 20 20 20 69 6e 74 20 72 31 20 3d 20         int r1 = 
cb40: 2d 31 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28  -1;..        if(
cb50: 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30   pTab->pIndex==0
cb60: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
cb70: 20 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52 6f       pPk = HasRo
cb80: 77 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a 20  wid(pTab) ? 0 : 
cb90: 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
cba0: 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20  yIndex(pTab);.  
cbb0: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
cbc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
cbd0: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
cbe0: 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74 20   /* Stop if out 
cbf0: 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20  of errors */.   
cc00: 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67       VdbeCoverag
cc10: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71  e(v);.        sq
cc20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
cc30: 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
cc40: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
cc50: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
cc60: 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20  , addr);.       
cc70: 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
cc80: 65 43 6c 65 61 72 28 70 50 61 72 73 65 29 3b 0a  eClear(pParse);.
cc90: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f          sqlite3O
cca0: 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
ccb0: 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 2c  es(pParse, pTab,
ccc0: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 0a 20 20   OP_OpenRead,.  
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75 72   1, 0, &iDataCur
cd00: 2c 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20 20  , &iIdxCur);.   
cd10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cd20: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
cd30: 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20  eger, 0, 7);.   
cd40: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
cd50: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
cd60: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
cd70: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
cd80: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
cd90: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
cda0: 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a  _Integer, 0, 8+j
cdb0: 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72  ); /* index entr
cdc0: 69 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  ies counter */. 
cdd0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
cde0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
cdf0: 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  MAX(pParse->nMem
ce00: 2c 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20  , 8+j);.        
ce10: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ce20: 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20  2(v, OP_Rewind, 
ce30: 69 44 61 74 61 43 75 72 2c 20 30 29 3b 20 56 64  iDataCur, 0); Vd
ce40: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
ce50: 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d         loopTop =
ce60: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ce70: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
ce80: 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   7, 1);.        
ce90: 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61  /* Verify that a
cea0: 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75  ll NOT NULL colu
ceb0: 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72 65 20 4e  mns really are N
cec0: 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20  OT NULL */.     
ced0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54     for(j=0; j<pT
cee0: 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a  ab->nCol; j++){.
cef0: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
cf00: 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20 20 20  zErr;.          
cf10: 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a  int jmp2, jmp3;.
cf20: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6a 3d            if( j=
cf30: 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 20 63  =pTab->iPKey ) c
cf40: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
cf50: 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f     if( pTab->aCo
cf60: 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20  l[j].notNull==0 
cf70: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
cf80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
cf90: 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
cfa0: 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 69  Table(v, pTab, i
cfb0: 44 61 74 61 43 75 72 2c 20 6a 2c 20 33 29 3b 0a  DataCur, j, 3);.
cfc0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cfd0: 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
cfe0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
cff0: 47 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d  G);.          jm
d000: 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p2 = sqlite3Vdbe
d010: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 6f 74  AddOp1(v, OP_Not
d020: 4e 75 6c 6c 2c 20 33 29 3b 20 56 64 62 65 43 6f  Null, 3); VdbeCo
d030: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d040: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d050: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
d060: 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20  Imm, 1, -1); /* 
d070: 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20  Decrement error 
d080: 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  limit */.       
d090: 20 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65     zErr = sqlite
d0a0: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 4e 55  3MPrintf(db, "NU
d0b0: 4c 4c 20 76 61 6c 75 65 20 69 6e 20 25 73 2e 25  LL value in %s.%
d0c0: 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  s", pTab->zName,
d0d0: 0a 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 70                 p
d0f0: 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61  Tab->aCol[j].zNa
d100: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  me);.          s
d110: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
d120: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
d130: 30 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c 20 50  0, 3, 0, zErr, P
d140: 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20  4_DYNAMIC);.    
d150: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d160: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
d170: 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a  sultRow, 3, 1);.
d180: 20 20 20 20 20 20 20 20 20 20 6a 6d 70 33 20 3d            jmp3 =
d190: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d1a0: 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
d1b0: 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  1); VdbeCoverage
d1c0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
d1d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30  qlite3VdbeAddOp0
d1e0: 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20  (v, OP_Halt);.  
d1f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d200: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
d210: 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp2);.          
d220: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
d230: 65 72 65 28 76 2c 20 6a 6d 70 33 29 3b 0a 20 20  ere(v, jmp3);.  
d240: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
d250: 2f 2a 20 56 61 6c 69 64 61 74 65 20 69 6e 64 65  /* Validate inde
d260: 78 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68  x entries for th
d270: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 2a 2f  e current row */
d280: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
d290: 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  , pIdx=pTab->pIn
d2a0: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
d2b0: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b  pIdx->pNext, j++
d2c0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
d2d0: 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70   jmp2, jmp3, jmp
d2e0: 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20 20 20  4, jmp5;.       
d2f0: 20 20 20 69 6e 74 20 63 6b 55 6e 69 71 20 3d 20     int ckUniq = 
d300: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c  sqlite3VdbeMakeL
d310: 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20  abel(v);.       
d320: 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78     if( pPk==pIdx
d330: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
d340: 20 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c 69         r1 = sqli
d350: 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
d360: 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49 64 78  Key(pParse, pIdx
d370: 2c 20 69 44 61 74 61 43 75 72 2c 20 30 2c 20 30  , iDataCur, 0, 0
d380: 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20 20 20  , &jmp3,.       
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3b0: 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20 20 20  pPrior, r1);.   
d3c0: 20 20 20 20 20 20 20 70 50 72 69 6f 72 20 3d 20         pPrior = 
d3d0: 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 20 20  pIdx;.          
d3e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d3f0: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
d400: 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69 6e 63  8+j, 1);  /* inc
d410: 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f 75  rement entry cou
d420: 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
d430: 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61  /* Verify that a
d440: 6e 20 69 6e 64 65 78 20 65 6e 74 72 79 20 65 78  n index entry ex
d450: 69 73 74 73 20 66 6f 72 20 74 68 65 20 63 75 72  ists for the cur
d460: 72 65 6e 74 20 74 61 62 6c 65 20 72 6f 77 20 2a  rent table row *
d470: 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32  /.          jmp2
d480: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
d490: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
d4a0: 75 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  und, iIdxCur+j, 
d4b0: 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20 20 20  ckUniq, r1,.    
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4e0: 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29    pIdx->nColumn)
d4f0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
d500: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d510: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d520: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
d530: 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e  -1); /* Decremen
d540: 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f  t error limit */
d550: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d560: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
d570: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
d580: 2c 20 30 2c 20 22 72 6f 77 20 22 2c 20 50 34 5f  , 0, "row ", P4_
d590: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
d5a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d5b0: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
d5c0: 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 7, 3, 3);.   
d5d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d5e0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d5f0: 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c  tring8, 0, 4, 0,
d600: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
d620: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
d630: 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29  ex ", P4_STATIC)
d640: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d650: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
d660: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33   OP_Concat, 4, 3
d670: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
d680: 6a 6d 70 35 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp5 = sqlite3Vd
d690: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d6a0: 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c  tring8, 0, 4, 0,
d6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6d0: 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c      pIdx->zName,
d6e0: 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a   P4_TRANSIENT);.
d6f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d700: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
d710: 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20  P_Concat, 4, 3, 
d720: 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  3);.          sq
d730: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d740: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
d750: 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   3, 1);.        
d760: 20 20 6a 6d 70 34 20 3d 20 73 71 6c 69 74 65 33    jmp4 = sqlite3
d770: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
d780: 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65  _IfPos, 1); Vdbe
d790: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
d7a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d7b0: 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48  beAddOp0(v, OP_H
d7c0: 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  alt);.          
d7d0: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
d7e0: 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20  ere(v, jmp2);.  
d7f0: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 55          /* For U
d800: 4e 49 51 55 45 20 69 6e 64 65 78 65 73 2c 20 76  NIQUE indexes, v
d810: 65 72 69 66 79 20 74 68 61 74 20 6f 6e 6c 79 20  erify that only 
d820: 6f 6e 65 20 65 6e 74 72 79 20 65 78 69 73 74 73  one entry exists
d830: 20 77 69 74 68 20 74 68 65 0a 20 20 20 20 20 20   with the.      
d840: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6b      ** current k
d850: 65 79 2e 20 20 54 68 65 20 65 6e 74 72 79 20 69  ey.  The entry i
d860: 73 20 75 6e 69 71 75 65 20 69 66 20 28 31 29 20  s unique if (1) 
d870: 61 6e 79 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55  any column is NU
d880: 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  LL.          ** 
d890: 6f 72 20 28 32 29 20 74 68 65 20 6e 65 78 74 20  or (2) the next 
d8a0: 65 6e 74 72 79 20 68 61 73 20 61 20 64 69 66 66  entry has a diff
d8b0: 65 72 65 6e 74 20 6b 65 79 20 2a 2f 0a 20 20 20  erent key */.   
d8c0: 20 20 20 20 20 20 20 69 66 28 20 49 73 55 6e 69         if( IsUni
d8d0: 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 20 29  queIndex(pIdx) )
d8e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  {.            in
d8f0: 74 20 75 6e 69 71 4f 6b 20 3d 20 73 71 6c 69 74  t uniqOk = sqlit
d900: 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28  e3VdbeMakeLabel(
d910: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
d920: 69 6e 74 20 6a 6d 70 36 3b 0a 20 20 20 20 20 20  int jmp6;.      
d930: 20 20 20 20 20 20 69 6e 74 20 6b 6b 3b 0a 20 20        int kk;.  
d940: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 6b            for(kk
d950: 3d 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b 65  =0; kk<pIdx->nKe
d960: 79 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20 20  yCol; kk++){.   
d970: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
d980: 43 6f 6c 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f  Col = pIdx->aiCo
d990: 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20 20 20  lumn[kk];.      
d9a0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
d9b0: 69 43 6f 6c 3e 3d 30 20 26 26 20 69 43 6f 6c 3c  iCol>=0 && iCol<
d9c0: 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20  pTab->nCol );.  
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
d9e0: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d  pTab->aCol[iCol]
d9f0: 2e 6e 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e 74 69  .notNull ) conti
da00: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  nue;.           
da10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
da20: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
da30: 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b  l, r1+kk, uniqOk
da40: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
da50: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
da60: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
da70: 20 20 20 20 20 20 20 20 20 20 20 20 6a 6d 70 36              jmp6
da80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
da90: 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 65 78 74 2c  dOp1(v, OP_Next,
daa0: 20 69 49 64 78 43 75 72 2b 6a 29 3b 20 56 64 62   iIdxCur+j); Vdb
dab0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
dac0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
dad0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
dae0: 50 5f 47 6f 74 6f 2c 20 30 2c 20 75 6e 69 71 4f  P_Goto, 0, uniqO
daf0: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  k);.            
db00: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
db10: 65 72 65 28 76 2c 20 6a 6d 70 36 29 3b 0a 20 20  ere(v, jmp6);.  
db20: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
db30: 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
db40: 2c 20 4f 50 5f 49 64 78 47 54 2c 20 69 49 64 78  , OP_IdxGT, iIdx
db50: 43 75 72 2b 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72  Cur+j, uniqOk, r
db60: 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1,.             
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db80: 20 20 20 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f      pIdx->nKeyCo
db90: 6c 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  l); VdbeCoverage
dba0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
dbb0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
dbc0: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
dbd0: 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72   1, -1); /* Decr
dbe0: 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69  ement error limi
dbf0: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  t */.           
dc00: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
dc10: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
dc20: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc40: 20 20 20 20 20 20 20 20 20 22 6e 6f 6e 2d 75 6e           "non-un
dc50: 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e  ique entry in in
dc60: 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43  dex ", P4_STATIC
dc70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
dc80: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
dc90: 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20  (v, OP_Goto, 0, 
dca0: 6a 6d 70 35 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp5);.         
dcb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
dcc0: 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 75 6e  solveLabel(v, un
dcd0: 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  iqOk);.         
dce0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c   }.          sql
dcf0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
dd00: 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20 20 20 20  (v, jmp4);.     
dd10: 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 6f       sqlite3Reso
dd20: 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
dd30: 70 50 61 72 73 65 2c 20 6a 6d 70 33 29 3b 0a 20  pParse, jmp3);. 
dd40: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
dd50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
dd60: 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69  p2(v, OP_Next, i
dd70: 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70 54 6f 70  DataCur, loopTop
dd80: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
dd90: 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  v);.        sqli
dda0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
ddb0: 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23  v, loopTop-1);.#
ddc0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
ddd0: 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20 20  IT_BTREECOUNT.  
dde0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ddf0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
de00: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
de10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de20: 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23 20 6f        "wrong # o
de30: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
de40: 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29  ex ", P4_STATIC)
de50: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  ;.        for(j=
de60: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
de70: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
de80: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
de90: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
dea0: 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f  ( pPk==pIdx ) co
deb0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
dec0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
ded0: 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28  VdbeCurrentAddr(
dee0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
def0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
df00: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20  v, OP_IfPos, 1, 
df10: 61 64 64 72 2b 32 29 3b 20 56 64 62 65 43 6f 76  addr+2); VdbeCov
df20: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
df30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
df40: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
df50: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
df60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
df70: 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e 74  dOp2(v, OP_Count
df80: 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 33 29 3b  , iIdxCur+j, 3);
df90: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
dfa0: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
dfb0: 4f 50 5f 45 71 2c 20 38 2b 6a 2c 20 61 64 64 72  OP_Eq, 8+j, addr
dfc0: 2b 38 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65  +8, 3); VdbeCove
dfd0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
dfe0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
dff0: 61 6e 67 65 50 35 28 76 2c 20 53 51 4c 49 54 45  angeP5(v, SQLITE
e000: 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a 20 20 20 20 20  _NOTNULL);.     
e010: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e020: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
e030: 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20  Imm, 1, -1);.   
e040: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e050: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
e060: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
e070: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34   pIdx->zName, P4
e080: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
e090: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e0a0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
e0b0: 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37 29 3b  oncat, 3, 2, 7);
e0c0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
e0d0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e0e0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 37 2c  OP_ResultRow, 7,
e0f0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23   1);.        }.#
e100: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
e110: 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 20  OMIT_BTREECOUNT 
e120: 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20  */.      } .    
e130: 7d 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c  }.    addr = sql
e140: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
e150: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 65  t(v, ArraySize(e
e160: 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64 65  ndCode), endCode
e170: 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 73 71 6c 69  , iLn);.    sqli
e180: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 33 28  te3VdbeChangeP3(
e190: 76 2c 20 61 64 64 72 2c 20 2d 6d 78 45 72 72 29  v, addr, -mxErr)
e1a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
e1b0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
e1c0: 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  r);.    sqlite3V
e1d0: 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61  dbeChangeP4(v, a
e1e0: 64 64 72 2b 31 2c 20 22 6f 6b 22 2c 20 50 34 5f  ddr+1, "ok", P4_
e1f0: 53 54 41 54 49 43 29 3b 0a 20 20 7d 0a 20 20 62  STATIC);.  }.  b
e200: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
e210: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
e220: 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
e230: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e240: 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20  MIT_UTF16.  /*. 
e250: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63   **   PRAGMA enc
e260: 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41  oding.  **   PRA
e270: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22  GMA encoding = "
e280: 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c  utf-8"|"utf-16"|
e290: 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d  "utf-16le"|"utf-
e2a0: 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  16be".  **.  ** 
e2b0: 49 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f 72  In its first for
e2c0: 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20 72  m, this pragma r
e2d0: 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f 64  eturns the encod
e2e0: 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a  ing of the main.
e2f0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 49    ** database. I
e300: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
e310: 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65  s not initialize
e320: 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61 6c  d, it is initial
e330: 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20  ized now..  **. 
e340: 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 66   ** The second f
e350: 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61 67  orm of this prag
e360: 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  ma is a no-op if
e370: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
e380: 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73  se file.  ** has
e390: 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65 65   not already bee
e3a0: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49  n initialized. I
e3b0: 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20 73  n this case it s
e3c0: 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a  ets the default.
e3d0: 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68    ** encoding th
e3e0: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
e3f0: 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
e400: 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 61 20  abase file if a 
e410: 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73  new file.  ** is
e420: 20 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e 20   created. If an 
e430: 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64 61  existing main da
e440: 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 6f  tabase file is o
e450: 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  pened, then the.
e460: 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65 78    ** default tex
e470: 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74  t encoding for t
e480: 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  he existing data
e490: 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20 20  base is used..  
e4a0: 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20  ** .  ** In all 
e4b0: 63 61 73 65 73 20 6e 65 77 20 64 61 74 61 62 61  cases new databa
e4c0: 73 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  ses created usin
e4d0: 67 20 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d  g the ATTACH com
e4e0: 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63 72  mand are.  ** cr
e4f0: 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65  eated to use the
e500: 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74 65   same default te
e510: 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74  xt encoding as t
e520: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
e530: 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61  . If.  ** the ma
e540: 69 6e 20 64 61 74 61 62 61 73 65 20 68 61 73 20  in database has 
e550: 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  not been initial
e560: 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65 61  ized and/or crea
e570: 74 65 64 20 77 68 65 6e 20 41 54 54 41 43 48 0a  ted when ATTACH.
e580: 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64    ** is executed
e590: 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62  , this is done b
e5a0: 65 66 6f 72 65 20 74 68 65 20 41 54 54 41 43 48  efore the ATTACH
e5b0: 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a   operation..  **
e5c0: 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65 63  .  ** In the sec
e5d0: 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70 72  ond form this pr
e5e0: 61 67 6d 61 20 73 65 74 73 20 74 68 65 20 74 65  agma sets the te
e5f0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62  xt encoding to b
e600: 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e  e used in.  ** n
e610: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
e620: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
e630: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 68 61  this database ha
e640: 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79  ndle. It is only
e650: 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66 20  .  ** useful if 
e660: 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74  invoked immediat
e670: 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d 61  ely after the ma
e680: 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20 20  in database i.  
e690: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
e6a0: 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20  p_ENCODING: {.  
e6b0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
e6c0: 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a  truct EncName {.
e6d0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d        char *zNam
e6e0: 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b  e;.      u8 enc;
e6f0: 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b  .    } encnames[
e700: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55  ] = {.      { "U
e710: 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45  TF8",     SQLITE
e720: 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a  _UTF8        },.
e730: 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c        { "UTF-8",
e740: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20      SQLITE_UTF8 
e750: 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75         },  /* Mu
e760: 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31  st be element [1
e770: 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
e780: 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f  F-16le", SQLITE_
e790: 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20  UTF16LE     },  
e7a0: 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
e7b0: 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [2] */.      
e7c0: 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51  { "UTF-16be", SQ
e7d0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20  LITE_UTF16BE    
e7e0: 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
e7f0: 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20  element [3] */. 
e800: 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22       { "UTF16le"
e810: 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ,  SQLITE_UTF16L
e820: 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b  E     },.      {
e830: 20 22 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c   "UTF16be",  SQL
e840: 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20  ITE_UTF16BE     
e850: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  },.      { "UTF-
e860: 31 36 22 2c 20 20 20 30 20 20 20 20 20 20 20 20  16",   0        
e870: 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20            }, /* 
e880: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
e890: 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  VE */.      { "U
e8a0: 54 46 31 36 22 2c 20 20 20 20 30 20 20 20 20 20  TF16",    0     
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20               }, 
e8c0: 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  /* SQLITE_UTF16N
e8d0: 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b  ATIVE */.      {
e8e0: 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20   0, 0 }.    };. 
e8f0: 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20     const struct 
e900: 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20  EncName *pEnc;. 
e910: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
e920: 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20  {    /* "PRAGMA 
e930: 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20  encoding" */.   
e940: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
e950: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
e960: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
e970: 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ut;.      sqlite
e980: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
e990: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
e9a0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
e9b0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
e9c0: 5f 4e 41 4d 45 2c 20 22 65 6e 63 6f 64 69 6e 67  _NAME, "encoding
e9d0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
e9e0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
e9f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ea00: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 29 3b  _String8, 0, 1);
ea10: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
ea20: 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
ea30: 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  TF8].enc==SQLITE
ea40: 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20 61  _UTF8 );.      a
ea50: 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b  ssert( encnames[
ea60: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e  SQLITE_UTF16LE].
ea70: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
ea80: 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73  6LE );.      ass
ea90: 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51  ert( encnames[SQ
eaa0: 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e  LITE_UTF16BE].en
eab0: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
eac0: 45 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  E );.      sqlit
ead0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76  e3VdbeChangeP4(v
eae0: 2c 20 2d 31 2c 20 65 6e 63 6e 61 6d 65 73 5b 45  , -1, encnames[E
eaf0: 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e  NC(pParse->db)].
eb00: 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43  zName, P4_STATIC
eb10: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
eb20: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
eb30: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
eb40: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20 20  );.    }else{   
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb60: 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20       /* "PRAGMA 
eb70: 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22 20  encoding = XXX" 
eb80: 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  */.      /* Only
eb90: 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75   change the valu
eba0: 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63 20  e of sqlite.enc 
ebb0: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
ebc0: 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20  handle is not.  
ebd0: 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a      ** initializ
ebe0: 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e 20  ed. If the main 
ebf0: 64 61 74 61 62 61 73 65 20 65 78 69 73 74 73 2c  database exists,
ec00: 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 2e   the new sqlite.
ec10: 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20 20  enc value.      
ec20: 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72 77  ** will be overw
ec30: 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65 20  ritten when the 
ec40: 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20 6c  schema is next l
ec50: 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f 65  oaded. If it doe
ec60: 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  s not.      ** a
ec70: 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 69  lready exists, i
ec80: 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65  t will be create
ec90: 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77  d to use the new
eca0: 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e   encoding value.
ecb0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
ecc0: 69 66 28 20 0a 20 20 20 20 20 20 20 20 21 28 44  if( .        !(D
ecd0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
ece0: 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61   0, DB_SchemaLoa
ecf0: 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20 20  ded)) || .      
ed00: 20 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28    DbHasProperty(
ed10: 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79 29  db, 0, DB_Empty)
ed20: 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20   .      ){.     
ed30: 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63     for(pEnc=&enc
ed40: 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e  names[0]; pEnc->
ed50: 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a  zName; pEnc++){.
ed60: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 30 3d            if( 0=
ed70: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
ed80: 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e  zRight, pEnc->zN
ed90: 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ame) ){.        
eda0: 20 20 20 20 53 43 48 45 4d 41 5f 45 4e 43 28 64      SCHEMA_ENC(d
edb0: 62 29 20 3d 20 45 4e 43 28 64 62 29 20 3d 0a 20  b) = ENC(db) =. 
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
edd0: 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d  Enc->enc ? pEnc-
ede0: 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55 54  >enc : SQLITE_UT
edf0: 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 20  F16NATIVE;.     
ee00: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
ee10: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ee20: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
ee30: 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a  !pEnc->zName ){.
ee40: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ee50: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
ee60: 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 65  , "unsupported e
ee70: 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52  ncoding: %s", zR
ee80: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  ight);.        }
ee90: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
eea0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
eeb0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
eec0: 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e  T_UTF16 */..#ifn
eed0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
eee0: 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
eef0: 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
ef00: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
ef10: 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ase.]schema_vers
ef20: 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
ef30: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68  A [database.]sch
ef40: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69  ema_version = <i
ef50: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
ef60: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
ef70: 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69  base.]user_versi
ef80: 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  on.  **   PRAGMA
ef90: 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72   [database.]user
efa0: 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65  _version = <inte
efb0: 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ger>.  **.  **  
efc0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
efd0: 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e  e.]freelist_coun
efe0: 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20  t = <integer>.  
eff0: 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
f000: 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c   [database.]appl
f010: 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20  ication_id.  ** 
f020: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
f030: 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f  se.]application_
f040: 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  id = <integer>. 
f050: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72 61   **.  ** The pra
f060: 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76 65 72  gma's schema_ver
f070: 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76 65  sion and user_ve
f080: 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64 20 74  rsion are used t
f090: 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20 20 2a  o set or get.  *
f0a0: 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
f0b0: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
f0c0: 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72 73 69  n and user-versi
f0d0: 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  on, respectively
f0e0: 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65 20  . Both.  ** the 
f0f0: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61  schema-version a
f100: 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65 72 73  nd the user-vers
f110: 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74 20 73  ion are 32-bit s
f120: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 0a 20  igned integers. 
f130: 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68   ** stored in th
f140: 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
f150: 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  r..  **.  ** The
f160: 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 69   schema-cookie i
f170: 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d  s usually only m
f180: 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74 65 72  anipulated inter
f190: 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e  nally by SQLite.
f1a0: 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63 72   It.  ** is incr
f1b0: 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c 69 74  emented by SQLit
f1c0: 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  e whenever the d
f1d0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
f1e0: 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79 0a 20  s modified (by. 
f1f0: 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f 72 20   ** creating or 
f200: 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62 6c 65  dropping a table
f210: 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68 65 20   or index). The 
f220: 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69  schema version i
f230: 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 53  s used by.  ** S
f240: 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d 65 20  QLite each time 
f250: 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75  a query is execu
f260: 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ted to ensure th
f270: 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  at the internal 
f280: 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74 68  cache.  ** of th
f290: 65 20 73 63 68 65 6d 61 20 75 73 65 64 20 77 68  e schema used wh
f2a0: 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65  en compiling the
f2b0: 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68   SQL query match
f2c0: 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  es the schema of
f2d0: 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61  .  ** the databa
f2e0: 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63 68  se against which
f2f0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
f300: 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20  ery is actually 
f310: 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20 53  executed..  ** S
f320: 75 62 76 65 72 74 69 6e 67 20 74 68 69 73 20 6d  ubverting this m
f330: 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73 69 6e  echanism by usin
f340: 67 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61  g "PRAGMA schema
f350: 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f 64  _version" to mod
f360: 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73 63 68  ify.  ** the sch
f370: 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73 20 70  ema-version is p
f380: 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67 65  otentially dange
f390: 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c 65 61  rous and may lea
f3a0: 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20 2a  d to program.  *
f3b0: 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64 61 74  * crashes or dat
f3c0: 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
f3d0: 2e 20 55 73 65 20 77 69 74 68 20 63 61 75 74 69  . Use with cauti
f3e0: 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  on!.  **.  ** Th
f3f0: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69  e user-version i
f400: 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72  s not used inter
f410: 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e  nally by SQLite.
f420: 20 49 74 20 6d 61 79 20 62 65 20 75 73 65 64 20   It may be used 
f430: 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61 74  by.  ** applicat
f440: 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70 75 72  ions for any pur
f450: 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  pose..  */.  cas
f460: 65 20 50 72 61 67 54 79 70 5f 48 45 41 44 45 52  e PragTyp_HEADER
f470: 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69 6e  _VALUE: {.    in
f480: 74 20 69 43 6f 6f 6b 69 65 20 3d 20 70 50 72 61  t iCookie = pPra
f490: 67 6d 61 2d 3e 69 41 72 67 3b 20 20 2f 2a 20 57  gma->iArg;  /* W
f4a0: 68 69 63 68 20 63 6f 6f 6b 69 65 20 74 6f 20 72  hich cookie to r
f4b0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
f4c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
f4d0: 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29  sesBtree(v, iDb)
f4e0: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
f4f0: 20 26 26 20 28 70 50 72 61 67 6d 61 2d 3e 6d 50   && (pPragma->mP
f500: 72 61 67 46 6c 61 67 20 26 20 50 72 61 67 46 6c  ragFlag & PragFl
f510: 61 67 5f 52 65 61 64 4f 6e 6c 79 29 3d 3d 30 20  ag_ReadOnly)==0 
f520: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69 74  ){.      /* Writ
f530: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified 
f540: 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a  cookie value */.
f550: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
f560: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65  st VdbeOpList se
f570: 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20  tCookie[] = {.  
f580: 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
f590: 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 31  action,    0,  1
f5a0: 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a  ,  0},    /* 0 *
f5b0: 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49  /.        { OP_I
f5c0: 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20 20 30  nteger,        0
f5d0: 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
f5e0: 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   1 */.        { 
f5f0: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
f600: 20 20 20 30 2c 20 20 30 2c 20 20 31 7d 2c 20 20     0,  0,  1},  
f610: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
f620: 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64  };.      int add
f630: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
f640: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
f650: 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29  ySize(setCookie)
f660: 2c 20 73 65 74 43 6f 6f 6b 69 65 2c 20 30 29 3b  , setCookie, 0);
f670: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f680: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
f690: 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  dr, iDb);.      
f6a0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
f6b0: 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 73  eP1(v, addr+1, s
f6c0: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
f6d0: 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  t));.      sqlit
f6e0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
f6f0: 2c 20 61 64 64 72 2b 32 2c 20 69 44 62 29 3b 0a  , addr+2, iDb);.
f700: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f710: 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64  eChangeP2(v, add
f720: 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20  r+2, iCookie);. 
f730: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f740: 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70 65 63  /* Read the spec
f750: 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c  ified cookie val
f760: 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74  ue */.      stat
f770: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
f780: 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d  ist readCookie[]
f790: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
f7a0: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
f7b0: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20     0,  0,  0},  
f7c0: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
f7d0: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
f7e0: 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20  e,      0,  1,  
f7f0: 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
f800: 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75         { OP_Resu
f810: 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c 20  ltRow,       1, 
f820: 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b   1,  0}.      };
f830: 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64 72 20  .      int addr 
f840: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
f850: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
f860: 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c  ize(readCookie),
f870: 20 72 65 61 64 43 6f 6f 6b 69 65 2c 20 30 29 3b   readCookie, 0);
f880: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f890: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
f8a0: 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  dr, iDb);.      
f8b0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
f8c0: 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69  eP1(v, addr+1, i
f8d0: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
f8e0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 33 28 76  e3VdbeChangeP3(v
f8f0: 2c 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f 6b 69  , addr+1, iCooki
f900: 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
f910: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
f920: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
f930: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
f940: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
f950: 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51  _NAME, zLeft, SQ
f960: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
f970: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
f980: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
f990: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
f9a0: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
f9b0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
f9c0: 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
f9d0: 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f  OPTION_DIAGS.  /
f9e0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
f9f0: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a  compile_options.
fa00: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
fa10: 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c   the names of al
fa20: 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  l compile-time o
fa30: 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74  ptions used in t
fa40: 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20  his build,.  ** 
fa50: 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72  one option per r
fa60: 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ow..  */.  case 
fa70: 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f  PragTyp_COMPILE_
fa80: 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20 69  OPTIONS: {.    i
fa90: 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f  nt i = 0;.    co
faa0: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a  nst char *zOpt;.
fab0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
fac0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
fad0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
fae0: 6d 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  m = 1;.    sqlit
faf0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
fb00: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
fb10: 41 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70  AME, "compile_op
fb20: 74 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f 53 54  tion", SQLITE_ST
fb30: 41 54 49 43 29 3b 0a 20 20 20 20 77 68 69 6c 65  ATIC);.    while
fb40: 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65  ( (zOpt = sqlite
fb50: 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
fb60: 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a  get(i++))!=0 ){.
fb70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fb80: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
fb90: 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
fba0: 7a 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  zOpt, 0);.      
fbb0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
fbc0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
fbd0: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a  w, 1, 1);.    }.
fbe0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
fbf0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
fc00: 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
fc10: 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64  _DIAGS */..#ifnd
fc20: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
fc30: 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AL.  /*.  **   P
fc40: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
fc50: 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20  ]wal_checkpoint 
fc60: 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72  = passive|full|r
fc70: 65 73 74 61 72 74 7c 74 72 75 6e 63 61 74 65 0a  estart|truncate.
fc80: 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70    **.  ** Checkp
fc90: 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62 61 73  oint the databas
fca0: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
fcb0: 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b  ragTyp_WAL_CHECK
fcc0: 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74  POINT: {.    int
fcd0: 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f   iBt = (pId2->z?
fce0: 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41  iDb:SQLITE_MAX_A
fcf0: 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69 6e  TTACHED);.    in
fd00: 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45  t eMode = SQLITE
fd10: 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
fd20: 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  IVE;.    if( zRi
fd30: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
fd40: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
fd50: 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d  zRight, "full")=
fd60: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d  =0 ){.        eM
fd70: 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45  ode = SQLITE_CHE
fd80: 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20  CKPOINT_FULL;.  
fd90: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
fda0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
fdb0: 67 68 74 2c 20 22 72 65 73 74 61 72 74 22 29 3d  ght, "restart")=
fdc0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d  =0 ){.        eM
fdd0: 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45  ode = SQLITE_CHE
fde0: 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b  CKPOINT_RESTART;
fdf0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
fe00: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
fe10: 7a 52 69 67 68 74 2c 20 22 74 72 75 6e 63 61 74  zRight, "truncat
fe20: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
fe30: 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45    eMode = SQLITE
fe40: 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e  _CHECKPOINT_TRUN
fe50: 43 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20  CATE;.      }.  
fe60: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
fe70: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
fe80: 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   3);.    pParse-
fe90: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73  >nMem = 3;.    s
fea0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
feb0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
fec0: 4d 45 5f 4e 41 4d 45 2c 20 22 62 75 73 79 22 2c  ME_NAME, "busy",
fed0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
fee0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
fef0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
ff00: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
ff10: 6c 6f 67 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  log", SQLITE_STA
ff20: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
ff30: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
ff40: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
ff50: 4d 45 2c 20 22 63 68 65 63 6b 70 6f 69 6e 74 65  ME, "checkpointe
ff60: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
ff70: 43 29 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65 33  C);..    sqlite3
ff80: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
ff90: 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74  _Checkpoint, iBt
ffa0: 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20  , eMode, 1);.   
ffb0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ffc0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
ffd0: 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20  ow, 1, 3);.  }. 
ffe0: 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20   break;..  /*.  
fff0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f  **   PRAGMA wal_
10000 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20  autocheckpoint. 
10010 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c   **   PRAGMA wal
10020 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20  _autocheckpoint 
10030 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f  = N.  **.  ** Co
10040 6e 66 69 67 75 72 65 20 61 20 64 61 74 61 62 61  nfigure a databa
10050 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  se connection to
10060 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
10070 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74 61  heckpoint a data
10080 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72 20  base.  ** after 
10090 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66  accumulating N f
100a0 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67  rames in the log
100b0 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20 74  . Or query for t
100c0 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
100d0 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f  .  ** of N..  */
100e0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
100f0 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49  WAL_AUTOCHECKPOI
10100 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  NT: {.    if( zR
10110 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
10120 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68  lite3_wal_autoch
10130 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c  eckpoint(db, sql
10140 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
10150 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
10160 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
10170 72 73 65 2c 20 22 77 61 6c 5f 61 75 74 6f 63 68  rse, "wal_autoch
10180 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20 20  eckpoint", .    
10190 20 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62     db->xWalCallb
101a0 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c 44  ack==sqlite3WalD
101b0 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20  efaultHook ? .  
101c0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
101d0 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e 70  PTR_TO_INT(db->p
101e0 57 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20 20  WalArg) : 0);.  
101f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
10200 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  f..  /*.  **  PR
10210 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f  AGMA shrink_memo
10220 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  ry.  **.  ** Thi
10230 73 20 70 72 61 67 6d 61 20 61 74 74 65 6d 70 74  s pragma attempt
10240 73 20 74 6f 20 66 72 65 65 20 61 73 20 6d 75 63  s to free as muc
10250 68 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73 73  h memory as poss
10260 69 62 6c 65 20 66 72 6f 6d 20 74 68 65 0a 20 20  ible from the.  
10270 2a 2a 20 63 75 72 72 65 6e 74 20 64 61 74 61 62  ** current datab
10280 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a  ase connection..
10290 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
102a0 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52  Typ_SHRINK_MEMOR
102b0 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  Y: {.    sqlite3
102c0 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
102d0 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61  ry(db);.    brea
102e0 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
102f0 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f  *   PRAGMA busy_
10300 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50  timeout.  **   P
10310 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f  RAGMA busy_timeo
10320 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ut = N.  **.  **
10330 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75   Call sqlite3_bu
10340 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e  sy_timeout(db, N
10350 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63  ).  Return the c
10360 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76  urrent timeout v
10370 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65  alue.  ** if one
10380 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20   is set.  If no 
10390 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20  busy handler or 
103a0 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79  a different busy
103b0 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a   handler is set.
103c0 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72    ** then 0 is r
103d0 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e  eturned.  Settin
103e0 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f  g the busy_timeo
103f0 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74  ut to 0 or negat
10400 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  ive.  ** disable
10410 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20  s the timeout.. 
10420 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61   */.  /*case Pra
10430 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
10440 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20  T*/ default: {. 
10450 20 20 20 61 73 73 65 72 74 28 20 70 50 72 61 67     assert( pPrag
10460 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50 72  ma->ePragTyp==Pr
10470 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
10480 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  UT );.    if( zR
10490 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
104a0 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
104b0 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  ut(db, sqlite3At
104c0 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
104d0 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
104e0 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
104f0 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62  timeout",  db->b
10500 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20  usyTimeout);.   
10510 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
10520 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
10530 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a  soft_heap_limit.
10540 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
10550 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20  ft_heap_limit = 
10560 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c  N.  **.  ** Call
10570 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
10580 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20  ap_limit64(N).  
10590 52 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c  Return the resul
105a0 74 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d 69 74  t.  If N is omit
105b0 74 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31  ted,.  ** use -1
105c0 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
105d0 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
105e0 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c  LIMIT: {.    sql
105f0 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20  ite3_int64 N;.  
10600 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20    if( zRight && 
10610 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
10620 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29  oI64(zRight, &N)
10630 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
10640 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66       sqlite3_sof
10650 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e  t_heap_limit64(N
10660 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
10670 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
10680 72 73 65 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f  rse, "soft_heap_
10690 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33  limit",  sqlite3
106a0 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
106b0 36 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65  64(-1));.    bre
106c0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
106d0 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72 65  **   PRAGMA thre
106e0 61 64 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ads.  **   PRAGM
106f0 41 20 74 68 72 65 61 64 73 20 3d 20 4e 0a 20 20  A threads = N.  
10700 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72  **.  ** Configur
10710 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  e the maximum nu
10720 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65 72 20 74  mber of worker t
10730 68 72 65 61 64 73 2e 20 20 52 65 74 75 72 6e 20  hreads.  Return 
10740 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20 6d 61 78  the new.  ** max
10750 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d 69 67 68  imum, which migh
10760 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 72  t be less than r
10770 65 71 75 65 73 74 65 64 2e 0a 20 20 2a 2f 0a 20  equested..  */. 
10780 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 48   case PragTyp_TH
10790 52 45 41 44 53 3a 20 7b 0a 20 20 20 20 73 71 6c  READS: {.    sql
107a0 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20  ite3_int64 N;.  
107b0 20 20 69 66 28 20 7a 52 69 67 68 74 0a 20 20 20    if( zRight.   
107c0 20 20 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f    && sqlite3DecO
107d0 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74  rHexToI64(zRight
107e0 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  , &N)==SQLITE_OK
107f0 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30 0a 20 20  .     && N>=0.  
10800 20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74    ){.      sqlit
10810 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c  e3_limit(db, SQL
10820 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
10830 5f 54 48 52 45 41 44 53 2c 20 28 69 6e 74 29 28  _THREADS, (int)(
10840 4e 26 30 78 37 66 66 66 66 66 66 66 29 29 3b 0a  N&0x7fffffff));.
10850 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
10860 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
10870 2c 20 22 74 68 72 65 61 64 73 22 2c 0a 20 20 20  , "threads",.   
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10890 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64   sqlite3_limit(d
108a0 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  b, SQLITE_LIMIT_
108b0 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
108c0 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
108d0 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  .  }..#if define
108e0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
108f0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
10900 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a  E_TEST).  /*.  *
10910 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72  * Report the cur
10920 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69  rent state of fi
10930 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20  le logs for all 
10940 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20  databases.  */. 
10950 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
10960 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20  CK_STATUS: {.   
10970 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
10980 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b  ar *const azLock
10990 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Name[] = {.     
109a0 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68   "unlocked", "sh
109b0 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65 64  ared", "reserved
109c0 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65  ", "pending", "e
109d0 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b  xclusive".    };
109e0 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
109f0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
10a00 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20  mCols(v, 2);.   
10a10 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
10a20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  2;.    sqlite3Vd
10a30 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
10a40 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
10a50 20 22 64 61 74 61 62 61 73 65 22 2c 20 53 51 4c   "database", SQL
10a60 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
10a70 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
10a80 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
10a90 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74  NAME_NAME, "stat
10aa0 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  us", SQLITE_STAT
10ab0 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  IC);.    for(i=0
10ac0 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
10ad0 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a  ){.      Btree *
10ae0 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  pBt;.      const
10af0 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20   char *zState = 
10b00 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20  "unknown";.     
10b10 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66   int j;.      if
10b20 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ( db->aDb[i].zNa
10b30 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  me==0 ) continue
10b40 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
10b50 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
10b60 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
10b70 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
10b80 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  me, P4_STATIC);.
10b90 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e        pBt = db->
10ba0 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20  aDb[i].pBt;.    
10bb0 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20    if( pBt==0 || 
10bc0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
10bd0 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20  r(pBt)==0 ){.   
10be0 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63       zState = "c
10bf0 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65  losed";.      }e
10c00 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f  lse if( sqlite3_
10c10 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
10c20 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   i ? db->aDb[i].
10c30 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20  zName : 0, .    
10c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c60 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f   SQLITE_FCNTL_LO
10c70 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51  CKSTATE, &j)==SQ
10c80 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
10c90 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c      zState = azL
10ca0 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20  ockName[j];.    
10cb0 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
10cc0 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
10cd0 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
10ce0 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f 53   0, zState, P4_S
10cf0 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
10d00 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10d10 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
10d20 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20   1, 2);.    }.  
10d30 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
10d40 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
10d50 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63  TE_HAS_CODEC.  c
10d60 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a  ase PragTyp_KEY:
10d70 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
10d80 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f  t ) sqlite3_key_
10d90 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
10da0 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
10db0 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
10dc0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
10dd0 61 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45  ase PragTyp_REKE
10de0 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
10df0 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65  ght ) sqlite3_re
10e00 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
10e10 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53  zRight, sqlite3S
10e20 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29  trlen30(zRight))
10e30 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
10e40 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10e50 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66  HEXKEY: {.    if
10e60 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
10e70 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20    u8 iByte;.    
10e80 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63    int i;.      c
10e90 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20  har zKey[40];.  
10ea0 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79      for(i=0, iBy
10eb0 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a  te=0; i<sizeof(z
10ec0 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65  Key)*2 && sqlite
10ed0 33 49 73 78 64 69 67 69 74 28 7a 52 69 67 68 74  3Isxdigit(zRight
10ee0 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  [i]); i++){.    
10ef0 20 20 20 20 69 42 79 74 65 20 3d 20 28 69 42 79      iByte = (iBy
10f00 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33  te<<4) + sqlite3
10f10 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b  HexToInt(zRight[
10f20 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  i]);.        if(
10f30 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79   (i&1)!=0 ) zKey
10f40 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20  [i/2] = iByte;. 
10f50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
10f60 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66   (zLeft[3] & 0xf
10f70 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20  )==0xb ){.      
10f80 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32    sqlite3_key_v2
10f90 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20  (db, zDb, zKey, 
10fa0 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  i/2);.      }els
10fb0 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
10fc0 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20  e3_rekey_v2(db, 
10fd0 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b  zDb, zKey, i/2);
10fe0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
10ff0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
11000 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
11010 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45  (SQLITE_HAS_CODE
11020 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  C) || defined(SQ
11030 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f  LITE_ENABLE_CERO
11040 44 29 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  D).  case PragTy
11050 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e  p_ACTIVATE_EXTEN
11060 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68  SIONS: if( zRigh
11070 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  t ){.#ifdef SQLI
11080 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20  TE_HAS_CODEC.   
11090 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
110a0 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65  ICmp(zRight, "se
110b0 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20  e-", 4)==0 ){.  
110c0 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69      sqlite3_acti
110d0 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74  vate_see(&zRight
110e0 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [4]);.    }.#end
110f0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
11100 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20  _ENABLE_CEROD.  
11110 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
11120 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63  NICmp(zRight, "c
11130 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b  erod-", 6)==0 ){
11140 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61  .      sqlite3_a
11150 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a  ctivate_cerod(&z
11160 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d  Right[6]);.    }
11170 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
11180 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d  eak;.#endif..  }
11190 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50   /* End of the P
111a0 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a  RAGMA switch */.
111b0 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73  .pragma_out:.  s
111c0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
111d0 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74   zLeft);.  sqlit
111e0 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52 69  e3DbFree(db, zRi
111f0 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  ght);.}..#endif 
11200 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
11210 52 41 47 4d 41 20 2a 2f 0a                       RAGMA */.