/ Hex Artifact Content
Login

Artifact 53c95f5454e2a8bdb25ebf1567bed6690910ce25:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20  or ON or NORMAL 
04c0: 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20  and 2 for FULL. 
04d0: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e   Return 1 for an
04e0: 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e   empty or .** un
04f0: 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e  recognized strin
0500: 67 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65  g argument.  The
0510: 20 46 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20   FULL option is 
0520: 64 69 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66  disallowed.** if
0530: 20 74 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61   the omitFull pa
0540: 72 61 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a  rameter it 1..**
0550: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
0560: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
0570: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
0580: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
0590: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
05a0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
05b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
05c0: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
05d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
05e0: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
05f0: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
0600: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
0610: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
0620: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
0630: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
0640: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
0650: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
0660: 2f 0a 73 74 61 74 69 63 20 75 38 20 67 65 74 53  /.static u8 getS
0670: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
0680: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d   char *z, int om
0690: 69 74 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29  itFull, u8 dflt)
06a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
06c0: 2a 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34  * 123456789 1234
06d0: 35 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69  56789 */.  stati
06e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65  c const char zTe
06f0: 78 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73  xt[] = "onoffals
0700: 65 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20  eyestruefull";. 
0710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0720: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0730: 20 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c   1, 2, 4, 9, 12,
0740: 20 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63   16};.  static c
0750: 6f 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b  onst u8 iLength[
0760: 5d 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c  ] = {2, 2, 3, 5,
0770: 20 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61   3, 4, 4};.  sta
0780: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61  tic const u8 iVa
0790: 6c 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20  lue[] =  {1, 0, 
07a0: 30 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a  0, 0, 1, 1, 2};.
07b0: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66    int i, n;.  if
07c0: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
07d0: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
07e0: 72 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74  rn (u8)sqlite3At
07f0: 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  oi(z);.  }.  n =
0800: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
0810: 28 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  (z);.  for(i=0; 
0820: 69 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e  i<ArraySize(iLen
0830: 67 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69  gth)-omitFull; i
0840: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65  ++){.    if( iLe
0850: 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71  ngth[i]==n && sq
0860: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a  lite3StrNICmp(&z
0870: 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d  Text[iOffset[i]]
0880: 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ,z,n)==0 ){.    
0890: 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b    return iValue[
08a0: 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  i];.    }.  }.  
08b0: 72 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a  return dflt;.}..
08c0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
08d0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
08e0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
08f0: 6c 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74  lue..*/.u8 sqlit
0900: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
0910: 73 74 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64  st char *z, u8 d
0920: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
0930: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
0940: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
0950: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
0960: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
0970: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
0980: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
0990: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
09a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
09b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
09c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
09d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
09e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
09f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
0a00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
0a10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
0a20: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0a30: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
0a40: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0a50: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0a60: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
0a70: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
0a80: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
0a90: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
0aa0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
0ab0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0ac0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
0ad0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
0ae0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
0af0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
0b00: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0b10: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
0b20: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
0b30: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0b40: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
0b50: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
0b60: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
0b70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
0b80: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0b90: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
0ba0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
0bb0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
0bc0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
0bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
0be0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
0bf0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
0c00: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
0c10: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
0c20: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
0c30: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
0c40: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
0c50: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
0c60: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
0c70: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
0c80: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
0c90: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0ca0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
0cb0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
0cc0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
0cd0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
0ce0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0cf0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
0d00: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
0d10: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
0d20: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
0d30: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
0d40: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d50: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
0d60: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
0d70: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
0d80: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
0d90: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
0da0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
0db0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
0dc0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
0dd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
0de0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
0df0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
0e00: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
0e10: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
0e20: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
0e30: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
0e40: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
0e50: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
0e60: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
0e70: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
0e80: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
0e90: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
0ea0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
0eb0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
0ec0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
0ed0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
0ee0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
0ef0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
0f00: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
0f10: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
0f20: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
0f30: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
0f40: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
0f50: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
0f60: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
0f70: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
0f80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
0f90: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
0fa0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
0fb0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
0fc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
0fd0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
0fe0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
0ff0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
1000: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
1010: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
1020: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
1030: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
1040: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
1050: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1060: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
1070: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
1080: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
1090: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
10a0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
10b0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
10c0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
10d0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
10e0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
10f0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
1100: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
1110: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
1120: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
1130: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
1140: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
1150: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
1160: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
1170: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
1180: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
1190: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11a0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
11b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
11c0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
11d0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
11e0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
11f0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1200: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1210: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
1220: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1230: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
1240: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
1250: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
1260: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1270: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
1280: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
1290: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
12a0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
12b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12c0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
12d0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
12e0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
12f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
1300: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
1310: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
1320: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
1330: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
1340: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
1350: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
1360: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
1370: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
1380: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
1390: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
13a0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
13b0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
13c0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
13d0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
13e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
13f0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
1400: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
1410: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
1420: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
1430: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1440: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
1450: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
1460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1470: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
1480: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
1490: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74   */../*.** Set t
14a0: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
14b0: 66 69 72 73 74 20 4e 20 63 6f 6c 75 6d 6e 73 20  first N columns 
14c0: 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  to the values in
14d0: 20 61 7a 43 6f 6c 5b 5d 0a 2a 2f 0a 73 74 61 74   azCol[].*/.stat
14e0: 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 43 6f  ic void setAllCo
14f0: 6c 75 6d 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62  lumnNames(.  Vdb
1500: 65 20 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20  e *v,           
1510: 20 20 20 20 2f 2a 20 54 68 65 20 71 75 65 72 79      /* The query
1520: 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1530: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20  ion */.  int N, 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1550: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
1560: 75 6d 6e 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  umns */.  const 
1570: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 20 20 20 20  char **azCol    
1580: 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 63 6f 6c   /* Names of col
1590: 75 6d 6e 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  umns */.){.  int
15a0: 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   i;.  sqlite3Vdb
15b0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 4e  eSetNumCols(v, N
15c0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
15d0: 4e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  N; i++){.    sql
15e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
15f0: 6d 65 28 76 2c 20 69 2c 20 43 4f 4c 4e 41 4d 45  me(v, i, COLNAME
1600: 5f 4e 41 4d 45 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  _NAME, azCol[i],
1610: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
1620: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
1630: 69 64 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e  id setOneColumnN
1640: 61 6d 65 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e  ame(Vdbe *v, con
1650: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73  st char *z){.  s
1660: 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
1670: 28 76 2c 20 31 2c 20 26 7a 29 3b 0a 7d 0a 0a 2f  (v, 1, &z);.}../
1680: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f  *.** Generate co
1690: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73  de to return a s
16a0: 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 76 61  ingle integer va
16b0: 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  lue..*/.static v
16c0: 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67 6c 65  oid returnSingle
16d0: 49 6e 74 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e  Int(Vdbe *v, con
16e0: 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c  st char *zLabel,
16f0: 20 69 36 34 20 76 61 6c 75 65 29 7b 0a 20 20 73   i64 value){.  s
1700: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
1710: 44 75 70 38 28 76 2c 20 4f 50 5f 49 6e 74 36 34  Dup8(v, OP_Int64
1720: 2c 20 30 2c 20 31 2c 20 30 2c 20 28 63 6f 6e 73  , 0, 1, 0, (cons
1730: 74 20 75 38 2a 29 26 76 61 6c 75 65 2c 20 50 34  t u8*)&value, P4
1740: 5f 49 4e 54 36 34 29 3b 0a 20 20 73 65 74 4f 6e  _INT64);.  setOn
1750: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a  eColumnName(v, z
1760: 4c 61 62 65 6c 29 3b 0a 20 20 73 71 6c 69 74 65  Label);.  sqlite
1770: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
1780: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
1790: 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e  1);.}../*.** Gen
17a0: 65 72 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65  erate code to re
17b0: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 74 65  turn a single te
17c0: 78 74 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  xt value..*/.sta
17d0: 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53  tic void returnS
17e0: 69 6e 67 6c 65 54 65 78 74 28 0a 20 20 56 64 62  ingleText(.  Vdb
17f0: 65 20 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20  e *v,           
1800: 20 20 20 20 20 2f 2a 20 50 72 65 70 61 72 65 64       /* Prepared
1810: 20 73 74 61 74 65 6d 65 6e 74 20 75 6e 64 65 72   statement under
1820: 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f   construction */
1830: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1840: 4c 61 62 65 6c 2c 20 20 20 20 20 2f 2a 20 4e 61  Label,     /* Na
1850: 6d 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  me of the result
1860: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 6f 6e   column */.  con
1870: 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 75 65 20  st char *zValue 
1880: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
1890: 20 62 65 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a   be returned */.
18a0: 29 7b 0a 20 20 69 66 28 20 7a 56 61 6c 75 65 20  ){.  if( zValue 
18b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
18c0: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
18d0: 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  1, (const char*)
18e0: 7a 56 61 6c 75 65 29 3b 0a 20 20 20 20 73 65 74  zValue);.    set
18f0: 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c  OneColumnName(v,
1900: 20 7a 4c 61 62 65 6c 29 3b 0a 20 20 20 20 73 71   zLabel);.    sq
1910: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
1920: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
1930: 20 31 2c 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a   1, 1);.  }.}...
1940: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 73 61  /*.** Set the sa
1950: 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70  fety_level and p
1960: 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72 20 70  ager flags for p
1970: 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20 69 66  ager iDb.  Or if
1980: 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68   iDb<0.** set th
1990: 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72 20 61  ese values for a
19a0: 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69  ll pagers..*/.#i
19b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
19c0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
19d0: 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 41  static void setA
19e0: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73 71 6c  llPagerFlags(sql
19f0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28  ite3 *db){.  if(
1a00: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
1a10: 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62 20 3d  ){.    Db *pDb =
1a20: 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e   db->aDb;.    in
1a30: 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20  t n = db->nDb;. 
1a40: 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54     assert( SQLIT
1a50: 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47  E_FullFSync==PAG
1a60: 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a  ER_FULLFSYNC );.
1a70: 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49      assert( SQLI
1a80: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
1a90: 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  ==PAGER_CKPT_FUL
1aa0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
1ab0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 61 63  sert( SQLITE_Cac
1ac0: 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43  heSpill==PAGER_C
1ad0: 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20  ACHESPILL );.   
1ae0: 20 61 73 73 65 72 74 28 20 28 50 41 47 45 52 5f   assert( (PAGER_
1af0: 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45  FULLFSYNC | PAGE
1b00: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
1b10: 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45 53 50   | PAGER_CACHESP
1b20: 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20 20  ILL).           
1b30: 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c 41 47    ==  PAGER_FLAG
1b40: 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20 61 73  S_MASK );.    as
1b50: 73 65 72 74 28 20 28 70 44 62 2d 3e 73 61 66 65  sert( (pDb->safe
1b60: 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45 52  ty_level & PAGER
1b70: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53  _SYNCHRONOUS_MAS
1b80: 4b 29 3d 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f  K)==pDb->safety_
1b90: 6c 65 76 65 6c 20 29 3b 0a 20 20 20 20 77 68 69  level );.    whi
1ba0: 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b  le( (n--) > 0 ){
1bb0: 0a 20 20 20 20 20 20 69 66 28 20 70 44 62 2d 3e  .      if( pDb->
1bc0: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73  pBt ){.        s
1bd0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50 61  qlite3BtreeSetPa
1be0: 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e 70 42  gerFlags(pDb->pB
1bf0: 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
1c00: 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f      pDb->safety_
1c10: 6c 65 76 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61  level | (db->fla
1c20: 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47 53  gs & PAGER_FLAGS
1c30: 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20 20  _MASK) );.      
1c40: 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20  }.      pDb++;. 
1c50: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65     }.  }.}.#else
1c60: 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c 6c  .# define setAll
1c70: 50 61 67 65 72 46 6c 61 67 73 28 58 29 20 20 2f  PagerFlags(X)  /
1c80: 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
1c90: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  f.../*.** Return
1ca0: 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
1cb0: 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e  e name for a con
1cc0: 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74 69  straint resoluti
1cd0: 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  on action..*/.#i
1ce0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1cf0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74  T_FOREIGN_KEY.st
1d00: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
1d10: 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61  *actionName(u8 a
1d20: 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20  ction){.  const 
1d30: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73  char *zName;.  s
1d40: 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29 7b  witch( action ){
1d50: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74  .    case OE_Set
1d60: 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  Null:  zName = "
1d70: 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20  SET NULL";      
1d80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1d90: 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a  e OE_SetDflt:  z
1da0: 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46 41  Name = "SET DEFA
1db0: 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  ULT";     break;
1dc0: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61 73  .    case OE_Cas
1dd0: 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  cade:  zName = "
1de0: 43 41 53 43 41 44 45 22 3b 20 20 20 20 20 20 20  CASCADE";       
1df0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1e00: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20 7a  e OE_Restrict: z
1e10: 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43 54  Name = "RESTRICT
1e20: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
1e30: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
1e40: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1e50: 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20  NO ACTION";  .  
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e70: 20 20 20 20 61 73 73 65 72 74 28 20 61 63 74 69      assert( acti
1e80: 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62  on==OE_None ); b
1e90: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75  reak;.  }.  retu
1ea0: 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64  rn zName;.}.#end
1eb0: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d  if.../*.** Param
1ec0: 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74 20  eter eMode must 
1ed0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50 41  be one of the PA
1ee0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
1ef0: 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  XXX constants.**
1f00: 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67 65   defined in page
1f10: 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74 69  r.h. This functi
1f20: 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
1f30: 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72 63  ssociated lowerc
1f40: 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d  ase.** journal-m
1f50: 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e  ode name..*/.con
1f60: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
1f70: 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
1f80: 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74  int eMode){.  st
1f90: 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e 73  atic char * cons
1fa0: 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d  t azModeName[] =
1fb0: 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22 2c   {.    "delete",
1fc0: 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66 66   "persist", "off
1fd0: 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20 22  ", "truncate", "
1fe0: 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66 20  memory".#ifndef 
1ff0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2000: 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e       , "wal".#en
2010: 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72  dif.  };.  asser
2020: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2030: 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29  MODE_DELETE==0 )
2040: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
2050: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
2060: 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73  RSIST==1 );.  as
2070: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
2080: 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29  NALMODE_OFF==2 )
2090: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
20a0: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
20b0: 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61  UNCATE==3 );.  a
20c0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
20d0: 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d  RNALMODE_MEMORY=
20e0: 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =4 );.  assert( 
20f0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2100: 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73  E_WAL==5 );.  as
2110: 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26  sert( eMode>=0 &
2120: 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69  & eMode<=ArraySi
2130: 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29  ze(azModeName) )
2140: 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d  ;..  if( eMode==
2150: 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65  ArraySize(azMode
2160: 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20 30  Name) ) return 0
2170: 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64  ;.  return azMod
2180: 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a  eName[eMode];.}.
2190: 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61  ./*.** Process a
21a0: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
21b0: 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d  t.  .**.** Pragm
21c0: 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66  as are of this f
21d0: 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  orm:.**.**      
21e0: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
21f0: 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a  id [= value].**.
2200: 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66 69 65  ** The identifie
2210: 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20  r might also be 
2220: 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 76  a string.  The v
2230: 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67  alue is a string
2240: 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66  , and.** identif
2250: 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72  ier, or a number
2260: 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61 67 20  .  If minusFlag 
2270: 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
2280: 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20  e value is.** a 
2290: 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61 73 20  number that was 
22a0: 70 72 65 63 65 64 65 64 20 62 79 20 61 20 6d 69  preceded by a mi
22b0: 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20  nus sign..**.** 
22c0: 49 66 20 74 68 65 20 6c 65 66 74 20 73 69 64 65  If the left side
22d0: 20 69 73 20 22 64 61 74 61 62 61 73 65 2e 69 64   is "database.id
22e0: 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74  " then pId1 is t
22f0: 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
2300: 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69 73 20  .** and pId2 is 
2310: 74 68 65 20 69 64 2e 20 20 49 66 20 74 68 65 20  the id.  If the 
2320: 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a 75 73  left side is jus
2330: 74 20 22 69 64 22 20 74 68 65 6e 20 70 49 64 31  t "id" then pId1
2340: 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e   is the.** id an
2350: 64 20 70 49 64 32 20 69 73 20 61 6e 79 20 65 6d  d pId2 is any em
2360: 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76  pty string..*/.v
2370: 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
2380: 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  a(.  Parse *pPar
2390: 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  se, .  Token *pI
23a0: 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20 46 69  d1,        /* Fi
23b0: 72 73 74 20 70 61 72 74 20 6f 66 20 5b 73 63 68  rst part of [sch
23c0: 65 6d 61 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f  ema.]id field */
23d0: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20  .  Token *pId2, 
23e0: 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64         /* Second
23f0: 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61   part of [schema
2400: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
2410: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
2420: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
2430: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
2440: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
2450: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
2460: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
2470: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
2480: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
2490: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
24a0: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
24b0: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
24c0: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
24d0: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
24e0: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
24f0: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
2500: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
2510: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
2520: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
2530: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
2540: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
2550: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
2560: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
2570: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
2580: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
2590: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
25a0: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
25b0: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
25c0: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
25d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
25e0: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
25f0: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
2600: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
2610: 69 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a  id = 0;       /*
2620: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
2630: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
2640: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
2650: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
2660: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
2670: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
2680: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
2690: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
26a0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
26b0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
26c0: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
26f0: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
2700: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
2710: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
2720: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
2730: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
2740: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
2750: 20 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e   struct sPragmaN
2760: 61 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a  ames *pPragma;..
2770: 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74    if( v==0 ) ret
2780: 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  urn;.  sqlite3Vd
2790: 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29  beRunOnlyOnce(v)
27a0: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  ;.  pParse->nMem
27b0: 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65   = 2;..  /* Inte
27c0: 72 70 72 65 74 20 74 68 65 20 5b 73 63 68 65 6d  rpret the [schem
27d0: 61 2e 5d 20 70 61 72 74 20 6f 66 20 74 68 65 20  a.] part of the 
27e0: 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74  pragma statement
27f0: 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20 20 2a  . iDb is the.  *
2800: 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  * index of the d
2810: 61 74 61 62 61 73 65 20 74 68 69 73 20 70 72 61  atabase this pra
2820: 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61 70 70  gma is being app
2830: 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e 61 44  lied to in db.aD
2840: 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20  b[]. */.  iDb = 
2850: 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
2860: 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64 31 2c  me(pParse, pId1,
2870: 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a 20 20   pId2, &pId);.  
2880: 69 66 28 20 69 44 62 3c 30 20 29 20 72 65 74 75  if( iDb<0 ) retu
2890: 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d  rn;.  pDb = &db-
28a0: 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a  >aDb[iDb];..  /*
28b0: 20 49 66 20 74 68 65 20 74 65 6d 70 20 64 61 74   If the temp dat
28c0: 61 62 61 73 65 20 68 61 73 20 62 65 65 6e 20 65  abase has been e
28d0: 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65 64 20  xplicitly named 
28e0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 0a  as part of the .
28f0: 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d 61 6b    ** pragma, mak
2900: 65 20 73 75 72 65 20 69 74 20 69 73 20 6f 70 65  e sure it is ope
2910: 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69  n. .  */.  if( i
2920: 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74 65 33  Db==1 && sqlite3
2930: 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2940: 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20  (pParse) ){.    
2950: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a  return;.  }..  z
2960: 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33 4e 61  Left = sqlite3Na
2970: 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20  meFromToken(db, 
2980: 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65  pId);.  if( !zLe
2990: 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69  ft ) return;.  i
29a0: 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a  f( minusFlag ){.
29b0: 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c      zRight = sql
29c0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
29d0: 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29 3b 0a  "-%T", pValue);.
29e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69    }else{.    zRi
29f0: 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d  ght = sqlite3Nam
2a00: 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70  eFromToken(db, p
2a10: 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 61  Value);.  }..  a
2a20: 73 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a 20  ssert( pId2 );. 
2a30: 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30   zDb = pId2->n>0
2a40: 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20   ? pDb->zName : 
2a50: 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
2a60: 41 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65  AuthCheck(pParse
2a70: 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c  , SQLITE_PRAGMA,
2a80: 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20   zLeft, zRight, 
2a90: 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  zDb) ){.    goto
2aa0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
2ab0: 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53  ..  /* Send an S
2ac0: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2ad0: 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20  MA file-control 
2ae0: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
2af0: 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65  g VFS.  ** conne
2b00: 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72 65  ction.  If it re
2b10: 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c  turns SQLITE_OK,
2b20: 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61   then assume tha
2b30: 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20 68  t the VFS.  ** h
2b40: 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67 6d  andled the pragm
2b50: 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20 61  a and generate a
2b60: 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64 20   no-op prepared 
2b70: 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a  statement..  **.
2b80: 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
2b90: 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d  ION-OF: R-12238-
2ba0: 35 35 31 32 30 20 57 68 65 6e 65 76 65 72 20 61  55120 Whenever a
2bb0: 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e   PRAGMA statemen
2bc0: 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20 2a  t is parsed,.  *
2bd0: 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54  * an SQLITE_FCNT
2be0: 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63 6f  L_PRAGMA file co
2bf0: 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f  ntrol is sent to
2c00: 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74 65   the open sqlite
2c10: 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65  3_file.  ** obje
2c20: 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ct corresponding
2c30: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2c40: 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20 74   file to which t
2c50: 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73  he pragma.  ** s
2c60: 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73 2e  tatement refers.
2c70: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45  .  **.  ** IMPLE
2c80: 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
2c90: 32 39 38 37 35 2d 33 31 36 37 38 20 54 68 65 20  29875-31678 The 
2ca0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
2cb0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2cc0: 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f  GMA.  ** file co
2cd0: 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72 61  ntrol is an arra
2ce0: 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  y of pointers to
2cf0: 20 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a 2a   strings (char**
2d00: 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a 20  ) in which the. 
2d10: 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65   ** second eleme
2d20: 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61 79 20  nt of the array 
2d30: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
2d40: 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74 68  he pragma and th
2d50: 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65  e third.  ** ele
2d60: 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72 67 75  ment is the argu
2d70: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61 67  ment to the prag
2d80: 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68  ma or NULL if th
2d90: 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a  e pragma has no.
2da0: 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20    ** argument.. 
2db0: 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20   */.  aFcntl[0] 
2dc0: 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d  = 0;.  aFcntl[1]
2dd0: 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e   = zLeft;.  aFcn
2de0: 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a  tl[2] = zRight;.
2df0: 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b    aFcntl[3] = 0;
2e00: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
2e10: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
2e20: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c  rc = sqlite3_fil
2e30: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44  e_control(db, zD
2e40: 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  b, SQLITE_FCNTL_
2e50: 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61  PRAGMA, (void*)a
2e60: 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63  Fcntl);.  if( rc
2e70: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2e80: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54     returnSingleT
2e90: 65 78 74 28 76 2c 20 22 72 65 73 75 6c 74 22 2c  ext(v, "result",
2ea0: 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20   aFcntl[0]);.   
2eb0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46   sqlite3_free(aF
2ec0: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 67 6f  cntl[0]);.    go
2ed0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2ee0: 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
2ef0: 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a  ITE_NOTFOUND ){.
2f00: 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30      if( aFcntl[0
2f10: 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ] ){.      sqlit
2f20: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
2f30: 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b  e, "%s", aFcntl[
2f40: 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0]);.      sqlit
2f50: 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30  e3_free(aFcntl[0
2f60: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50  ]);.    }.    pP
2f70: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
2f80: 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72    pParse->rc = r
2f90: 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67  c;.    goto prag
2fa0: 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  ma_out;.  }..  /
2fb0: 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61  * Locate the pra
2fc0: 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75  gma in the looku
2fd0: 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72  p table */.  lwr
2fe0: 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72   = 0;.  upr = Ar
2ff0: 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e  raySize(aPragmaN
3000: 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65  ames)-1;.  while
3010: 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20  ( lwr<=upr ){.  
3020: 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72    mid = (lwr+upr
3030: 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  )/2;.    rc = sq
3040: 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c  lite3_stricmp(zL
3050: 65 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65  eft, aPragmaName
3060: 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  s[mid].zName);. 
3070: 20 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62     if( rc==0 ) b
3080: 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63  reak;.    if( rc
3090: 3c 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20  <0 ){.      upr 
30a0: 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d  = mid - 1;.    }
30b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20  else{.      lwr 
30c0: 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d  = mid + 1;.    }
30d0: 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75  .  }.  if( lwr>u
30e0: 70 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  pr ) goto pragma
30f0: 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61 20  _out;.  pPragma 
3100: 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  = &aPragmaNames[
3110: 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  mid];..  /* Make
3120: 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
3130: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61  se schema is loa
3140: 64 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d  ded if the pragm
3150: 61 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  a requires that 
3160: 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d  */.  if( (pPragm
3170: 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  a->mPragFlag & P
3180: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
3190: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
31a0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
31b0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
31c0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
31d0: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
31e0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
31f0: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
3200: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72  */.  switch( pPr
3210: 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29  agma->ePragTyp )
3220: 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  {.  .#if !define
3230: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
3240: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
3250: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3260: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
3270: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
3280: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61  MA [schema.]defa
3290: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20  ult_cache_size. 
32a0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
32b0: 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63  ema.]default_cac
32c0: 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  he_size=N.  **. 
32d0: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
32e0: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
32f0: 75 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e  urrent persisten
3300: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
3310: 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68  e.  ** page cach
3320: 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c  e size.  The val
3330: 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74  ue returned is t
3340: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
3350: 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20  r of.  ** pages 
3360: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
3370: 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  e.  The second f
3380: 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68  orm sets both th
3390: 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70  e current.  ** p
33a0: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76  age cache size v
33b0: 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72  alue and the per
33c0: 73 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63  sistent page cac
33d0: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20  he size value.  
33e0: 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ** stored in the
33f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
3400: 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20    **.  ** Older 
3410: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
3420: 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68 65  te would set the
3430: 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73   default cache s
3440: 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65  ize to a.  ** ne
3450: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74 6f  gative number to
3460: 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68 72   indicate synchr
3470: 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65 73  onous=OFF.  Thes
3480: 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e  e days, synchron
3490: 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61  ous.  ** is alwa
34a0: 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  ys on by default
34b0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   regardless of t
34c0: 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 64  he sign of the d
34d0: 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a  efault cache.  *
34e0: 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e  * size.  But con
34f0: 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74 68  tinue to take th
3500: 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
3510: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
3520: 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20  cache.  ** size 
3530: 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f  of historical co
3540: 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a  mpatibility..  *
3550: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
3560: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
3570: 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  IZE: {.    stati
3580: 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20  c const int iLn 
3590: 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49  = VDBE_OFFSET_LI
35a0: 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61  NENO(2);.    sta
35b0: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
35c0: 4c 69 73 74 20 67 65 74 43 61 63 68 65 53 69 7a  List getCacheSiz
35d0: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  e[] = {.      { 
35e0: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
35f0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
3600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3610: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f           /* 0 */
3620: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64  .      { OP_Read
3630: 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20  Cookie,  0, 1,  
3640: 20 20 20 20 20 20 42 54 52 45 45 5f 44 45 46 41        BTREE_DEFA
3650: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c  ULT_CACHE_SIZE},
3660: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
3670: 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20  { OP_IfPos,     
3680: 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30    1, 8,        0
3690: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e  },.      { OP_In
36a0: 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32 2c  teger,     0, 2,
36b0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
36c0: 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74 2c    { OP_Subtract,
36d0: 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20 20      1, 2,       
36e0: 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   1},.      { OP_
36f0: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
3700: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
3710: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
3720: 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20  ,     0, 1,     
3730: 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20     0},          
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3750: 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 6 */.      { O
3760: 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20 30  P_Noop,        0
3770: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
3780: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
3790: 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20 20  tRow,   1, 1,   
37a0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a       0},.    };.
37b0: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
37c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
37d0: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
37e0: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
37f0: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f  ht ){.      setO
3800: 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20  neColumnName(v, 
3810: 22 63 61 63 68 65 5f 73 69 7a 65 22 29 3b 0a 20  "cache_size");. 
3820: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
3830: 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 73 71  m += 2;.      sq
3840: 6c 69 74 65 33 56 64 62 65 56 65 72 69 66 79 41  lite3VdbeVerifyA
3850: 76 61 69 6c 61 62 6c 65 53 70 61 63 65 28 76 2c  vailableSpace(v,
3860: 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61   ArraySize(getCa
3870: 63 68 65 53 69 7a 65 29 29 3b 0a 20 20 20 20 20  cheSize));.     
3880: 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64   aOp = sqlite3Vd
3890: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
38a0: 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63 68  rraySize(getCach
38b0: 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65  eSize), getCache
38c0: 53 69 7a 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20  Size, iLn);.    
38d0: 20 20 61 73 73 65 72 74 28 20 61 4f 70 21 3d 30    assert( aOp!=0
38e0: 20 29 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d   );.      aOp[0]
38f0: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
3900: 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62   aOp[1].p1 = iDb
3910: 3b 0a 20 20 20 20 20 20 61 4f 70 5b 36 5d 2e 70  ;.      aOp[6].p
3920: 31 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41 55  1 = SQLITE_DEFAU
3930: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3b 0a 20  LT_CACHE_SIZE;. 
3940: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3950: 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74  int size = sqlit
3960: 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74  e3AbsInt32(sqlit
3970: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b  e3Atoi(zRight));
3980: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65  .      sqlite3Be
3990: 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
39a0: 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62  n(pParse, 0, iDb
39b0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
39c0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
39d0: 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20  _Integer, size, 
39e0: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
39f0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
3a00: 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62  P_SetCookie, iDb
3a10: 2c 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f  , BTREE_DEFAULT_
3a20: 43 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b 0a  CACHE_SIZE, 1);.
3a30: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
3a40: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
3a50: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
3a60: 20 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70   );.      pDb->p
3a70: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
3a80: 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20  ze = size;.     
3a90: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
3aa0: 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70  CacheSize(pDb->p
3ab0: 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  Bt, pDb->pSchema
3ac0: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
3ad0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
3ae0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53    }.#endif /* !S
3af0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
3b00: 5f 50 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c  _PRAGMAS && !SQL
3b10: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
3b20: 54 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  TED */..#if !def
3b30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
3b40: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
3b50: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
3b60: 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f  A [schema.]page_
3b70: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  PRAGM
3b80: 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f  A [schema.]page_
3b90: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
3ba0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
3bb0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
3bc0: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
3bd0: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
3be0: 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62  e page size in b
3bf0: 79 74 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e  ytes.  The secon
3c00: 64 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a  d form sets the.
3c10: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
3c20: 67 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  ge size value.  
3c30: 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e  The value can on
3c40: 6c 79 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a  ly be set if.  *
3c50: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  * the database h
3c60: 61 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20  as not yet been 
3c70: 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20  created..  */.  
3c80: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47  case PragTyp_PAG
3c90: 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74  E_SIZE: {.    Bt
3ca0: 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e  ree *pBt = pDb->
3cb0: 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28  pBt;.    assert(
3cc0: 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69   pBt!=0 );.    i
3cd0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
3ce0: 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41      int size = A
3cf0: 4c 57 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c  LWAYS(pBt) ? sql
3d00: 69 74 65 33 42 74 72 65 65 47 65 74 50 61 67 65  ite3BtreeGetPage
3d10: 53 69 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20  Size(pBt) : 0;. 
3d20: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
3d30: 65 49 6e 74 28 76 2c 20 22 70 61 67 65 5f 73 69  eInt(v, "page_si
3d40: 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20  ze", size);.    
3d50: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
3d60: 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20  Malloc may fail 
3d70: 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65  when setting the
3d80: 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20 74   page-size, as t
3d90: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 72  here is an inter
3da0: 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75 66  nal.      ** buf
3db0: 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61 67  fer that the pag
3dc0: 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65  er module resize
3dd0: 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  s using sqlite3_
3de0: 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20  realloc()..     
3df0: 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65   */.      db->ne
3e00: 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71 6c  xtPagesize = sql
3e10: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
3e20: 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49  ;.      if( SQLI
3e30: 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65  TE_NOMEM==sqlite
3e40: 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69 7a  3BtreeSetPageSiz
3e50: 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50  e(pBt, db->nextP
3e60: 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b  agesize,-1,0) ){
3e70: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  .        db->mal
3e80: 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
3e90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3ea0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
3eb0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
3ec0: 73 63 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64  schema.]secure_d
3ed0: 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47  elete.  **  PRAG
3ee0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 65 63 75  MA [schema.]secu
3ef0: 72 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46  re_delete=ON/OFF
3f00: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
3f10: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
3f20: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  s the current se
3f30: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
3f40: 2a 2a 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65  ** secure_delete
3f50: 20 66 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f   flag.  The seco
3f60: 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20  nd form changes 
3f70: 74 68 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74  the secure_delet
3f80: 65 0a 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74  e.  ** flag sett
3f90: 69 6e 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20  ing and reports 
3fa0: 74 68 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20  thenew value..  
3fb0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
3fc0: 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a  p_SECURE_DELETE:
3fd0: 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42   {.    Btree *pB
3fe0: 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  t = pDb->pBt;.  
3ff0: 20 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20    int b = -1;.  
4000: 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30    assert( pBt!=0
4010: 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   );.    if( zRig
4020: 68 74 20 29 7b 0a 20 20 20 20 20 20 62 20 3d 20  ht ){.      b = 
4030: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
4040: 6e 28 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20  n(zRight, 0);.  
4050: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49 64 32    }.    if( pId2
4060: 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29  ->n==0 && b>=0 )
4070: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
4080: 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
4090: 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
40a0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
40b0: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
40c0: 65 74 65 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ete(db->aDb[ii].
40d0: 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d  pBt, b);.      }
40e0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 20 3d 20 73  .    }.    b = s
40f0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75 72  qlite3BtreeSecur
4100: 65 44 65 6c 65 74 65 28 70 42 74 2c 20 62 29 3b  eDelete(pBt, b);
4110: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
4120: 65 49 6e 74 28 76 2c 20 22 73 65 63 75 72 65 5f  eInt(v, "secure_
4130: 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20 20  delete", b);.   
4140: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
4150: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
4160: 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65  schema.]max_page
4170: 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41  _count.  **  PRA
4180: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 61 78  GMA [schema.]max
4190: 5f 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20  _page_count=N.  
41a0: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
41b0: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
41c0: 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69  he current setti
41d0: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
41e0: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
41f0: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64  f pages in the d
4200: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
4210: 68 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20  he .  ** second 
4220: 66 6f 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f  form attempts to
4230: 20 63 68 61 6e 67 65 20 74 68 69 73 20 73 65 74   change this set
4240: 74 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a  ting.  Both.  **
4250: 20 66 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68   forms return th
4260: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
4270: 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  g..  **.  ** The
4280: 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20   absolute value 
4290: 6f 66 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54  of N is used.  T
42a0: 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e  his is undocumen
42b0: 74 65 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20  ted and might.  
42c0: 2a 2a 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20  ** change.  The 
42d0: 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20  only purpose is 
42e0: 74 6f 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61  to provide an ea
42f0: 73 79 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20  sy way to test. 
4300: 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41   ** the sqlite3A
4310: 62 73 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69  bsInt32() functi
4320: 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50  on..  **.  **  P
4330: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 70  RAGMA [schema.]p
4340: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  age_count.  **. 
4350: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
4360: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
4370: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
4380: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
4390: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
43a0: 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20  GE_COUNT: {.    
43b0: 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71  int iReg;.    sq
43c0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
43d0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
43e0: 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b  b);.    iReg = +
43f0: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
4400: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f     if( sqlite3To
4410: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
4420: 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71  ='p' ){.      sq
4430: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
4440: 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c  v, OP_Pagecount,
4450: 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20   iDb, iReg);.   
4460: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
4470: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
4480: 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20  v, OP_MaxPgcnt, 
4490: 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20  iDb, iReg, .    
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44b0: 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e      sqlite3AbsIn
44c0: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
44d0: 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d  zRight)));.    }
44e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
44f0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
4500: 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29  ultRow, iReg, 1)
4510: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4520: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
4530: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
4540: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
4550: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
4560: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
4570: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62  RANSIENT);.    b
4580: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
4590: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
45a0: 68 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f  hema.]locking_mo
45b0: 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  de.  **  PRAGMA 
45c0: 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67  [schema.]locking
45d0: 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c  _mode = (normal|
45e0: 65 78 63 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a  exclusive).  */.
45f0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c    case PragTyp_L
4600: 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20  OCKING_MODE: {. 
4610: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
4620: 52 65 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a  Ret = "normal";.
4630: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
4640: 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a  getLockingMode(z
4650: 52 69 67 68 74 29 3b 0a 0a 20 20 20 20 69 66 28  Right);..    if(
4660: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65   pId2->n==0 && e
4670: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
4680: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b  INGMODE_QUERY ){
4690: 0a 20 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65  .      /* Simple
46a0: 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67   "PRAGMA locking
46b0: 5f 6d 6f 64 65 3b 22 20 73 74 61 74 65 6d 65 6e  _mode;" statemen
46c0: 74 2e 20 54 68 69 73 20 69 73 20 61 20 71 75 65  t. This is a que
46d0: 72 79 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  ry for.      ** 
46e0: 74 68 65 20 63 75 72 72 65 6e 74 20 64 65 66 61  the current defa
46f0: 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65  ult locking mode
4700: 20 28 77 68 69 63 68 20 6d 61 79 20 62 65 20 64   (which may be d
4710: 69 66 66 65 72 65 6e 74 20 74 6f 0a 20 20 20 20  ifferent to.    
4720: 20 20 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67    ** the locking
4730: 2d 6d 6f 64 65 20 6f 66 20 74 68 65 20 6d 61 69  -mode of the mai
4740: 6e 20 64 61 74 61 62 61 73 65 29 2e 0a 20 20 20  n database)..   
4750: 20 20 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64     */.      eMod
4760: 65 20 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b  e = db->dfltLock
4770: 4d 6f 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Mode;.    }else{
4780: 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50  .      Pager *pP
4790: 61 67 65 72 3b 0a 20 20 20 20 20 20 69 66 28 20  ager;.      if( 
47a0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20  pId2->n==0 ){.  
47b0: 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 6e        /* This in
47c0: 64 69 63 61 74 65 73 20 74 68 61 74 20 6e 6f 20  dicates that no 
47d0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 77 61  database name wa
47e0: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
47f0: 61 72 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f  art.        ** o
4800: 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d  f the PRAGMA com
4810: 6d 61 6e 64 2e 20 49 6e 20 74 68 69 73 20 63 61  mand. In this ca
4820: 73 65 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d  se the locking-m
4830: 6f 64 65 20 6d 75 73 74 20 62 65 0a 20 20 20 20  ode must be.    
4840: 20 20 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c      ** set on al
4850: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
4860: 61 73 65 73 2c 20 61 73 20 77 65 6c 6c 20 61 73  ases, as well as
4870: 20 74 68 65 20 6d 61 69 6e 20 64 62 20 66 69 6c   the main db fil
4880: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20 20  e..        **.  
4890: 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74        ** Also, t
48a0: 68 65 20 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c  he sqlite3.dfltL
48b0: 6f 63 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c 65  ockMode variable
48c0: 20 69 73 20 73 65 74 20 73 6f 20 74 68 61 74 0a   is set so that.
48d0: 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 79 20 73          ** any s
48e0: 75 62 73 65 71 75 65 6e 74 6c 79 20 61 74 74 61  ubsequently atta
48f0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
4900: 6c 73 6f 20 75 73 65 20 74 68 65 20 73 70 65 63  lso use the spec
4910: 69 66 69 65 64 0a 20 20 20 20 20 20 20 20 2a 2a  ified.        **
4920: 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20   locking mode.. 
4930: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
4940: 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20    int ii;.      
4950: 20 20 61 73 73 65 72 74 28 70 44 62 3d 3d 26 64    assert(pDb==&d
4960: 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20  b->aDb[0]);.    
4970: 20 20 20 20 66 6f 72 28 69 69 3d 32 3b 20 69 69      for(ii=2; ii
4980: 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
4990: 0a 20 20 20 20 20 20 20 20 20 20 70 50 61 67 65  .          pPage
49a0: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
49b0: 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 69 69  Pager(db->aDb[ii
49c0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 20 20  ].pBt);.        
49d0: 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f    sqlite3PagerLo
49e0: 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72  ckingMode(pPager
49f0: 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20  , eMode);.      
4a00: 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
4a10: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28  dfltLockMode = (
4a20: 75 38 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20  u8)eMode;.      
4a30: 7d 0a 20 20 20 20 20 20 70 50 61 67 65 72 20 3d  }.      pPager =
4a40: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
4a50: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
4a60: 20 20 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69      eMode = sqli
4a70: 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d  te3PagerLockingM
4a80: 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64  ode(pPager, eMod
4a90: 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61  e);.    }..    a
4aa0: 73 73 65 72 74 28 20 65 4d 6f 64 65 3d 3d 50 41  ssert( eMode==PA
4ab0: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
4ac0: 4e 4f 52 4d 41 4c 0a 20 20 20 20 20 20 20 20 20  NORMAL.         
4ad0: 20 20 20 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41 47     || eMode==PAG
4ae0: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45  ER_LOCKINGMODE_E
4af0: 58 43 4c 55 53 49 56 45 20 29 3b 0a 20 20 20 20  XCLUSIVE );.    
4b00: 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52  if( eMode==PAGER
4b10: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43  _LOCKINGMODE_EXC
4b20: 4c 55 53 49 56 45 20 29 7b 0a 20 20 20 20 20 20  LUSIVE ){.      
4b30: 7a 52 65 74 20 3d 20 22 65 78 63 6c 75 73 69 76  zRet = "exclusiv
4b40: 65 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  e";.    }.    re
4b50: 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76  turnSingleText(v
4b60: 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22  , "locking_mode"
4b70: 2c 20 7a 52 65 74 29 3b 0a 20 20 20 20 62 72 65  , zRet);.    bre
4b80: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
4b90: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
4ba0: 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  ma.]journal_mode
4bb0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
4bc0: 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d  chema.]journal_m
4bd0: 6f 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20  ode =.  **      
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bf0: 28 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c  (delete|persist|
4c00: 6f 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d  off|truncate|mem
4c10: 6f 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a  ory|wal|off).  *
4c20: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
4c30: 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b  _JOURNAL_MODE: {
4c40: 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20  .    int eMode; 
4c50: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
4c60: 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e   the PAGER_JOURN
4c70: 41 4c 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f  ALMODE_XXX symbo
4c80: 6c 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69  ls */.    int ii
4c90: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
4ca0: 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a  oop counter */..
4cb0: 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e      setOneColumn
4cc0: 4e 61 6d 65 28 76 2c 20 22 6a 6f 75 72 6e 61 6c  Name(v, "journal
4cd0: 5f 6d 6f 64 65 22 29 3b 0a 20 20 20 20 69 66 28  _mode");.    if(
4ce0: 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20   zRight==0 ){.  
4cf0: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
4d00: 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61  is no "=MODE" pa
4d10: 72 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61  rt of the pragma
4d20: 2c 20 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72  , do a query for
4d30: 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75   the.      ** cu
4d40: 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20  rrent mode */.  
4d50: 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45      eMode = PAGE
4d60: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
4d70: 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ERY;.    }else{.
4d80: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
4d90: 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69   *zMode;.      i
4da0: 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  nt n = sqlite3St
4db0: 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a  rlen30(zRight);.
4dc0: 20 20 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d        for(eMode=
4dd0: 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69  0; (zMode = sqli
4de0: 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
4df0: 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65  me(eMode))!=0; e
4e00: 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20  Mode++){.       
4e10: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
4e20: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f  ICmp(zRight, zMo
4e30: 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61  de, n)==0 ) brea
4e40: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
4e50: 20 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20   if( !zMode ){. 
4e60: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
4e70: 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f   "=MODE" part do
4e80: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79  es not match any
4e90: 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d   known journal m
4ea0: 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ode,.        ** 
4eb0: 74 68 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20  then do a query 
4ec0: 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  */.        eMode
4ed0: 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c   = PAGER_JOURNAL
4ee0: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20  MODE_QUERY;.    
4ef0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4f00: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a  ( eMode==PAGER_J
4f10: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
4f20: 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29   && pId2->n==0 )
4f30: 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65  {.      /* Conve
4f40: 72 74 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e  rt "PRAGMA journ
4f50: 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50  al_mode" into "P
4f60: 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e  RAGMA main.journ
4f70: 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20  al_mode" */.    
4f80: 20 20 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20    iDb = 0;.     
4f90: 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20   pId2->n = 1;.  
4fa0: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64    }.    for(ii=d
4fb0: 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b  b->nDb-1; ii>=0;
4fc0: 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66   ii--){.      if
4fd0: 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  ( db->aDb[ii].pB
4fe0: 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c  t && (ii==iDb ||
4ff0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a   pId2->n==0) ){.
5000: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
5010: 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20  dbeUsesBtree(v, 
5020: 69 69 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ii);.        sql
5030: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
5040: 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  , OP_JournalMode
5050: 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b  , ii, 1, eMode);
5060: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5070: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
5080: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
5090: 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
50a0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
50b0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
50c0: 73 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f  schema.]journal_
50d0: 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20  size_limit.  ** 
50e0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
50f0: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
5100: 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  mit=N.  **.  ** 
5110: 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 73  Get or set the s
5120: 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c  ize limit on rol
5130: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
5140: 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  les..  */.  case
5150: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
5160: 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _SIZE_LIMIT: {. 
5170: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
5180: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
5190: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
51a0: 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d      i64 iLimit =
51b0: 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69   -2;.    if( zRi
51c0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
51d0: 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
51e0: 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69  4(zRight, &iLimi
51f0: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c  t);.      if( iL
5200: 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74  imit<-1 ) iLimit
5210: 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20   = -1;.    }.   
5220: 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65   iLimit = sqlite
5230: 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a  3PagerJournalSiz
5240: 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69  eLimit(pPager, i
5250: 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75  Limit);.    retu
5260: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
5270: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
5280: 69 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20  it", iLimit);.  
5290: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65    break;.  }..#e
52a0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
52b0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
52c0: 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  S */..  /*.  ** 
52d0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
52e0: 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a  ]auto_vacuum.  *
52f0: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
5300: 61 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e  a.]auto_vacuum=N
5310: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f  .  **.  ** Get o
5320: 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  r set the value 
5330: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
5340: 27 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70 61  'auto-vacuum' pa
5350: 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68  rameter..  ** Th
5360: 65 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f  e value is one o
5370: 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c  f:  0 NONE 1 FUL
5380: 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a  L 2 INCREMENTAL.
5390: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
53a0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
53b0: 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54  UUM.  case PragT
53c0: 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20  yp_AUTO_VACUUM: 
53d0: 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  {.    Btree *pBt
53e0: 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20   = pDb->pBt;.   
53f0: 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20   assert( pBt!=0 
5400: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
5410: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
5420: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
5430: 61 75 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71  auto_vacuum", sq
5440: 6c 69 74 65 33 42 74 72 65 65 47 65 74 41 75 74  lite3BtreeGetAut
5450: 6f 56 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20  oVacuum(pBt));. 
5460: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5470: 69 6e 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41  int eAuto = getA
5480: 75 74 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74  utoVacuum(zRight
5490: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
54a0: 20 65 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75   eAuto>=0 && eAu
54b0: 74 6f 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64  to<=2 );.      d
54c0: 62 2d 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d  b->nextAutovac =
54d0: 20 28 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20   (u8)eAuto;.    
54e0: 20 20 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74    /* Call SetAut
54f0: 6f 56 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74  oVacuum() to set
5500: 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   initialize the 
5510: 69 6e 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e  internal auto an
5520: 64 0a 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d  d.      ** incr-
5530: 76 61 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68  vacuum flags. Th
5540: 69 73 20 69 73 20 72 65 71 75 69 72 65 64 20 69  is is required i
5550: 6e 20 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e  n case this conn
5560: 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20  ection.      ** 
5570: 63 72 65 61 74 65 73 20 74 68 65 20 64 61 74 61  creates the data
5580: 62 61 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73  base file. It is
5590: 20 69 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20   important that 
55a0: 69 74 20 69 73 20 63 72 65 61 74 65 64 0a 20 20  it is created.  
55b0: 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74      ** as an aut
55c0: 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65  o-vacuum capable
55d0: 20 64 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20   db..      */.  
55e0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
55f0: 42 74 72 65 65 53 65 74 41 75 74 6f 56 61 63 75  BtreeSetAutoVacu
5600: 75 6d 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a  um(pBt, eAuto);.
5610: 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
5620: 4c 49 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74  LITE_OK && (eAut
5630: 6f 3d 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32  o==1 || eAuto==2
5640: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  ) ){.        /* 
5650: 57 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65  When setting the
5660: 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64   auto_vacuum mod
5670: 65 20 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c  e to either "ful
5680: 6c 22 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a  l" or .        *
5690: 2a 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c  * "incremental",
56a0: 20 77 72 69 74 65 20 74 68 65 20 76 61 6c 75 65   write the value
56b0: 20 6f 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74   of meta[6] in t
56c0: 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
56d0: 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66      ** file. Bef
56e0: 6f 72 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d  ore writing to m
56f0: 65 74 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68  eta[6], check th
5700: 61 74 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63  at meta[3] indic
5710: 61 74 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20  ates.        ** 
5720: 74 68 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79  that this really
5730: 20 69 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75   is an auto-vacu
5740: 75 6d 20 63 61 70 61 62 6c 65 20 64 61 74 61 62  um capable datab
5750: 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ase..        */.
5760: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
5770: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
5780: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
5790: 4f 28 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74  O(2);.        st
57a0: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
57b0: 70 4c 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d  pList setMeta6[]
57c0: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b   = {.          {
57d0: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
57e0: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31      0,         1
57f0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
5800: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
5810: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
5820: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20  ReadCookie,     
5830: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
5840: 20 20 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47        BTREE_LARG
5850: 45 53 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a  EST_ROOT_PAGE},.
5860: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49            { OP_I
5870: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 31  f,             1
5880: 2c 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20  ,         0,    
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
58a0: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
58b0: 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c        { OP_Halt,
58c0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
58d0: 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20  E_OK, OE_Abort, 
58e0: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
58f0: 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 3 */.        
5900: 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20    { OP_Integer, 
5910: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
5920: 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20    1,            
5930: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34       0},    /* 4
5940: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
5950: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
5960: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54     0,         BT
5970: 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c  REE_INCR_VACUUM,
5980: 20 31 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a   1},    /* 5 */.
5990: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
59a0: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
59b0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 41 64 64          int iAdd
59c0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  r = sqlite3VdbeC
59d0: 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20  urrentAddr(v);. 
59e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
59f0: 62 65 56 65 72 69 66 79 41 76 61 69 6c 61 62 6c  beVerifyAvailabl
5a00: 65 53 70 61 63 65 28 76 2c 20 41 72 72 61 79 53  eSpace(v, ArrayS
5a10: 69 7a 65 28 73 65 74 4d 65 74 61 36 29 29 3b 0a  ize(setMeta6));.
5a20: 20 20 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71          aOp = sq
5a30: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
5a40: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
5a50: 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65  setMeta6), setMe
5a60: 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20  ta6, iLn);.     
5a70: 20 20 20 61 73 73 65 72 74 28 20 61 4f 70 21 3d     assert( aOp!=
5a80: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 4f 70  0 );.        aOp
5a90: 5b 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20  [0].p1 = iDb;.  
5aa0: 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20        aOp[1].p1 
5ab0: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61  = iDb;.        a
5ac0: 4f 70 5b 32 5d 2e 70 32 20 3d 20 69 41 64 64 72  Op[2].p2 = iAddr
5ad0: 2b 34 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b  +4;.        aOp[
5ae0: 34 5d 2e 70 31 20 3d 20 65 41 75 74 6f 20 2d 20  4].p1 = eAuto - 
5af0: 31 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 35  1;.        aOp[5
5b00: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
5b10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
5b20: 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29  sesBtree(v, iDb)
5b30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5b40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
5b50: 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  endif..  /*.  **
5b60: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
5b70: 2e 5d 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61  .]incremental_va
5b80: 63 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a  cuum(N).  **.  *
5b90: 2a 20 44 6f 20 4e 20 73 74 65 70 73 20 6f 66 20  * Do N steps of 
5ba0: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
5bb0: 75 6d 69 6e 67 20 6f 6e 20 61 20 64 61 74 61 62  uming on a datab
5bc0: 61 73 65 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65  ase..  */.#ifnde
5bd0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
5be0: 54 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20  TOVACUUM.  case 
5bf0: 50 72 61 67 54 79 70 5f 49 4e 43 52 45 4d 45 4e  PragTyp_INCREMEN
5c00: 54 41 4c 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20  TAL_VACUUM: {.  
5c10: 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 61 64    int iLimit, ad
5c20: 64 72 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  dr;.    if( zRig
5c30: 68 74 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65  ht==0 || !sqlite
5c40: 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74  3GetInt32(zRight
5c50: 2c 20 26 69 4c 69 6d 69 74 29 20 7c 7c 20 69 4c  , &iLimit) || iL
5c60: 69 6d 69 74 3c 3d 30 20 29 7b 0a 20 20 20 20 20  imit<=0 ){.     
5c70: 20 69 4c 69 6d 69 74 20 3d 20 30 78 37 66 66 66   iLimit = 0x7fff
5c80: 66 66 66 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ffff;.    }.    
5c90: 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
5ca0: 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73  eOperation(pPars
5cb0: 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20  e, 0, iDb);.    
5cc0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5cd0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
5ce0: 20 69 4c 69 6d 69 74 2c 20 31 29 3b 0a 20 20 20   iLimit, 1);.   
5cf0: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
5d00: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
5d10: 49 6e 63 72 56 61 63 75 75 6d 2c 20 69 44 62 29  IncrVacuum, iDb)
5d20: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
5d30: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5d40: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52  beAddOp1(v, OP_R
5d50: 65 73 75 6c 74 52 6f 77 2c 20 31 29 3b 0a 20 20  esultRow, 1);.  
5d60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5d70: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
5d80: 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 73 71  , 1, -1);.    sq
5d90: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
5da0: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20  v, OP_IfPos, 1, 
5db0: 61 64 64 72 29 3b 20 56 64 62 65 43 6f 76 65 72  addr); VdbeCover
5dc0: 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69  age(v);.    sqli
5dd0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
5de0: 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 62 72  v, addr);.    br
5df0: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
5e00: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5e10: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
5e20: 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  AS.  /*.  **  PR
5e30: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61  AGMA [schema.]ca
5e40: 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50  che_size.  **  P
5e50: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63  RAGMA [schema.]c
5e60: 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  ache_size=N.  **
5e70: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
5e80: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
5e90: 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73   current local s
5ea0: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
5eb0: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
5ec0: 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20  ize. The second 
5ed0: 66 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f  form sets the lo
5ee0: 63 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  cal.  ** page ca
5ef0: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20  che size value. 
5f00: 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76   If N is positiv
5f10: 65 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74  e then that is t
5f20: 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f  he.  ** number o
5f30: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63  f pages in the c
5f40: 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e  ache.  If N is n
5f50: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
5f60: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
5f70: 20 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74   pages is adjust
5f80: 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63  ed so that the c
5f90: 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62  ache uses -N kib
5fa0: 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d  ibytes.  ** of m
5fb0: 65 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  emory..  */.  ca
5fc0: 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45  se PragTyp_CACHE
5fd0: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73  _SIZE: {.    ass
5fe0: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
5ff0: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
6000: 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
6010: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
6020: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
6030: 49 6e 74 28 76 2c 20 22 63 61 63 68 65 5f 73 69  Int(v, "cache_si
6040: 7a 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  ze", pDb->pSchem
6050: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
6060: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6070: 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69   int size = sqli
6080: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b  te3Atoi(zRight);
6090: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68  .      pDb->pSch
60a0: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20  ema->cache_size 
60b0: 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71  = size;.      sq
60c0: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
60d0: 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c  heSize(pDb->pBt,
60e0: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
60f0: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
6100: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
6110: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
6120: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63  GMA [schema.]cac
6130: 68 65 5f 73 70 69 6c 6c 0a 20 20 2a 2a 20 20 50  he_spill.  **  P
6140: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 70 69 6c  RAGMA cache_spil
6150: 6c 3d 42 4f 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20  l=BOOLEAN.  **  
6160: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
6170: 63 61 63 68 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20  cache_spill=N.  
6180: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
6190: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
61a0: 68 65 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c  he current local
61b0: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
61c0: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
61d0: 20 73 70 69 6c 6c 20 73 69 7a 65 2e 20 54 68 65   spill size. The
61e0: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 75 72   second form tur
61f0: 6e 73 20 63 61 63 68 65 20 73 70 69 6c 6c 20 6f  ns cache spill o
6200: 6e 0a 20 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20  n.  ** or off.  
6210: 57 68 65 6e 20 74 75 72 6e 6e 69 6e 67 20 63 61  When turnning ca
6220: 63 68 65 20 73 70 69 6c 6c 20 6f 6e 2c 20 74 68  che spill on, th
6230: 65 20 73 69 7a 65 20 69 73 20 73 65 74 20 74 6f  e size is set to
6240: 20 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e   the.  ** curren
6250: 74 20 63 61 63 68 65 5f 73 69 7a 65 2e 20 20 54  t cache_size.  T
6260: 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20 73 65  he third form se
6270: 74 73 20 61 20 73 70 69 6c 6c 20 73 69 7a 65 20  ts a spill size 
6280: 74 68 61 74 0a 20 20 2a 2a 20 6d 61 79 20 62 65  that.  ** may be
6290: 20 64 69 66 66 65 72 65 6e 74 20 66 6f 72 6d 20   different form 
62a0: 74 68 65 20 63 61 63 68 65 20 73 69 7a 65 2e 0a  the cache size..
62b0: 20 20 2a 2a 20 49 66 20 4e 20 69 73 20 70 6f 73    ** If N is pos
62c0: 69 74 69 76 65 20 74 68 65 6e 20 74 68 61 74 20  itive then that 
62d0: 69 73 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62  is the.  ** numb
62e0: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
62f0: 68 65 20 63 61 63 68 65 2e 20 20 49 66 20 4e 20  he cache.  If N 
6300: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
6310: 6e 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65  n the.  ** numbe
6320: 72 20 6f 66 20 70 61 67 65 73 20 69 73 20 61 64  r of pages is ad
6330: 6a 75 73 74 65 64 20 73 6f 20 74 68 61 74 20 74  justed so that t
6340: 68 65 20 63 61 63 68 65 20 75 73 65 73 20 2d 4e  he cache uses -N
6350: 20 6b 69 62 69 62 79 74 65 73 0a 20 20 2a 2a 20   kibibytes.  ** 
6360: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a  of memory..  **.
6370: 20 20 2a 2a 20 49 66 20 74 68 65 20 6e 75 6d 62    ** If the numb
6380: 65 72 20 6f 66 20 63 61 63 68 65 5f 73 70 69 6c  er of cache_spil
6390: 6c 20 70 61 67 65 73 20 69 73 20 6c 65 73 73 20  l pages is less 
63a0: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
63b0: 6f 66 0a 20 20 2a 2a 20 63 61 63 68 65 5f 73 69  of.  ** cache_si
63c0: 7a 65 20 70 61 67 65 73 2c 20 6e 6f 20 73 70 69  ze pages, no spi
63d0: 6c 6c 69 6e 67 20 6f 63 63 75 72 73 20 75 6e 74  lling occurs unt
63e0: 69 6c 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e  il the page coun
63f0: 74 20 65 78 63 65 65 64 73 0a 20 20 2a 2a 20 74  t exceeds.  ** t
6400: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63  he number of cac
6410: 68 65 5f 73 69 7a 65 20 70 61 67 65 73 2e 0a 20  he_size pages.. 
6420: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 63 61 63   **.  ** The cac
6430: 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e  he_spill=BOOLEAN
6440: 20 73 65 74 74 69 6e 67 20 61 70 70 6c 69 65 73   setting applies
6450: 20 74 6f 20 61 6c 6c 20 61 74 74 61 63 68 65 64   to all attached
6460: 20 73 63 68 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e   schemas,.  ** n
6470: 6f 74 20 6a 75 73 74 20 74 68 65 20 73 63 68 65  ot just the sche
6480: 6d 61 20 73 70 65 63 69 66 69 65 64 2e 0a 20 20  ma specified..  
6490: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
64a0: 70 5f 43 41 43 48 45 5f 53 50 49 4c 4c 3a 20 7b  p_CACHE_SPILL: {
64b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
64c0: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
64d0: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
64e0: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
64f0: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
6500: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
6510: 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c 20 0a 20  cache_spill", . 
6520: 20 20 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61          (db->fla
6530: 67 73 20 26 20 53 51 4c 49 54 45 5f 43 61 63 68  gs & SQLITE_Cach
6540: 65 53 70 69 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a  eSpill)==0 ? 0 :
6550: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71   .            sq
6560: 6c 69 74 65 33 42 74 72 65 65 53 65 74 53 70 69  lite3BtreeSetSpi
6570: 6c 6c 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c  llSize(pDb->pBt,
6580: 30 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0));.    }else{.
6590: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d        int size =
65a0: 20 31 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71   1;.      if( sq
65b0: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52  lite3GetInt32(zR
65c0: 69 67 68 74 2c 20 26 73 69 7a 65 29 20 29 7b 0a  ight, &size) ){.
65d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
65e0: 74 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65  treeSetSpillSize
65f0: 28 70 44 62 2d 3e 70 42 74 2c 20 73 69 7a 65 29  (pDb->pBt, size)
6600: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6610: 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f  if( sqlite3GetBo
6620: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 73 69  olean(zRight, si
6630: 7a 65 21 3d 30 29 20 29 7b 0a 20 20 20 20 20 20  ze!=0) ){.      
6640: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
6650: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
6660: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
6670: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
6680: 20 26 3d 20 7e 53 51 4c 49 54 45 5f 43 61 63 68   &= ~SQLITE_Cach
6690: 65 53 70 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a  eSpill;.      }.
66a0: 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65        setAllPage
66b0: 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20  rFlags(db);.    
66c0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
66d0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
66e0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61  GMA [schema.]mma
66f0: 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20  p_size(N).  **. 
6700: 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20   ** Used to set 
6710: 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d  mapping size lim
6720: 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20  it. The mapping 
6730: 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20  size limit is.  
6740: 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74  ** used to limit
6750: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
6760: 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72  ize of all memor
6770: 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73  y mapped regions
6780: 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74   of the.  ** dat
6790: 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74  abase file. If t
67a0: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73  his parameter is
67b0: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68   set to zero, th
67c0: 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e  en memory mappin
67d0: 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73  g.  ** is not us
67e0: 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e  ed at all.  If N
67f0: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
6800: 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d  en the default m
6810: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c  emory map.  ** l
6820: 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20  imit determined 
6830: 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  by sqlite3_confi
6840: 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
6850: 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65  MMAP_SIZE) is se
6860: 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61  t..  ** The para
6870: 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75  meter N is measu
6880: 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20  red in bytes..  
6890: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c  **.  ** This val
68a0: 75 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20  ue is advisory. 
68b0: 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   The underlying 
68c0: 56 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d  VFS is free to m
68d0: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61  emory map.  ** a
68e0: 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d  s little or as m
68f0: 75 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e  uch as it wants.
6900: 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69    Except, if N i
6910: 73 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20  s set to 0 then 
6920: 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c  the.  ** upper l
6930: 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72  ayers will never
6940: 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74   invoke the xFet
6950: 63 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f  ch interfaces to
6960: 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20   the VFS..  */. 
6970: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d   case PragTyp_MM
6980: 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  AP_SIZE: {.    s
6990: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b  qlite3_int64 sz;
69a0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
69b0: 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20  MMAP_SIZE>0.    
69c0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
69d0: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
69e0: 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
69f0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
6a00: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
6a10: 20 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72      sqlite3DecOr
6a20: 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c  HexToI64(zRight,
6a30: 20 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28   &sz);.      if(
6a40: 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c   sz<0 ) sz = sql
6a50: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
6a60: 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69  .szMmap;.      i
6a70: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20  f( pId2->n==0 ) 
6a80: 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b  db->szMmap = sz;
6a90: 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62  .      for(ii=db
6aa0: 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20  ->nDb-1; ii>=0; 
6ab0: 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69  ii--){.        i
6ac0: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
6ad0: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
6ae0: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
6af0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
6b00: 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69  e3BtreeSetMmapLi
6b10: 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  mit(db->aDb[ii].
6b20: 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20  pBt, sz);.      
6b30: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
6b40: 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20  }.    sz = -1;. 
6b50: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
6b60: 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
6b70: 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e   zDb, SQLITE_FCN
6b80: 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73  TL_MMAP_SIZE, &s
6b90: 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a  z);.#else.    sz
6ba0: 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 0;.    rc = S
6bb0: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66  QLITE_OK;.#endif
6bc0: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
6bd0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
6be0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
6bf0: 76 2c 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 20  v, "mmap_size", 
6c00: 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  sz);.    }else i
6c10: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc!=SQLITE_NO
6c20: 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20 20  TFOUND ){.      
6c30: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
6c40: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63        pParse->rc
6c50: 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20   = rc;.    }.   
6c60: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
6c70: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
6c80: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a 20  temp_store.  ** 
6c90: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6ca0: 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22 7c  ore = "default"|
6cb0: 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a  "memory"|"file".
6cc0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
6cd0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
6ce0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
6cf0: 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e 20  emp_store flag. 
6d00: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
6d10: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64  he local value d
6d20: 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61  oes not make cha
6d30: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b  nges to the disk
6d40: 20 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64 65   file and the de
6d50: 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65  fault.  ** value
6d60: 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65   will be restore
6d70: 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
6d80: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
6d90: 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  opened..  **.  *
6da0: 2a 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69  * Note that it i
6db0: 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74  s possible for t
6dc0: 68 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69  he library compi
6dd0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options 
6de0: 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64 65  to.  ** override
6df0: 20 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20 20   this setting.  
6e00: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
6e10: 70 5f 54 45 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a  p_TEMP_STORE: {.
6e20: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
6e30: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
6e40: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 65 6d  ingleInt(v, "tem
6e50: 70 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65  p_store", db->te
6e60: 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d  mp_store);.    }
6e70: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e  else{.      chan
6e80: 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50  geTempStorage(pP
6e90: 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20  arse, zRight);. 
6ea0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
6eb0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
6ec0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6ed0: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
6ee0: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
6ef0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
6f00: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
6f10: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
6f20: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
6f30: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
6f40: 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f   the temp_store_
6f50: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
6f60: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
6f70: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
6f80: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
6f90: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
6fa0: 72 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  r temporary file
6fb0: 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20  s..  ** Setting 
6fc0: 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67  to a null string
6fd0: 20 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20   reverts to the 
6fe0: 64 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72  default temporar
6ff0: 79 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72  y directory sear
7000: 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70  ch..  ** If temp
7010: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
7020: 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e  is changed, then
7030: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
7040: 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a  torage..  **.  *
7050: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
7060: 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45  _TEMP_STORE_DIRE
7070: 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28  CTORY: {.    if(
7080: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
7090: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65    returnSingleTe
70a0: 78 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72  xt(v, "temp_stor
70b0: 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 73 71  e_directory", sq
70c0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
70d0: 74 6f 72 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tory);.    }else
70e0: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
70f0: 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20  _OMIT_WSD.      
7100: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
7110: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73  .        int res
7120: 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
7130: 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64  qlite3OsAccess(d
7140: 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c  b->pVfs, zRight,
7150: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52   SQLITE_ACCESS_R
7160: 45 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b  EADWRITE, &res);
7170: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
7180: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65  =SQLITE_OK || re
7190: 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
71a0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
71b0: 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61  g(pParse, "not a
71c0: 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74   writable direct
71d0: 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ory");.         
71e0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
71f0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
7200: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 53 51    }.      if( SQ
7210: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
7220: 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51  =0.       || (SQ
7230: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
7240: 3d 31 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73  =1 && db->temp_s
7250: 74 6f 72 65 3c 3d 31 29 0a 20 20 20 20 20 20 20  tore<=1).       
7260: 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f  || (SQLITE_TEMP_
7270: 53 54 4f 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e  STORE==2 && db->
7280: 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20  temp_store==1). 
7290: 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
72a0: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
72b0: 6f 72 61 67 65 28 70 50 61 72 73 65 29 3b 0a 20  orage(pParse);. 
72c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
72d0: 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65  ite3_free(sqlite
72e0: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
72f0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  );.      if( zRi
7300: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
7310: 20 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64    sqlite3_temp_d
7320: 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74  irectory = sqlit
7330: 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
7340: 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20   zRight);.      
7350: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
7360: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
7370: 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20  ctory = 0;.     
7380: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
7390: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a  ITE_OMIT_WSD */.
73a0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
73b0: 0a 20 20 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45  .  }..#if SQLITE
73c0: 5f 4f 53 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a  _OS_WIN.  /*.  *
73d0: 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f  *   PRAGMA data_
73e0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 0a  store_directory.
73f0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61    **   PRAGMA da
7400: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
7410: 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63 74 6f  ry = ""|"directo
7420: 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20  ry_name".  **.  
7430: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
7440: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
7450: 20 6f 66 20 74 68 65 20 64 61 74 61 5f 73 74 6f   of the data_sto
7460: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66 6c 61  re_directory fla
7470: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
7480: 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73  * the value sets
7490: 20 61 20 73 70 65 63 69 66 69 63 20 64 69 72 65   a specific dire
74a0: 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65 64  ctory to be used
74b0: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69   for database fi
74c0: 6c 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 77 65  les that.  ** we
74d0: 72 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74  re specified wit
74e0: 68 20 61 20 72 65 6c 61 74 69 76 65 20 70 61 74  h a relative pat
74f0: 68 6e 61 6d 65 2e 20 20 53 65 74 74 69 6e 67 20  hname.  Setting 
7500: 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67  to a null string
7510: 20 72 65 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f   reverts.  ** to
7520: 20 74 68 65 20 64 65 66 61 75 6c 74 20 64 61 74   the default dat
7530: 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 2c  abase directory,
7540: 20 77 68 69 63 68 20 66 6f 72 20 64 61 74 61 62   which for datab
7550: 61 73 65 20 66 69 6c 65 73 20 73 70 65 63 69 66  ase files specif
7560: 69 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 20  ied with.  ** a 
7570: 72 65 6c 61 74 69 76 65 20 70 61 74 68 20 77 69  relative path wi
7580: 6c 6c 20 70 72 6f 62 61 62 6c 79 20 62 65 20 62  ll probably be b
7590: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 75 72 72  ased on the curr
75a0: 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 66 6f  ent directory fo
75b0: 72 20 74 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65  r the.  ** proce
75c0: 73 73 2e 20 20 44 61 74 61 62 61 73 65 20 66 69  ss.  Database fi
75d0: 6c 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74  le specified wit
75e0: 68 20 61 6e 20 61 62 73 6f 6c 75 74 65 20 70 61  h an absolute pa
75f0: 74 68 20 61 72 65 20 6e 6f 74 20 69 6d 70 61 63  th are not impac
7600: 74 65 64 0a 20 20 2a 2a 20 62 79 20 74 68 69 73  ted.  ** by this
7610: 20 73 65 74 74 69 6e 67 2c 20 72 65 67 61 72 64   setting, regard
7620: 6c 65 73 73 20 6f 66 20 69 74 73 20 76 61 6c 75  less of its valu
7630: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63  e..  **.  */.  c
7640: 61 73 65 20 50 72 61 67 54 79 70 5f 44 41 54 41  ase PragTyp_DATA
7650: 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59  _STORE_DIRECTORY
7660: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
7670: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
7680: 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c  urnSingleText(v,
7690: 20 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72   "data_store_dir
76a0: 65 63 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33  ectory", sqlite3
76b0: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29  _data_directory)
76c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66  ;.    }else{.#if
76d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
76e0: 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a  _WSD.      if( z
76f0: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
7700: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
7710: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
7720: 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56  3OsAccess(db->pV
7730: 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49  fs, zRight, SQLI
7740: 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52  TE_ACCESS_READWR
7750: 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  ITE, &res);.    
7760: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
7770: 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20  TE_OK || res==0 
7780: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
7790: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
77a0: 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74  rse, "not a writ
77b0: 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29  able directory")
77c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
77d0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
77e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
77f0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
7800: 65 28 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  e(sqlite3_data_d
7810: 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20  irectory);.     
7820: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
7830: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
7840: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
7850: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
7860: 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29  tf("%s", zRight)
7870: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
7880: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64         sqlite3_d
7890: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ata_directory = 
78a0: 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  0;.      }.#endi
78b0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
78c0: 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  _WSD */.    }.  
78d0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
78e0: 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
78f0: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
7900: 54 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  TYLE.  /*.  **  
7910: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
7920: 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65  ]lock_proxy_file
7930: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
7940: 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f  schema.]lock_pro
7950: 78 79 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f  xy_file = ":auto
7960: 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61  :"|"lock_file_pa
7970: 74 68 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  th".  **.  ** Re
7980: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
7990: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63  value of the loc
79a0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61  k_proxy_file fla
79b0: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
79c0: 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73  * the value sets
79d0: 20 61 20 73 70 65 63 69 66 69 63 20 66 69 6c 65   a specific file
79e0: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
79f0: 64 61 74 61 62 61 73 65 20 61 63 63 65 73 73 20  database access 
7a00: 6c 6f 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f  locks..  **.  */
7a10: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
7a20: 4c 4f 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a  LOCK_PROXY_FILE:
7a30: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
7a40: 68 74 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65  ht ){.      Page
7a50: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
7a60: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
7a70: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63  b->pBt);.      c
7a80: 68 61 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f  har *proxy_file_
7a90: 70 61 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20  path = NULL;.   
7aa0: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20     sqlite3_file 
7ab0: 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33  *pFile = sqlite3
7ac0: 50 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72  PagerFile(pPager
7ad0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
7ae0: 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e  OsFileControlHin
7af0: 74 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f  t(pFile, SQLITE_
7b00: 47 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c  GET_LOCKPROXYFIL
7b10: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
7b30: 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29  proxy_file_path)
7b40: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  ;.      returnSi
7b50: 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f 63  ngleText(v, "loc
7b60: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 70  k_proxy_file", p
7b70: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b  roxy_file_path);
7b80: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7b90: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20    Pager *pPager 
7ba0: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
7bb0: 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ger(pDb->pBt);. 
7bc0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c       sqlite3_fil
7bd0: 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74  e *pFile = sqlit
7be0: 65 33 50 61 67 65 72 46 69 6c 65 28 70 50 61 67  e3PagerFile(pPag
7bf0: 65 72 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 72  er);.      int r
7c00: 65 73 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52  es;.      if( zR
7c10: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7c20: 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73     res=sqlite3Os
7c30: 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c  FileControl(pFil
7c40: 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f  e, SQLITE_SET_LO
7c50: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c80: 20 20 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20     zRight);.    
7c90: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
7ca0: 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73     res=sqlite3Os
7cb0: 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c  FileControl(pFil
7cc0: 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f  e, SQLITE_SET_LO
7cd0: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d00: 20 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20     NULL);.      
7d10: 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 21  }.      if( res!
7d20: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
7d30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
7d40: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 66  orMsg(pParse, "f
7d50: 61 69 6c 65 64 20 74 6f 20 73 65 74 20 6c 6f 63  ailed to set loc
7d60: 6b 20 70 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a  k proxy file");.
7d70: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
7d80: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  gma_out;.      }
7d90: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
7da0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
7db0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
7dc0: 43 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20  CKING_STYLE */  
7dd0: 20 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20      .    .  /*. 
7de0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
7df0: 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75  hema.]synchronou
7e00: 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  s.  **   PRAGMA 
7e10: 5b 73 63 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f  [schema.]synchro
7e20: 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d  nous=OFF|ON|NORM
7e30: 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a  AL|FULL.  **.  *
7e40: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
7e50: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
7e60: 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f  of the synchrono
7e70: 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  us flag.  Changi
7e80: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61  ng.  ** the loca
7e90: 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  l value does not
7ea0: 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f   make changes to
7eb0: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61   the disk file a
7ec0: 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61  nd the.  ** defa
7ed0: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  ult value will b
7ee0: 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e  e restored the n
7ef0: 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  ext time the dat
7f00: 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70  abase is.  ** op
7f10: 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  ened..  */.  cas
7f20: 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52  e PragTyp_SYNCHR
7f30: 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28  ONOUS: {.    if(
7f40: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
7f50: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
7f60: 74 28 76 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  t(v, "synchronou
7f70: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
7f80: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
7f90: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
7fa0: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
7fb0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
7fc0: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
7fd0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
7fe0: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
7ff0: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
8000: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
8010: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
8020: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  lse{.        int
8030: 20 69 4c 65 76 65 6c 20 3d 20 28 67 65 74 53 61   iLevel = (getSa
8040: 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74  fetyLevel(zRight
8050: 2c 30 2c 31 29 2b 31 29 20 26 20 50 41 47 45 52  ,0,1)+1) & PAGER
8060: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53  _SYNCHRONOUS_MAS
8070: 4b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  K;.        if( i
8080: 4c 65 76 65 6c 3d 3d 30 20 29 20 69 4c 65 76 65  Level==0 ) iLeve
8090: 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70  l = 1;.        p
80a0: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
80b0: 20 3d 20 69 4c 65 76 65 6c 3b 0a 20 20 20 20 20   = iLevel;.     
80c0: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
80d0: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ags(db);.      }
80e0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
80f0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
8100: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
8110: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
8120: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8130: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20  T_FLAG_PRAGMAS. 
8140: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c   case PragTyp_FL
8150: 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  AG: {.    if( zR
8160: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
8170: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
8180: 28 76 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61  (v, pPragma->zNa
8190: 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  me, (db->flags &
81a0: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 29 21   pPragma->iArg)!
81b0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
81c0: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20  .      int mask 
81d0: 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b  = pPragma->iArg;
81e0: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62      /* Mask of b
81f0: 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c  its to set or cl
8200: 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  ear. */.      if
8210: 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
8220: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
8230: 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75  * Foreign key su
8240: 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65  pport may not be
8250: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
8260: 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20  bled while not. 
8270: 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74         ** in aut
8280: 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20  o-commit mode.  
8290: 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20  */.        mask 
82a0: 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65  &= ~(SQLITE_Fore
82b0: 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20  ignKeys);.      
82c0: 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45  }.#if SQLITE_USE
82d0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
82e0: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
82f0: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55  uth.authLevel==U
8300: 41 55 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20  AUTH_User ){.   
8310: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61       /* Do not a
8320: 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75  llow non-admin u
8330: 73 65 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74  sers to modify t
8340: 68 65 20 73 63 68 65 6d 61 20 61 72 62 69 74 72  he schema arbitr
8350: 61 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20  arily */.       
8360: 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54   mask &= ~(SQLIT
8370: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a  E_WriteSchema);.
8380: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a        }.#endif..
8390: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
83a0: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
83b0: 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20  ht, 0) ){.      
83c0: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d    db->flags |= m
83d0: 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ask;.      }else
83e0: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c  {.        db->fl
83f0: 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20  ags &= ~mask;.  
8400: 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d        if( mask==
8410: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
8420: 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  ) db->nDeferredI
8430: 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20  mmCons = 0;.    
8440: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61    }..      /* Ma
8450: 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70  ny of the flag-p
8460: 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68  ragmas modify th
8470: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64  e code generated
8480: 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20   by the SQL .   
8490: 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28     ** compiler (
84a0: 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  eg. count_change
84b0: 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70  s). So add an op
84c0: 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20 61  code to expire a
84d0: 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70  ll.      ** comp
84e0: 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  iled SQL stateme
84f0: 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79  nts after modify
8500: 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c  ing a pragma val
8510: 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ue..      */.   
8520: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8530: 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70 69 72  dOp2(v, OP_Expir
8540: 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  e, 0, 0);.      
8550: 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73  setAllPagerFlags
8560: 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  (db);.    }.    
8570: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
8580: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
8590: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f  _FLAG_PRAGMAS */
85a0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
85b0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
85c0: 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  GMAS.  /*.  **  
85d0: 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e   PRAGMA table_in
85e0: 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a  fo(<table>).  **
85f0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73  .  ** Return a s
8600: 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61  ingle row for ea
8610: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
8620: 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68   named table. Th
8630: 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a  e columns of.  *
8640: 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 64  * the returned d
8650: 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a  ata set are:.  *
8660: 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20  *.  ** cid:     
8670: 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75     Column id (nu
8680: 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74  mbered from left
8690: 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74   to right, start
86a0: 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e  ing at 0).  ** n
86b0: 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d  ame:       Colum
86c0: 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65  n name.  ** type
86d0: 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64  :       Column d
86e0: 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e  eclaration type.
86f0: 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20  .  ** notnull:  
8700: 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e    True if 'NOT N
8710: 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20  ULL' is part of 
8720: 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  column declarati
8730: 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c  on.  ** dflt_val
8740: 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20  ue: The default 
8750: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f  value for the co
8760: 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20  lumn, if any..  
8770: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
8780: 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69 66  p_TABLE_INFO: if
8790: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
87a0: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
87b0: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46   pTab = sqlite3F
87c0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69  indTable(db, zRi
87d0: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
87e0: 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20  f( pTab ){.     
87f0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8800: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a  ar *azCol[] = {.
8810: 20 20 20 20 20 20 20 20 20 22 63 69 64 22 2c 20           "cid", 
8820: 22 6e 61 6d 65 22 2c 20 22 74 79 70 65 22 2c 20  "name", "type", 
8830: 22 6e 6f 74 6e 75 6c 6c 22 2c 20 22 64 66 6c 74  "notnull", "dflt
8840: 5f 76 61 6c 75 65 22 2c 20 22 70 6b 22 0a 20 20  _value", "pk".  
8850: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
8860: 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74   i, k;.      int
8870: 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20   nHidden = 0;.  
8880: 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c      Column *pCol
8890: 3b 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70  ;.      Index *p
88a0: 50 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d  Pk = sqlite3Prim
88b0: 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62  aryKeyIndex(pTab
88c0: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
88d0: 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20  >nMem = 6;.     
88e0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
88f0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
8900: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 65 74   iDb);.      set
8910: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
8920: 2c 20 36 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73  , 6, azCol); ass
8930: 65 72 74 28 20 36 3d 3d 41 72 72 61 79 53 69 7a  ert( 6==ArraySiz
8940: 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
8950: 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74    sqlite3ViewGet
8960: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72  ColumnNames(pPar
8970: 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20  se, pTab);.     
8980: 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70   for(i=0, pCol=p
8990: 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61  Tab->aCol; i<pTa
89a0: 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43  b->nCol; i++, pC
89b0: 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  ol++){.        i
89c0: 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  f( IsHiddenColum
89d0: 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20  n(pCol) ){.     
89e0: 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a       nHidden++;.
89f0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
8a00: 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ue;.        }.  
8a10: 20 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d        if( (pCol-
8a20: 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
8a30: 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20  LAG_PRIMKEY)==0 
8a40: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d  ){.          k =
8a50: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   0;.        }els
8a60: 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a  e if( pPk==0 ){.
8a70: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b            k = 1;
8a80: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
8a90: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d            for(k=
8aa0: 31 3b 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c  1; k<=pTab->nCol
8ab0: 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d   && pPk->aiColum
8ac0: 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b  n[k-1]!=i; k++){
8ad0: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
8ae0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8af0: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
8b00: 69 73 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20  issisi",.       
8b10: 20 20 20 20 20 20 20 20 69 2d 6e 48 69 64 64 65          i-nHidde
8b20: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n,.             
8b30: 20 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a 20    pCol->zName,. 
8b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
8b50: 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c  ol->zType ? pCol
8b60: 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 0a 20 20  ->zType : "",.  
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f               pCo
8b80: 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a  l->notNull ? 1 :
8b90: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
8ba0: 20 20 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 0a     pCol->zDflt,.
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
8bc0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8bd0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8be0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
8bf0: 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   6);.      }.   
8c00: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
8c10: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
8c20: 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 73 74 61  STATS: {.    sta
8c30: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
8c40: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62  azCol[] = { "tab
8c50: 6c 65 22 2c 20 22 69 6e 64 65 78 22 2c 20 22 77  le", "index", "w
8c60: 69 64 74 68 22 2c 20 22 68 65 69 67 68 74 22 20  idth", "height" 
8c70: 7d 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  };.    Index *pI
8c80: 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d  dx;.    HashElem
8c90: 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c   *i;.    v = sql
8ca0: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
8cb0: 73 65 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  se);.    pParse-
8cc0: 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73  >nMem = 4;.    s
8cd0: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
8ce0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
8cf0: 44 62 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43  Db);.    setAllC
8d00: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c  olumnNames(v, 4,
8d10: 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74   azCol);  assert
8d20: 28 20 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61  ( 4==ArraySize(a
8d30: 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72  zCol) );.    for
8d40: 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (i=sqliteHashFir
8d50: 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65 6d 61  st(&pDb->pSchema
8d60: 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b 20 69  ->tblHash); i; i
8d70: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
8d80: 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62 6c 65  i)){.      Table
8d90: 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
8da0: 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20  ashData(i);.    
8db0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
8dc0: 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 73  tiLoad(v, 1, "ss
8dd0: 69 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ii",.           
8de0: 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
8df0: 20 20 20 20 20 20 20 20 30 2c 0a 20 20 20 20 20          0,.     
8e00: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
8e10: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54  e3LogEstToInt(pT
8e20: 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 0a 20  ab->szTabRow),. 
8e30: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
8e40: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
8e50: 74 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45  t(pTab->nRowLogE
8e60: 73 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  st));.      sqli
8e70: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8e80: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
8e90: 2c 20 34 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  , 4);.      for(
8ea0: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
8eb0: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
8ec0: 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  dx->pNext){.    
8ed0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8ee0: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 32 2c 20 22  ultiLoad(v, 2, "
8ef0: 73 69 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20  sii",.          
8f00: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pIdx->zName,.  
8f10: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71           (int)sq
8f20: 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
8f30: 28 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29  (pIdx->szIdxRow)
8f40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 6e  ,.           (in
8f50: 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  t)sqlite3LogEstT
8f60: 6f 49 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f 77  oInt(pIdx->aiRow
8f70: 4c 6f 67 45 73 74 5b 30 5d 29 29 3b 0a 20 20 20  LogEst[0]));.   
8f80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8f90: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
8fa0: 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20  ultRow, 1, 4);. 
8fb0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
8fc0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
8fd0: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
8fe0: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
8ff0: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
9000: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
9010: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
9020: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
9030: 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  x(db, zRight, zD
9040: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  b);.    if( pIdx
9050: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
9060: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
9070: 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ol[] = {.       
9080: 20 20 22 73 65 71 6e 6f 22 2c 20 22 63 69 64 22    "seqno", "cid"
9090: 2c 20 22 6e 61 6d 65 22 2c 20 22 64 65 73 63 22  , "name", "desc"
90a0: 2c 20 22 63 6f 6c 6c 22 2c 20 22 6b 65 79 22 0a  , "coll", "key".
90b0: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69        };.      i
90c0: 6e 74 20 69 3b 0a 20 20 20 20 20 20 69 6e 74 20  nt i;.      int 
90d0: 6d 78 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50  mx;.      if( pP
90e0: 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20  ragma->iArg ){. 
90f0: 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41         /* PRAGMA
9100: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 28 6e 65   index_xinfo (ne
9110: 77 65 72 20 76 65 72 73 69 6f 6e 20 77 69 74 68  wer version with
9120: 20 6d 6f 72 65 20 72 6f 77 73 20 61 6e 64 20 63   more rows and c
9130: 6f 6c 75 6d 6e 73 29 20 2a 2f 0a 20 20 20 20 20  olumns) */.     
9140: 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 43     mx = pIdx->nC
9150: 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20 70  olumn;.        p
9160: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b  Parse->nMem = 6;
9170: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
9180: 20 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20        /* PRAGMA 
9190: 69 6e 64 65 78 5f 69 6e 66 6f 20 28 6c 65 67 61  index_info (lega
91a0: 63 79 20 76 65 72 73 69 6f 6e 29 20 2a 2f 0a 20  cy version) */. 
91b0: 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78         mx = pIdx
91c0: 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20  ->nKeyCol;.     
91d0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
91e0: 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 3;.      }.   
91f0: 20 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e     pTab = pIdx->
9200: 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71  pTable;.      sq
9210: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
9220: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
9230: 62 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  b);.      assert
9240: 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3c 3d  ( pParse->nMem<=
9250: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
9260: 20 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c   );.      setAll
9270: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 70  ColumnNames(v, p
9280: 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 61 7a 43  Parse->nMem, azC
9290: 6f 6c 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  ol);.      for(i
92a0: 3d 30 3b 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a  =0; i<mx; i++){.
92b0: 20 20 20 20 20 20 20 20 69 31 36 20 63 6e 75 6d          i16 cnum
92c0: 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d   = pIdx->aiColum
92d0: 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71  n[i];.        sq
92e0: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
92f0: 61 64 28 76 2c 20 31 2c 20 22 69 69 73 22 2c 20  ad(v, 1, "iis", 
9300: 69 2c 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20  i, cnum,.       
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9320: 20 20 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30        cnum<0 ? 0
9330: 20 3a 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e   : pTab->aCol[cn
9340: 75 6d 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  um].zName);.    
9350: 20 20 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d      if( pPragma-
9360: 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20  >iArg ){.       
9370: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
9380: 6c 74 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69  ltiLoad(v, 4, "i
9390: 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  si",.           
93a0: 20 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65   pIdx->aSortOrde
93b0: 72 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  r[i],.          
93c0: 20 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69    pIdx->azColl[i
93d0: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ],.            i
93e0: 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b  <pIdx->nKeyCol);
93f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
9400: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9410: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9420: 74 52 6f 77 2c 20 31 2c 20 70 50 61 72 73 65 2d  tRow, 1, pParse-
9430: 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a  >nMem);.      }.
9440: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9450: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
9460: 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69  yp_INDEX_LIST: i
9470: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
9480: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
9490: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
94a0: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54     int i;.    pT
94b0: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
94c0: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
94d0: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
94e0: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74  pTab ){.      st
94f0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
9500: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20  *azCol[] = {.   
9510: 20 20 20 20 20 22 73 65 71 22 2c 20 22 6e 61 6d       "seq", "nam
9520: 65 22 2c 20 22 75 6e 69 71 75 65 22 2c 20 22 6f  e", "unique", "o
9530: 72 69 67 69 6e 22 2c 20 22 70 61 72 74 69 61 6c  rigin", "partial
9540: 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  ".      };.     
9550: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
9560: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
9570: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
9580: 3d 20 35 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 5;.      sqlit
9590: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
95a0: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
95b0: 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  .      setAllCol
95c0: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 35 2c 20 61  umnNames(v, 5, a
95d0: 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20  zCol);  assert( 
95e0: 35 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  5==ArraySize(azC
95f0: 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 66 6f 72  ol) );.      for
9600: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
9610: 65 78 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70  ex, i=0; pIdx; p
9620: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
9630: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63   i++){.        c
9640: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4f 72 69  onst char *azOri
9650: 67 69 6e 5b 5d 20 3d 20 7b 20 22 63 22 2c 20 22  gin[] = { "c", "
9660: 75 22 2c 20 22 70 6b 22 20 7d 3b 0a 20 20 20 20  u", "pk" };.    
9670: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9680: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
9690: 69 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20  isisi",.        
96a0: 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20     i,.          
96b0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pIdx->zName,.  
96c0: 20 20 20 20 20 20 20 20 20 49 73 55 6e 69 71 75           IsUniqu
96d0: 65 49 6e 64 65 78 28 70 49 64 78 29 2c 0a 20 20  eIndex(pIdx),.  
96e0: 20 20 20 20 20 20 20 20 20 61 7a 4f 72 69 67 69           azOrigi
96f0: 6e 5b 70 49 64 78 2d 3e 69 64 78 54 79 70 65 5d  n[pIdx->idxType]
9700: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 49 64  ,.           pId
9710: 78 2d 3e 70 50 61 72 74 49 64 78 57 68 65 72 65  x->pPartIdxWhere
9720: 21 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  !=0);.        sq
9730: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9740: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9750: 20 31 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 5);.      }.
9760: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9770: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
9780: 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54  yp_DATABASE_LIST
9790: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
97a0: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
97b0: 5b 5d 20 3d 20 7b 20 22 73 65 71 22 2c 20 22 6e  [] = { "seq", "n
97c0: 61 6d 65 22 2c 20 22 66 69 6c 65 22 20 7d 3b 0a  ame", "file" };.
97d0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70      int i;.    p
97e0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
97f0: 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  .    setAllColum
9800: 6e 4e 61 6d 65 73 28 76 2c 20 33 2c 20 61 7a 43  nNames(v, 3, azC
9810: 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 33 3d 3d  ol); assert( 3==
9820: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
9830: 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   );.    for(i=0;
9840: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
9850: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
9860: 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20  aDb[i].pBt==0 ) 
9870: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
9880: 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
9890: 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20  i].zName!=0 );. 
98a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
98b0: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
98c0: 22 69 73 73 22 2c 0a 20 20 20 20 20 20 20 20 20  "iss",.         
98d0: 69 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d 3e  i,.         db->
98e0: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 0a 20 20  aDb[i].zName,.  
98f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
9900: 72 65 65 47 65 74 46 69 6c 65 6e 61 6d 65 28 64  reeGetFilename(d
9910: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 29 3b  b->aDb[i].pBt));
9920: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9930: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
9940: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
9950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
9960: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
9970: 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49  Typ_COLLATION_LI
9980: 53 54 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  ST: {.    static
9990: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
99a0: 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65 71 22 2c 20  ol[] = { "seq", 
99b0: 22 6e 61 6d 65 22 20 7d 3b 0a 20 20 20 20 69 6e  "name" };.    in
99c0: 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73  t i = 0;.    Has
99d0: 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 70 50  hElem *p;.    pP
99e0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
99f0: 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e      setAllColumn
9a00: 4e 61 6d 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f  Names(v, 2, azCo
9a10: 6c 29 3b 20 61 73 73 65 72 74 28 20 32 3d 3d 41  l); assert( 2==A
9a20: 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20  rraySize(azCol) 
9a30: 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71 6c  );.    for(p=sql
9a40: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
9a50: 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b 20  ->aCollSeq); p; 
9a60: 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  p=sqliteHashNext
9a70: 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c  (p)){.      Coll
9a80: 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f  Seq *pColl = (Co
9a90: 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61  llSeq *)sqliteHa
9aa0: 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20 20  shData(p);.     
9ab0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9ac0: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 22  iLoad(v, 1, "is"
9ad0: 2c 20 69 2b 2b 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e  , i++, pColl->zN
9ae0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ame);.      sqli
9af0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9b00: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9b10: 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , 2);.    }.  }.
9b20: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
9b30: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  /* SQLITE_OMIT_S
9b40: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f  CHEMA_PRAGMAS */
9b50: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
9b60: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
9b70: 59 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  Y.  case PragTyp
9b80: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53  _FOREIGN_KEY_LIS
9b90: 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  T: if( zRight ){
9ba0: 0a 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a  .    FKey *pFK;.
9bb0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
9bc0: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
9bd0: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
9be0: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
9bf0: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
9c00: 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
9c10: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
9c20: 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61  .      pFK = pTa
9c30: 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20  b->pFKey;.      
9c40: 69 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20  if( pFK ){.     
9c50: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
9c60: 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20  char *azCol[] = 
9c70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 22 69 64  {.           "id
9c80: 22 2c 20 22 73 65 71 22 2c 20 22 74 61 62 6c 65  ", "seq", "table
9c90: 22 2c 20 22 66 72 6f 6d 22 2c 20 22 74 6f 22 2c  ", "from", "to",
9ca0: 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c 20 22 6f   "on_update", "o
9cb0: 6e 5f 64 65 6c 65 74 65 22 2c 0a 20 20 20 20 20  n_delete",.     
9cc0: 20 20 20 20 20 20 22 6d 61 74 63 68 22 0a 20 20        "match".  
9cd0: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20        };.       
9ce0: 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20   int i = 0; .   
9cf0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
9d00: 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73  m = 8;.        s
9d10: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
9d20: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
9d30: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 65 74  Db);.        set
9d40: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
9d50: 2c 20 38 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73  , 8, azCol); ass
9d60: 65 72 74 28 20 38 3d 3d 41 72 72 61 79 53 69 7a  ert( 8==ArraySiz
9d70: 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
9d80: 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a      while(pFK){.
9d90: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b            int j;
9da0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a  .          for(j
9db0: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
9dc0: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
9dd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
9de0: 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69  ltiLoad(v, 1, "i
9df0: 69 73 73 73 73 73 73 22 2c 0a 20 20 20 20 20 20  issssss",.      
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 2c 0a               i,.
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e20: 20 20 20 6a 2c 0a 20 20 20 20 20 20 20 20 20 20     j,.          
9e30: 20 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54           pFK->zT
9e40: 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o,.             
9e50: 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c        pTab->aCol
9e60: 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46  [pFK->aCol[j].iF
9e70: 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20  rom].zName,.    
9e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
9e90: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c  FK->aCol[j].zCol
9ea0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
9eb0: 20 20 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65 28       actionName(
9ec0: 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29  pFK->aAction[1])
9ed0: 2c 20 20 2f 2a 20 4f 4e 20 55 50 44 41 54 45 20  ,  /* ON UPDATE 
9ee0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
9ef0: 20 20 20 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65        actionName
9f00: 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d  (pFK->aAction[0]
9f10: 29 2c 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45  ),  /* ON DELETE
9f20: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
9f30: 20 20 20 20 20 20 20 22 4e 4f 4e 45 22 29 3b 0a         "NONE");.
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
9f50: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9f60: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9f70: 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 8);.          
9f80: 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b  }.          ++i;
9f90: 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d  .          pFK =
9fa0: 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b   pFK->pNextFrom;
9fb0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
9fc0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
9fd0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
9fe0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
9ff0: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
a000: 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  ) */..#ifndef SQ
a010: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
a020: 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51  N_KEY.#ifndef SQ
a030: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
a040: 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  R.  case PragTyp
a050: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45  _FOREIGN_KEY_CHE
a060: 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a  CK: {.    FKey *
a070: 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20  pFK;            
a080: 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65   /* A foreign ke
a090: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  y constraint */.
a0a0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
a0b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68             /* Ch
a0c0: 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ild table contai
a0d0: 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b  n "REFERENCES" k
a0e0: 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61  eyword */.    Ta
a0f0: 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20  ble *pParent;   
a100: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74       /* Parent t
a110: 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20  able that child 
a120: 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20  points to */.   
a130: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20   Index *pIdx;   
a140: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
a150: 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74   in the parent t
a160: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
a170: 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
a180: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
a190: 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79  er:  Foreign key
a1a0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62   number for pTab
a1b0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20   */.    int j;  
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a1d0: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
a1e0: 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f   Field of the fo
a1f0: 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20  reign key */.   
a200: 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20   HashElem *k;   
a210: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
a220: 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74  counter:  Next t
a230: 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a  able in schema *
a240: 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20  /.    int x;    
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a260: 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20  result variable 
a270: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
a280: 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  sult;         /*
a290: 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f 20   3 registers to 
a2a0: 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f  hold a result ro
a2b0: 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  w */.    int reg
a2c0: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  Key;            
a2d0: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 68  /* Register to h
a2e0: 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63  old key for chec
a2f0: 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20  king the FK */. 
a300: 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20     int regRow;  
a310: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
a320: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
a330: 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a   row from pTab *
a340: 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f  /.    int addrTo
a350: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
a360: 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68  Top of a loop ch
a370: 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b  ecking foreign k
a380: 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  eys */.    int a
a390: 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20  ddrOk;          
a3a0: 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69    /* Jump here i
a3b0: 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20  f the key is OK 
a3c0: 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
a3d0: 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ls;           /*
a3e0: 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74   child to parent
a3f0: 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20   column mapping 
a400: 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  */.    static co
a410: 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b  nst char *azCol[
a420: 5d 20 3d 20 7b 20 22 74 61 62 6c 65 22 2c 20 22  ] = { "table", "
a430: 72 6f 77 69 64 22 2c 20 22 70 61 72 65 6e 74 22  rowid", "parent"
a440: 2c 20 22 66 6b 69 64 22 20 7d 3b 0a 0a 20 20 20  , "fkid" };..   
a450: 20 72 65 67 52 65 73 75 6c 74 20 3d 20 70 50 61   regResult = pPa
a460: 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20  rse->nMem+1;.   
a470: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d   pParse->nMem +=
a480: 20 34 3b 0a 20 20 20 20 72 65 67 4b 65 79 20 3d   4;.    regKey =
a490: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
a4a0: 0a 20 20 20 20 72 65 67 52 6f 77 20 3d 20 2b 2b  .    regRow = ++
a4b0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20  pParse->nMem;.  
a4c0: 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74    v = sqlite3Get
a4d0: 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20  Vdbe(pParse);.  
a4e0: 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
a4f0: 6d 65 73 28 76 2c 20 34 2c 20 61 7a 43 6f 6c 29  mes(v, 4, azCol)
a500: 3b 20 61 73 73 65 72 74 28 20 34 3d 3d 41 72 72  ; assert( 4==Arr
a510: 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
a520: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65  .    sqlite3Code
a530: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
a540: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b  rse, iDb);.    k
a550: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69 72   = sqliteHashFir
a560: 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d  st(&db->aDb[iDb]
a570: 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73  .pSchema->tblHas
a580: 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 6b  h);.    while( k
a590: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52   ){.      if( zR
a5a0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20 20  ight ){.        
a5b0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f  pTab = sqlite3Lo
a5c0: 63 61 74 65 54 61 62 6c 65 28 70 50 61 72 73 65  cateTable(pParse
a5d0: 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  , 0, zRight, zDb
a5e0: 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30  );.        k = 0
a5f0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
a600: 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 28 54         pTab = (T
a610: 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68  able*)sqliteHash
a620: 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20 20  Data(k);.       
a630: 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 4e   k = sqliteHashN
a640: 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  ext(k);.      }.
a650: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d        if( pTab==
a660: 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79  0 || pTab->pFKey
a670: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
a680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62        sqlite3Tab
a690: 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69  leLock(pParse, i
a6a0: 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20  Db, pTab->tnum, 
a6b0: 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b  0, pTab->zName);
a6c0: 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d  .      if( pTab-
a6d0: 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61  >nCol+regRow>pPa
a6e0: 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72  rse->nMem ) pPar
a6f0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d  se->nMem = pTab-
a700: 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a  >nCol + regRow;.
a710: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
a720: 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30  nTable(pParse, 0
a730: 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f  , iDb, pTab, OP_
a740: 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20  OpenRead);.     
a750: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
a760: 53 74 72 69 6e 67 28 76 2c 20 72 65 67 52 65 73  String(v, regRes
a770: 75 6c 74 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  ult, pTab->zName
a780: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  );.      for(i=1
a790: 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65  , pFK=pTab->pFKe
a7a0: 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b  y; pFK; i++, pFK
a7b0: 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29  =pFK->pNextFrom)
a7c0: 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e  {.        pParen
a7d0: 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  t = sqlite3FindT
a7e0: 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54  able(db, pFK->zT
a7f0: 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20  o, zDb);.       
a800: 20 69 66 28 20 70 50 61 72 65 6e 74 3d 3d 30 20   if( pParent==0 
a810: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
a820: 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20      pIdx = 0;.  
a830: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62        sqlite3Tab
a840: 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69  leLock(pParse, i
a850: 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e 75  Db, pParent->tnu
a860: 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e 7a  m, 0, pParent->z
a870: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 78  Name);.        x
a880: 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61   = sqlite3FkLoca
a890: 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20  teIndex(pParse, 
a8a0: 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70  pParent, pFK, &p
a8b0: 49 64 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Idx, 0);.       
a8c0: 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20 20   if( x==0 ){.   
a8d0: 20 20 20 20 20 20 20 69 66 28 20 70 49 64 78 3d         if( pIdx=
a8e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
a8f0: 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62    sqlite3OpenTab
a900: 6c 65 28 70 50 61 72 73 65 2c 20 69 2c 20 69 44  le(pParse, i, iD
a910: 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f 4f  b, pParent, OP_O
a920: 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20  penRead);.      
a930: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
a940: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a950: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4f  beAddOp3(v, OP_O
a960: 70 65 6e 52 65 61 64 2c 20 69 2c 20 70 49 64 78  penRead, i, pIdx
a970: 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a 20 20  ->tnum, iDb);.  
a980: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a990: 33 56 64 62 65 53 65 74 50 34 4b 65 79 49 6e 66  3VdbeSetP4KeyInf
a9a0: 6f 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b  o(pParse, pIdx);
a9b0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
a9c0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
a9d0: 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20        k = 0;.   
a9e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a9f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
aa00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 50        assert( pP
aa10: 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20  arse->nErr>0 || 
aa20: 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  pFK==0 );.      
aa30: 69 66 28 20 70 46 4b 20 29 20 62 72 65 61 6b 3b  if( pFK ) break;
aa40: 0a 20 20 20 20 20 20 69 66 28 20 70 50 61 72 73  .      if( pPars
aa50: 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50 61 72  e->nTab<i ) pPar
aa60: 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20  se->nTab = i;.  
aa70: 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20 73 71      addrTop = sq
aa80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
aa90: 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29  v, OP_Rewind, 0)
aaa0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
aab0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  );.      for(i=1
aac0: 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65  , pFK=pTab->pFKe
aad0: 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b  y; pFK; i++, pFK
aae0: 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29  =pFK->pNextFrom)
aaf0: 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e  {.        pParen
ab00: 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  t = sqlite3FindT
ab10: 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54  able(db, pFK->zT
ab20: 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20  o, zDb);.       
ab30: 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20   pIdx = 0;.     
ab40: 20 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a 20     aiCols = 0;. 
ab50: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
ab60: 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  nt ){.          
ab70: 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  x = sqlite3FkLoc
ab80: 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c  ateIndex(pParse,
ab90: 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26   pParent, pFK, &
aba0: 70 49 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a  pIdx, &aiCols);.
abb0: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
abc0: 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ( x==0 );.      
abd0: 20 20 7d 0a 20 20 20 20 20 20 20 20 61 64 64 72    }.        addr
abe0: 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  Ok = sqlite3Vdbe
abf0: 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20  MakeLabel(v);.  
ac00: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
ac10: 74 20 26 26 20 70 49 64 78 3d 3d 30 20 29 7b 0a  t && pIdx==0 ){.
ac20: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 4b            int iK
ac30: 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30  ey = pFK->aCol[0
ac40: 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20  ].iFrom;.       
ac50: 20 20 20 61 73 73 65 72 74 28 20 69 4b 65 79 3e     assert( iKey>
ac60: 3d 30 20 26 26 20 69 4b 65 79 3c 70 54 61 62 2d  =0 && iKey<pTab-
ac70: 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20  >nCol );.       
ac80: 20 20 20 69 66 28 20 69 4b 65 79 21 3d 70 54 61     if( iKey!=pTa
ac90: 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20 20  b->iPKey ){.    
aca0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
acb0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
acc0: 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c  Column, 0, iKey,
acd0: 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20   regRow);.      
ace0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c        sqlite3Col
acf0: 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20 70 54  umnDefault(v, pT
ad00: 61 62 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77  ab, iKey, regRow
ad10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
ad20: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ad30: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72  (v, OP_IsNull, r
ad40: 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b 20  egRow, addrOk); 
ad50: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
ad60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
ad70: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ad80: 2c 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c 20  , OP_MustBeInt, 
ad90: 72 65 67 52 6f 77 2c 20 0a 20 20 20 20 20 20 20  regRow, .       
ada0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
adb0: 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76  dbeCurrentAddr(v
adc0: 29 2b 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61  )+3); VdbeCovera
add0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
ade0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
adf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ae00: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69  ddOp2(v, OP_Rowi
ae10: 64 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20  d, 0, regRow);. 
ae20: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
ae30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ae40: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f 74  AddOp3(v, OP_Not
ae50: 45 78 69 73 74 73 2c 20 69 2c 20 30 2c 20 72 65  Exists, i, 0, re
ae60: 67 52 6f 77 29 3b 20 56 64 62 65 43 6f 76 65 72  gRow); VdbeCover
ae70: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
ae80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74    sqlite3VdbeGot
ae90: 6f 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20  o(v, addrOk);.  
aea0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
aeb0: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73  dbeJumpHere(v, s
aec0: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
aed0: 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20  tAddr(v)-2);.   
aee0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
aef0: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a        for(j=0; j
af00: 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29  <pFK->nCol; j++)
af10: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
af20: 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
af30: 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c  ColumnOfTable(v,
af40: 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20   pTab, 0,.      
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af60: 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61        aiCols ? a
af70: 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e  iCols[j] : pFK->
af80: 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72  aCol[j].iFrom, r
af90: 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20  egRow+j);.      
afa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
afb0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73  eAddOp2(v, OP_Is
afc0: 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20  Null, regRow+j, 
afd0: 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76  addrOk); VdbeCov
afe0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
aff0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
b000: 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20  if( pParent ){. 
b010: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b020: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
b030: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72  OP_MakeRecord, r
b040: 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c  egRow, pFK->nCol
b050: 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20 20 20  , regKey,.      
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 49          sqlite3I
b080: 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
b090: 64 62 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e  db,pIdx), pFK->n
b0a0: 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Col);.          
b0b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b0c0: 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75  Op4Int(v, OP_Fou
b0d0: 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72  nd, i, addrOk, r
b0e0: 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20  egKey, 0);.     
b0f0: 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
b100: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
b110: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
b120: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b130: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f  eAddOp2(v, OP_Ro
b140: 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c  wid, 0, regResul
b150: 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  t+1);.        sq
b160: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
b170: 61 64 28 76 2c 20 72 65 67 52 65 73 75 6c 74 2b  ad(v, regResult+
b180: 32 2c 20 22 73 69 22 2c 20 70 46 4b 2d 3e 7a 54  2, "si", pFK->zT
b190: 6f 2c 20 69 2d 31 29 3b 0a 20 20 20 20 20 20 20  o, i-1);.       
b1a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b1b0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
b1c0: 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34  ow, regResult, 4
b1d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b1e0: 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
b1f0: 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  el(v, addrOk);. 
b200: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
b210: 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29  Free(db, aiCols)
b220: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
b230: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b240: 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c  2(v, OP_Next, 0,
b250: 20 61 64 64 72 54 6f 70 2b 31 29 3b 20 56 64 62   addrTop+1); Vdb
b260: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
b270: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
b280: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54  umpHere(v, addrT
b290: 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  op);.    }.  }. 
b2a0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
b2b0: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
b2c0: 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20  E_OMIT_TRIGGER) 
b2d0: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  */.#endif /* !de
b2e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
b2f0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a  T_FOREIGN_KEY) *
b300: 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  /..#ifndef NDEBU
b310: 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  G.  case PragTyp
b320: 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b  _PARSER_TRACE: {
b330: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
b340: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
b350: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
b360: 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20  Right, 0) ){.   
b370: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73       sqlite3Pars
b380: 65 72 54 72 61 63 65 28 73 74 64 6f 75 74 2c 20  erTrace(stdout, 
b390: 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20  "parser: ");.   
b3a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b3b0: 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54    sqlite3ParserT
b3c0: 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20  race(0, 0);.    
b3d0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
b3e0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
b3f0: 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68   /* Reinstall th
b400: 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20  e LIKE and GLOB 
b410: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
b420: 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a  variant of LIKE.
b430: 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62    ** used will b
b440: 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  e case sensitive
b450: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
b460: 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20  g on the RHS..  
b470: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
b480: 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45  p_CASE_SENSITIVE
b490: 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28  _LIKE: {.    if(
b4a0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
b4b0: 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
b4c0: 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62  LikeFunctions(db
b4d0: 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  , sqlite3GetBool
b4e0: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b  ean(zRight, 0));
b4f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
b500: 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ak;..#ifndef SQL
b510: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
b520: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20  ECK_ERROR_MAX.# 
b530: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
b540: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
b550: 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64  ROR_MAX 100.#end
b560: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
b570: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
b580: 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61  Y_CHECK.  /* Pra
b590: 67 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b  gma "quick_check
b5a0: 22 20 69 73 20 72 65 64 75 63 65 64 20 76 65 72  " is reduced ver
b5b0: 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e  sion of .  ** in
b5c0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65  tegrity_check de
b5d0: 73 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74  signed to detect
b5e0: 20 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20 63   most database c
b5f0: 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77  orruption.  ** w
b600: 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74  ithout most of t
b610: 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61  he overhead of a
b620: 20 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d   full integrity-
b630: 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61  check..  */.  ca
b640: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47  se PragTyp_INTEG
b650: 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20  RITY_CHECK: {.  
b660: 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72    int i, j, addr
b670: 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 69 6e  , mxErr;..    in
b680: 74 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c  t isQuick = (sql
b690: 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66  ite3Tolower(zLef
b6a0: 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20  t[0])=='q');..  
b6b0: 20 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47    /* If the PRAG
b6c0: 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f  MA command was o
b6d0: 66 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47  f the form "PRAG
b6e0: 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74  MA <db>.integrit
b6f0: 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a  y_check",.    **
b700: 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74   then iDb is set
b710: 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66   to the index of
b720: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 64   the database id
b730: 65 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e  entified by <db>
b740: 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73  ..    ** In this
b750: 20 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67   case, the integ
b760: 72 69 74 79 20 6f 66 20 64 61 74 61 62 61 73 65  rity of database
b770: 20 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72   iDb only is ver
b780: 69 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20  ified by.    ** 
b790: 74 68 65 20 56 44 42 45 20 63 72 65 61 74 65 64  the VDBE created
b7a0: 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20   below..    **. 
b7b0: 20 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c     ** Otherwise,
b7c0: 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   if the command 
b7d0: 77 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47  was simply "PRAG
b7e0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
b7f0: 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22  ck" (or.    ** "
b800: 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65  PRAGMA quick_che
b810: 63 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69  ck"), then iDb i
b820: 73 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74  s set to 0. In t
b830: 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 69 44  his case, set iD
b840: 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68  b.    ** to -1 h
b850: 65 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65  ere, to indicate
b860: 20 74 68 61 74 20 74 68 65 20 56 44 42 45 20 73   that the VDBE s
b870: 68 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68 65  hould verify the
b880: 20 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a   integrity.    *
b890: 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  * of all attache
b8a0: 64 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f  d databases.  */
b8b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
b8c0: 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  >=0 );.    asser
b8d0: 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64  t( iDb==0 || pId
b8e0: 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20  2->z );.    if( 
b8f0: 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62  pId2->z==0 ) iDb
b900: 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49   = -1;..    /* I
b910: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44  nitialize the VD
b920: 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  BE program */.  
b930: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
b940: 20 36 3b 0a 20 20 20 20 73 65 74 4f 6e 65 43 6f   6;.    setOneCo
b950: 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 69 6e 74  lumnName(v, "int
b960: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 29 3b 0a  egrity_check");.
b970: 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20  .    /* Set the 
b980: 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f  maximum error co
b990: 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72  unt */.    mxErr
b9a0: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
b9b0: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
b9c0: 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  MAX;.    if( zRi
b9d0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
b9e0: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
b9f0: 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20  ght, &mxErr);.  
ba00: 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30      if( mxErr<=0
ba10: 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72   ){.        mxEr
ba20: 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  r = SQLITE_INTEG
ba30: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
ba40: 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _MAX;.      }.  
ba50: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
ba60: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
ba70: 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20  Integer, mxErr, 
ba80: 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68  1);  /* reg[1] h
ba90: 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74  olds errors left
baa0: 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61   */..    /* Do a
bab0: 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
bac0: 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61  k on each databa
bad0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66  se file */.    f
bae0: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
baf0: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48  b; i++){.      H
bb00: 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20  ashElem *x;.    
bb10: 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20    Hash *pTbls;. 
bb20: 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30       int cnt = 0
bb30: 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49  ;..      if( OMI
bb40: 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31  T_TEMPDB && i==1
bb50: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
bb60: 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26     if( iDb>=0 &&
bb70: 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e   i!=iDb ) contin
bb80: 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74  ue;..      sqlit
bb90: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
bba0: 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20  ma(pParse, i);. 
bbb0: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
bbc0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
bbd0: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f   OP_IfPos, 1); /
bbe0: 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66  * Halt if out of
bbf0: 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20   errors */.     
bc00: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
bc10: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
bc20: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
bc30: 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
bc40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
bc50: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
bc60: 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e  ..      /* Do an
bc70: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
bc80: 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20   of the B-Tree. 
bc90: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
bca0: 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e   Begin by fillin
bcb0: 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33  g registers 2, 3
bcc0: 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72  , ... with the r
bcd0: 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72  oot pages number
bce0: 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61  s.      ** for a
bcf0: 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ll tables and in
bd00: 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74  dices in the dat
bd10: 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a  abase..      */.
bd20: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
bd30: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
bd40: 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29  Held(db, i, 0) )
bd50: 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20  ;.      pTbls = 
bd60: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68  &db->aDb[i].pSch
bd70: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20  ema->tblHash;.  
bd80: 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65      for(x=sqlite
bd90: 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29  HashFirst(pTbls)
bda0: 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ; x; x=sqliteHas
bdb0: 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
bdc0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
bdd0: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
bde0: 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
bdf0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20  x *pIdx;.       
be00: 20 69 66 28 20 48 61 73 52 6f 77 69 64 28 70 54   if( HasRowid(pT
be10: 61 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ab) ){.         
be20: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
be30: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
be40: 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b  , pTab->tnum, 2+
be50: 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  cnt);.          
be60: 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20  VdbeComment((v, 
be70: 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  "%s", pTab->zNam
be80: 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63  e));.          c
be90: 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
bea0: 20 20 20 20 20 20 20 20 66 6f 72 28 70 49 64 78          for(pIdx
beb0: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
bec0: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
bed0: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
bee0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
bef0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
bf00: 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32  r, pIdx->tnum, 2
bf10: 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  +cnt);.         
bf20: 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c   VdbeComment((v,
bf30: 20 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e 61   "%s", pIdx->zNa
bf40: 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  me));.          
bf50: 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  cnt++;.        }
bf60: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
bf70: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66  /* Make sure suf
bf80: 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f  ficient number o
bf90: 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76 65  f registers have
bfa0: 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
bfb0: 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  */.      pParse-
bfc0: 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61  >nMem = MAX( pPa
bfd0: 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38  rse->nMem, cnt+8
bfe0: 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f   );..      /* Do
bff0: 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65   the b-tree inte
c000: 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a  grity checks */.
c010: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c020: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e  eAddOp3(v, OP_In
c030: 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e  tegrityCk, 2, cn
c040: 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  t, 1);.      sql
c050: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35  ite3VdbeChangeP5
c060: 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20 20  (v, (u8)i);.    
c070: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
c080: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
c090: 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62  _IsNull, 2); Vdb
c0a0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
c0b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c0c0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
c0d0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20  ng8, 0, 3, 0,.  
c0e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50         sqlite3MP
c0f0: 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69  rintf(db, "*** i
c100: 6e 20 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a  n database %s **
c110: 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  *\n", db->aDb[i]
c120: 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20  .zName),.       
c130: 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20    P4_DYNAMIC);. 
c140: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c150: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76  AddOp3(v, OP_Mov
c160: 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20  e, 2, 4, 1);.   
c170: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c180: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
c190: 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20  t, 4, 3, 2);.   
c1a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c1b0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
c1c0: 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20  tRow, 2, 1);.   
c1d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
c1e0: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
c1f0: 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  ..      /* Make 
c200: 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64  sure all the ind
c210: 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75  ices are constru
c220: 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  cted correctly..
c230: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66        */.      f
c240: 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46  or(x=sqliteHashF
c250: 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26  irst(pTbls); x &
c260: 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71  & !isQuick; x=sq
c270: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29  liteHashNext(x))
c280: 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20  {.        Table 
c290: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
c2a0: 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20  shData(x);.     
c2b0: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20     Index *pIdx, 
c2c0: 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e  *pPk;.        In
c2d0: 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b  dex *pPrior = 0;
c2e0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f  .        int loo
c2f0: 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e  pTop;.        in
c300: 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64 78  t iDataCur, iIdx
c310: 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  Cur;.        int
c320: 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20   r1 = -1;..     
c330: 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e     if( pTab->pIn
c340: 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  dex==0 ) continu
c350: 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d  e;.        pPk =
c360: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
c370: 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69  ? 0 : sqlite3Pri
c380: 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61  maryKeyIndex(pTa
c390: 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72  b);.        addr
c3a0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
c3b0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
c3c0: 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69  , 1);  /* Stop i
c3d0: 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20  f out of errors 
c3e0: 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 43  */.        VdbeC
c3f0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
c400: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c410: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
c420: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
c430: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
c440: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
c450: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
c460: 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61  prCacheClear(pPa
c470: 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71  rse);.        sq
c480: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
c490: 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c  dIndices(pParse,
c4a0: 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65   pTab, OP_OpenRe
c4b0: 61 64 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20  ad, 0,.         
c4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4d0: 20 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20            1, 0, 
c4e0: 26 69 44 61 74 61 43 75 72 2c 20 26 69 49 64 78  &iDataCur, &iIdx
c4f0: 43 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Cur);.        sq
c500: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c510: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
c520: 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  , 7);.        fo
c530: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
c540: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
c550: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
c560: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
c570: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c580: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c590: 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69  r, 0, 8+j); /* i
c5a0: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75  ndex entries cou
c5b0: 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  nter */.        
c5c0: 7d 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65  }.        pParse
c5d0: 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61  ->nMem = MAX(pPa
c5e0: 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b  rse->nMem, 8+j);
c5f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
c600: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c610: 5f 52 65 77 69 6e 64 2c 20 69 44 61 74 61 43 75  _Rewind, iDataCu
c620: 72 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72  r, 0); VdbeCover
c630: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
c640: 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65  loopTop = sqlite
c650: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c660: 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b  P_AddImm, 7, 1);
c670: 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69  .        /* Veri
c680: 66 79 20 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20  fy that all NOT 
c690: 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61  NULL columns rea
c6a0: 6c 6c 79 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c  lly are NOT NULL
c6b0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28   */.        for(
c6c0: 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f  j=0; j<pTab->nCo
c6d0: 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  l; j++){.       
c6e0: 20 20 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20     char *zErr;. 
c6f0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
c700: 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20  2, jmp3;.       
c710: 20 20 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e     if( j==pTab->
c720: 69 50 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75 65  iPKey ) continue
c730: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
c740: 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f  pTab->aCol[j].no
c750: 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69  tNull==0 ) conti
c760: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 73  nue;.          s
c770: 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
c780: 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76  tColumnOfTable(v
c790: 2c 20 70 54 61 62 2c 20 69 44 61 74 61 43 75 72  , pTab, iDataCur
c7a0: 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , j, 3);.       
c7b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
c7c0: 61 6e 67 65 50 35 28 76 2c 20 4f 50 46 4c 41 47  angeP5(v, OPFLAG
c7d0: 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a 20 20 20  _TYPEOFARG);.   
c7e0: 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71         jmp2 = sq
c7f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
c800: 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33  v, OP_NotNull, 3
c810: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
c820: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
c830: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c840: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
c850: 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65   -1); /* Decreme
c860: 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a  nt error limit *
c870: 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 45 72 72  /.          zErr
c880: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
c890: 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75  f(db, "NULL valu
c8a0: 65 20 69 6e 20 25 73 2e 25 73 22 2c 20 70 54 61  e in %s.%s", pTa
c8b0: 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  b->zName,.      
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8d0: 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43          pTab->aC
c8e0: 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  ol[j].zName);.  
c8f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c900: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c910: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
c920: 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d  , zErr, P4_DYNAM
c930: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  IC);.          s
c940: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c950: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
c960: 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 3, 1);.       
c970: 20 20 20 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65     jmp3 = sqlite
c980: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
c990: 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62  P_IfPos, 1); Vdb
c9a0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
c9b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c9c0: 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f  dbeAddOp0(v, OP_
c9d0: 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20  Halt);.         
c9e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
c9f0: 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20  Here(v, jmp2);. 
ca00: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ca10: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
ca20: 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d  jmp3);.        }
ca30: 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69  .        /* Vali
ca40: 64 61 74 65 20 69 6e 64 65 78 20 65 6e 74 72 69  date index entri
ca50: 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  es for the curre
ca60: 6e 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20  nt row */.      
ca70: 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
ca80: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
ca90: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
caa0: 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
cab0: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20        int jmp2, 
cac0: 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35  jmp3, jmp4, jmp5
cad0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
cae0: 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69 74 65 33  ckUniq = sqlite3
caf0: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
cb00: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
cb10: 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74  pPk==pIdx ) cont
cb20: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
cb30: 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65  r1 = sqlite3Gene
cb40: 72 61 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61  rateIndexKey(pPa
cb50: 72 73 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61  rse, pIdx, iData
cb60: 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33  Cur, 0, 0, &jmp3
cb70: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb90: 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 2c           pPrior,
cba0: 20 72 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20   r1);.          
cbb0: 70 50 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20  pPrior = pIdx;. 
cbc0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
cbd0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
cbe0: 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29  _AddImm, 8+j, 1)
cbf0: 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20  ;  /* increment 
cc00: 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20  entry count */. 
cc10: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69           /* Veri
cc20: 66 79 20 74 68 61 74 20 61 6e 20 69 6e 64 65 78  fy that an index
cc30: 20 65 6e 74 72 79 20 65 78 69 73 74 73 20 66 6f   entry exists fo
cc40: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  r the current ta
cc50: 62 6c 65 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20  ble row */.     
cc60: 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69       jmp2 = sqli
cc70: 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
cc80: 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49  (v, OP_Found, iI
cc90: 64 78 43 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c  dxCur+j, ckUniq,
cca0: 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   r1,.           
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccc0: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
ccd0: 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43  >nColumn); VdbeC
cce0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ccf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cd00: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
cd10: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a  dImm, 1, -1); /*
cd20: 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72   Decrement error
cd30: 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20   limit */.      
cd40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
cd50: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 33 2c 20  oadString(v, 3, 
cd60: 22 72 6f 77 20 22 29 3b 0a 20 20 20 20 20 20 20  "row ");.       
cd70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cd80: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
cd90: 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 7, 3, 3);.   
cda0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cdb0: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
cdc0: 34 2c 20 22 20 6d 69 73 73 69 6e 67 20 66 72 6f  4, " missing fro
cdd0: 6d 20 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20  m index ");.    
cde0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cdf0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
ce00: 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a  ncat, 4, 3, 3);.
ce10: 20 20 20 20 20 20 20 20 20 20 6a 6d 70 35 20 3d            jmp5 =
ce20: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
ce30: 53 74 72 69 6e 67 28 76 2c 20 34 2c 20 70 49 64  String(v, 4, pId
ce40: 78 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  x->zName);.     
ce50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ce60: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
ce70: 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20  cat, 4, 3, 3);. 
ce80: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ce90: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
cea0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31  _ResultRow, 3, 1
ceb0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
cec0: 34 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  4 = sqlite3VdbeA
ced0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
cee0: 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72  s, 1); VdbeCover
cef0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
cf00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cf10: 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b  Op0(v, OP_Halt);
cf20: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
cf30: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
cf40: 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20  , jmp2);.       
cf50: 20 20 20 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45     /* For UNIQUE
cf60: 20 69 6e 64 65 78 65 73 2c 20 76 65 72 69 66 79   indexes, verify
cf70: 20 74 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65   that only one e
cf80: 6e 74 72 79 20 65 78 69 73 74 73 20 77 69 74 68  ntry exists with
cf90: 20 74 68 65 0a 20 20 20 20 20 20 20 20 20 20 2a   the.          *
cfa0: 2a 20 63 75 72 72 65 6e 74 20 6b 65 79 2e 20 20  * current key.  
cfb0: 54 68 65 20 65 6e 74 72 79 20 69 73 20 75 6e 69  The entry is uni
cfc0: 71 75 65 20 69 66 20 28 31 29 20 61 6e 79 20 63  que if (1) any c
cfd0: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20  olumn is NULL.  
cfe0: 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 28 32          ** or (2
cff0: 29 20 74 68 65 20 6e 65 78 74 20 65 6e 74 72 79  ) the next entry
d000: 20 68 61 73 20 61 20 64 69 66 66 65 72 65 6e 74   has a different
d010: 20 6b 65 79 20 2a 2f 0a 20 20 20 20 20 20 20 20   key */.        
d020: 20 20 69 66 28 20 49 73 55 6e 69 71 75 65 49 6e    if( IsUniqueIn
d030: 64 65 78 28 70 49 64 78 29 20 29 7b 0a 20 20 20  dex(pIdx) ){.   
d040: 20 20 20 20 20 20 20 20 20 69 6e 74 20 75 6e 69           int uni
d050: 71 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62  qOk = sqlite3Vdb
d060: 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
d070: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a             int j
d080: 6d 70 36 3b 0a 20 20 20 20 20 20 20 20 20 20 20  mp6;.           
d090: 20 69 6e 74 20 6b 6b 3b 0a 20 20 20 20 20 20 20   int kk;.       
d0a0: 20 20 20 20 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b       for(kk=0; k
d0b0: 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b  k<pIdx->nKeyCol;
d0c0: 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   kk++){.        
d0d0: 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d        int iCol =
d0e0: 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b   pIdx->aiColumn[
d0f0: 6b 6b 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  kk];.           
d100: 20 20 20 61 73 73 65 72 74 28 20 69 43 6f 6c 21     assert( iCol!
d110: 3d 58 4e 5f 52 4f 57 49 44 20 26 26 20 69 43 6f  =XN_ROWID && iCo
d120: 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a  l<pTab->nCol );.
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d140: 28 20 69 43 6f 6c 3e 3d 30 20 26 26 20 70 54 61  ( iCol>=0 && pTa
d150: 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f  b->aCol[iCol].no
d160: 74 4e 75 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65  tNull ) continue
d170: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
d180: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d190: 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  2(v, OP_IsNull, 
d1a0: 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a  r1+kk, uniqOk);.
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 64                Vd
d1c0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d1d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
d1e0: 20 20 20 20 20 20 20 20 20 6a 6d 70 36 20 3d 20           jmp6 = 
d1f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d200: 31 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49  1(v, OP_Next, iI
d210: 64 78 43 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f  dxCur+j); VdbeCo
d220: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d230: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d240: 62 65 47 6f 74 6f 28 76 2c 20 75 6e 69 71 4f 6b  beGoto(v, uniqOk
d250: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d260: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
d270: 72 65 28 76 2c 20 6a 6d 70 36 29 3b 0a 20 20 20  re(v, jmp6);.   
d280: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d290: 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c  VdbeAddOp4Int(v,
d2a0: 20 4f 50 5f 49 64 78 47 54 2c 20 69 49 64 78 43   OP_IdxGT, iIdxC
d2b0: 75 72 2b 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72 31  ur+j, uniqOk, r1
d2c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2e0: 20 20 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c     pIdx->nKeyCol
d2f0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
d300: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
d310: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d320: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
d330: 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65  1, -1); /* Decre
d340: 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74  ment error limit
d350: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
d360: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
d370: 74 72 69 6e 67 28 76 2c 20 33 2c 20 22 6e 6f 6e  tring(v, 3, "non
d380: 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e  -unique entry in
d390: 20 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20   index ");.     
d3a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d3b0: 62 65 47 6f 74 6f 28 76 2c 20 6a 6d 70 35 29 3b  beGoto(v, jmp5);
d3c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d3d0: 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c  ite3VdbeResolveL
d3e0: 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b  abel(v, uniqOk);
d3f0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
d400: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d410: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
d420: 70 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  p4);.          s
d430: 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72  qlite3ResolvePar
d440: 74 49 64 78 4c 61 62 65 6c 28 70 50 61 72 73 65  tIdxLabel(pParse
d450: 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20  , jmp3);.       
d460: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
d470: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d480: 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75  OP_Next, iDataCu
d490: 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62  r, loopTop); Vdb
d4a0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d4b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d4c0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f  eJumpHere(v, loo
d4d0: 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66  pTop-1);.#ifndef
d4e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
d4f0: 45 45 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20  EECOUNT.        
d500: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
d510: 74 72 69 6e 67 28 76 2c 20 32 2c 20 22 77 72 6f  tring(v, 2, "wro
d520: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
d530: 69 6e 20 69 6e 64 65 78 20 22 29 3b 0a 20 20 20  in index ");.   
d540: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
d550: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
d560: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
d570: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
d580: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b           if( pPk
d590: 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75  ==pIdx ) continu
d5a0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  e;.          add
d5b0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  r = sqlite3VdbeC
d5c0: 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20  urrentAddr(v);. 
d5d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d5e0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d5f0: 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b  _IfPos, 1, addr+
d600: 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  2); VdbeCoverage
d610: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
d620: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d630: 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
d640: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  0);.          sq
d650: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d660: 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64  v, OP_Count, iId
d670: 78 43 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20  xCur+j, 3);.    
d680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d690: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71  eAddOp3(v, OP_Eq
d6a0: 2c 20 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33  , 8+j, addr+8, 3
d6b0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
d6c0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
d6d0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
d6e0: 35 28 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  5(v, SQLITE_NOTN
d6f0: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ULL);.          
d700: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d710: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
d720: 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20  1, -1);.        
d730: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61    sqlite3VdbeLoa
d740: 64 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 70 49  dString(v, 3, pI
d750: 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  dx->zName);.    
d760: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d770: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
d780: 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a  ncat, 3, 2, 7);.
d790: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d7a0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d7b0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20  P_ResultRow, 7, 
d7c0: 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65  1);.        }.#e
d7d0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
d7e0: 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a  MIT_BTREECOUNT *
d7f0: 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d  /.      } .    }
d800: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 73 74 61  .    {.      sta
d810: 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c  tic const int iL
d820: 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f  n = VDBE_OFFSET_
d830: 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 20  LINENO(2);.     
d840: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
d850: 62 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65  beOpList endCode
d860: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
d870: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20   OP_AddImm,     
d880: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
d890: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
d8a0: 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20       { OP_If,   
d8b0: 20 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20         1, 0,    
d8c0: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20      0},    /* 1 
d8d0: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
d8e0: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
d8f0: 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  3,        0},   
d900: 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20   /* 2 */.       
d910: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
d920: 20 20 20 33 2c 20 31 2c 20 20 20 20 20 20 20 20     3, 1,        
d930: 30 7d 2c 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20  0},.      };.   
d940: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
d950: 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c  .      aOp = sql
d960: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
d970: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 65  t(v, ArraySize(e
d980: 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64 65  ndCode), endCode
d990: 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 69 66  , iLn);.      if
d9a0: 28 20 61 4f 70 20 29 7b 0a 20 20 20 20 20 20 20  ( aOp ){.       
d9b0: 20 61 4f 70 5b 30 5d 2e 70 32 20 3d 20 2d 6d 78   aOp[0].p2 = -mx
d9c0: 45 72 72 3b 0a 20 20 20 20 20 20 20 20 61 4f 70  Err;.        aOp
d9d0: 5b 31 5d 2e 70 32 20 3d 20 73 71 6c 69 74 65 33  [1].p2 = sqlite3
d9e0: 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28  VdbeCurrentAddr(
d9f0: 76 29 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b  v);.        aOp[
da00: 32 5d 2e 70 34 74 79 70 65 20 3d 20 50 34 5f 53  2].p4type = P4_S
da10: 54 41 54 49 43 3b 0a 20 20 20 20 20 20 20 20 61  TATIC;.        a
da20: 4f 70 5b 32 5d 2e 70 34 2e 7a 20 3d 20 22 6f 6b  Op[2].p4.z = "ok
da30: 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ";.      }.    }
da40: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
da50: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
da60: 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
da70: 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  ECK */..#ifndef 
da80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
da90: 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  6.  /*.  **   PR
daa0: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20  AGMA encoding.  
dab0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f  **   PRAGMA enco
dac0: 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22  ding = "utf-8"|"
dad0: 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c  utf-16"|"utf-16l
dae0: 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20  e"|"utf-16be".  
daf0: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66  **.  ** In its f
db00: 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20  irst form, this 
db10: 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74  pragma returns t
db20: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  he encoding of t
db30: 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74  he main.  ** dat
db40: 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 64 61  abase. If the da
db50: 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e  tabase is not in
db60: 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73  itialized, it is
db70: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77   initialized now
db80: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
db90: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
dba0: 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 61 20  his pragma is a 
dbb0: 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69  no-op if the mai
dbc0: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  n database file.
dbd0: 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72    ** has not alr
dbe0: 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61  eady been initia
dbf0: 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63  lized. In this c
dc00: 61 73 65 20 69 74 20 73 65 74 73 20 74 68 65 20  ase it sets the 
dc10: 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63  default.  ** enc
dc20: 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20  oding that will 
dc30: 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
dc40: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
dc50: 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65  le if a new file
dc60: 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64  .  ** is created
dc70: 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67  . If an existing
dc80: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
dc90: 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74  ile is opened, t
dca0: 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  hen the.  ** def
dcb0: 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69  ault text encodi
dcc0: 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69 73 74  ng for the exist
dcd0: 69 6e 67 20 64 61 74 61 62 61 73 65 20 69 73 20  ing database is 
dce0: 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  used..  ** .  **
dcf0: 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65   In all cases ne
dd00: 77 20 64 61 74 61 62 61 73 65 73 20 63 72 65 61  w databases crea
dd10: 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 41 54  ted using the AT
dd20: 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65  TACH command are
dd30: 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f  .  ** created to
dd40: 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 65   use the same de
dd50: 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64  fault text encod
dd60: 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20  ing as the main 
dd70: 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a  database. If.  *
dd80: 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
dd90: 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e  ase has not been
dda0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64   initialized and
ddb0: 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68 65 6e  /or created when
ddc0: 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20   ATTACH.  ** is 
ddd0: 65 78 65 63 75 74 65 64 2c 20 74 68 69 73 20 69  executed, this i
dde0: 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68  s done before th
ddf0: 65 20 41 54 54 41 43 48 20 6f 70 65 72 61 74 69  e ATTACH operati
de00: 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  on..  **.  ** In
de10: 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   the second form
de20: 20 74 68 69 73 20 70 72 61 67 6d 61 20 73 65 74   this pragma set
de30: 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  s the text encod
de40: 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 69  ing to be used i
de50: 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62  n.  ** new datab
de60: 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65  ase files create
de70: 64 20 75 73 69 6e 67 20 74 68 69 73 20 64 61 74  d using this dat
de80: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74  abase handle. It
de90: 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73   is only.  ** us
dea0: 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20  eful if invoked 
deb0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65  immediately afte
dec0: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
ded0: 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73  ase i.  */.  cas
dee0: 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49  e PragTyp_ENCODI
def0: 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  NG: {.    static
df00: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e   const struct En
df10: 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68  cName {.      ch
df20: 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
df30: 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65   u8 enc;.    } e
df40: 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20  ncnames[] = {.  
df50: 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20      { "UTF8",   
df60: 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20    SQLITE_UTF8   
df70: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
df80: 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49  "UTF-8",    SQLI
df90: 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d  TE_UTF8        }
dfa0: 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c  ,  /* Must be el
dfb0: 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20  ement [1] */.   
dfc0: 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c     { "UTF-16le",
dfd0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
dfe0: 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20      },  /* Must 
dff0: 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a  be element [2] *
e000: 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31  /.      { "UTF-1
e010: 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  6be", SQLITE_UTF
e020: 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20  16BE     },  /* 
e030: 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20  Must be element 
e040: 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  [3] */.      { "
e050: 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54  UTF16le",  SQLIT
e060: 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c  E_UTF16LE     },
e070: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62  .      { "UTF16b
e080: 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
e090: 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6BE     },.     
e0a0: 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30   { "UTF-16",   0
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0c0: 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55    }, /* SQLITE_U
e0d0: 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20  TF16NATIVE */.  
e0e0: 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20      { "UTF16",  
e0f0: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
e100: 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54       }, /* SQLIT
e110: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f  E_UTF16NATIVE */
e120: 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a  .      { 0, 0 }.
e130: 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74      };.    const
e140: 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20   struct EncName 
e150: 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21  *pEnc;.    if( !
e160: 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20  zRight ){    /* 
e170: 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
e180: 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73  " */.      if( s
e190: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
e1a0: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
e1b0: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
e1c0: 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
e1d0: 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e  es[SQLITE_UTF8].
e1e0: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
e1f0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
e200: 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54  ( encnames[SQLIT
e210: 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d  E_UTF16LE].enc==
e220: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29  SQLITE_UTF16LE )
e230: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
e240: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
e250: 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51  UTF16BE].enc==SQ
e260: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
e270: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
e280: 6c 65 54 65 78 74 28 76 2c 20 22 65 6e 63 6f 64  leText(v, "encod
e290: 69 6e 67 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 45  ing", encnames[E
e2a0: 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e  NC(pParse->db)].
e2b0: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73  zName);.    }els
e2c0: 65 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e{              
e2d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50 52            /* "PR
e2e0: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
e2f0: 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  XXX" */.      /*
e300: 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68 65   Only change the
e310: 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65   value of sqlite
e320: 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61 74 61  .enc if the data
e330: 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20 6e  base handle is n
e340: 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69 74  ot.      ** init
e350: 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65 20  ialized. If the 
e360: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 65 78  main database ex
e370: 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73 71  ists, the new sq
e380: 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20  lite.enc value. 
e390: 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20       ** will be 
e3a0: 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68 65 6e  overwritten when
e3b0: 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e   the schema is n
e3c0: 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20 69  ext loaded. If i
e3d0: 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20  t does not.     
e3e0: 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69 73   ** already exis
e3f0: 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 63  ts, it will be c
e400: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
e410: 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20 76  e new encoding v
e420: 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
e430: 20 20 20 20 20 69 66 28 20 0a 20 20 20 20 20 20       if( .      
e440: 20 20 21 28 44 62 48 61 73 50 72 6f 70 65 72 74    !(DbHasPropert
e450: 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65  y(db, 0, DB_Sche
e460: 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20  maLoaded)) || . 
e470: 20 20 20 20 20 20 20 44 62 48 61 73 50 72 6f 70         DbHasProp
e480: 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 45  erty(db, 0, DB_E
e490: 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b 0a  mpty) .      ){.
e4a0: 20 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e 63          for(pEnc
e4b0: 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70  =&encnames[0]; p
e4c0: 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63  Enc->zName; pEnc
e4d0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
e4e0: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
e4f0: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45 6e  ICmp(zRight, pEn
e500: 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20  c->zName) ){.   
e510: 20 20 20 20 20 20 20 20 20 53 43 48 45 4d 41 5f           SCHEMA_
e520: 45 4e 43 28 64 62 29 20 3d 20 45 4e 43 28 64 62  ENC(db) = ENC(db
e530: 29 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) =.            
e540: 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20      pEnc->enc ? 
e550: 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49  pEnc->enc : SQLI
e560: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a  TE_UTF16NATIVE;.
e570: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
e580: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
e590: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e5a0: 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d   if( !pEnc->zNam
e5b0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
e5c0: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
e5d0: 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72  Parse, "unsuppor
e5e0: 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73  ted encoding: %s
e5f0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
e600: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
e610: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
e620: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
e630: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
e640: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e650: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
e660: 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  ION_PRAGMAS.  /*
e670: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e680: 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76  schema.]schema_v
e690: 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52  ersion.  **   PR
e6a0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63  AGMA [schema.]sc
e6b0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c  hema_version = <
e6c0: 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
e6d0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e6e0: 65 6d 61 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f  ema.]user_versio
e6f0: 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  n.  **   PRAGMA 
e700: 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65  [schema.]user_ve
e710: 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72  rsion = <integer
e720: 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52  >.  **.  **   PR
e730: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 66 72  AGMA [schema.]fr
e740: 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c  eelist_count = <
e750: 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
e760: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e770: 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ema.]application
e780: 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  _id.  **   PRAGM
e790: 41 20 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69  A [schema.]appli
e7a0: 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74  cation_id = <int
e7b0: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
e7c0: 54 68 65 20 70 72 61 67 6d 61 27 73 20 73 63 68  The pragma's sch
e7d0: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema_version and 
e7e0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65  user_version are
e7f0: 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20   used to set or 
e800: 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  get.  ** the val
e810: 75 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ue of the schema
e820: 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65  -version and use
e830: 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65  r-version, respe
e840: 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20  ctively. Both.  
e850: 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  ** the schema-ve
e860: 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73  rsion and the us
e870: 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33  er-version are 3
e880: 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  2-bit signed int
e890: 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65  egers.  ** store
e8a0: 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
e8b0: 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20  e header..  **. 
e8c0: 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63   ** The schema-c
e8d0: 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79  ookie is usually
e8e0: 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65   only manipulate
e8f0: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20  d internally by 
e900: 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20  SQLite. It.  ** 
e910: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
e920: 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65  y SQLite wheneve
e930: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
e940: 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65  chema is modifie
e950: 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74  d (by.  ** creat
e960: 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20  ing or dropping 
e970: 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  a table or index
e980: 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76 65  ). The schema ve
e990: 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79  rsion is used by
e9a0: 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63  .  ** SQLite eac
e9b0: 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69  h time a query i
e9c0: 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e  s executed to en
e9d0: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e  sure that the in
e9e0: 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a  ternal cache.  *
e9f0: 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  * of the schema 
ea00: 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c  used when compil
ea10: 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72  ing the SQL quer
ea20: 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63  y matches the sc
ea30: 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65  hema of.  ** the
ea40: 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73   database agains
ea50: 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70  t which the comp
ea60: 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63  iled query is ac
ea70: 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e  tually executed.
ea80: 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67  .  ** Subverting
ea90: 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20   this mechanism 
eaa0: 62 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41  by using "PRAGMA
eab0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22   schema_version"
eac0: 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20   to modify.  ** 
ead0: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
eae0: 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c  on is potentiall
eaf0: 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20  y dangerous and 
eb00: 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67  may lead to prog
eb10: 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73  ram.  ** crashes
eb20: 20 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f 72   or database cor
eb30: 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74  ruption. Use wit
eb40: 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a  h caution!.  **.
eb50: 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65    ** The user-ve
eb60: 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65  rsion is not use
eb70: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20  d internally by 
eb80: 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62  SQLite. It may b
eb90: 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61  e used by.  ** a
eba0: 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20  pplications for 
ebb0: 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a  any purpose..  *
ebc0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
ebd0: 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b  _HEADER_VALUE: {
ebe0: 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  .    int iCookie
ebf0: 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67   = pPragma->iArg
ec00: 3b 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6f 6b  ;  /* Which cook
ec10: 69 65 20 74 6f 20 72 65 61 64 20 6f 72 20 77 72  ie to read or wr
ec20: 69 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ite */.    sqlit
ec30: 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28  e3VdbeUsesBtree(
ec40: 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28  v, iDb);.    if(
ec50: 20 7a 52 69 67 68 74 20 26 26 20 28 70 50 72 61   zRight && (pPra
ec60: 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26  gma->mPragFlag &
ec70: 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64 4f 6e   PragFlag_ReadOn
ec80: 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ly)==0 ){.      
ec90: 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73 70 65  /* Write the spe
eca0: 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61  cified cookie va
ecb0: 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  lue */.      sta
ecc0: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
ecd0: 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d  List setCookie[]
ece0: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
ecf0: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
ed00: 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
ed10: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
ed20: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
ed30: 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d        0,  1,  0}
ed40: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
ed50: 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f       { OP_SetCoo
ed60: 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c  kie,      0,  0,
ed70: 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f    1},    /* 2 */
ed80: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
ed90: 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20  VdbeOp *aOp;.   
eda0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56 65     sqlite3VdbeVe
edb0: 72 69 66 79 41 76 61 69 6c 61 62 6c 65 53 70 61  rifyAvailableSpa
edc0: 63 65 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  ce(v, ArraySize(
edd0: 73 65 74 43 6f 6f 6b 69 65 29 29 3b 0a 20 20 20  setCookie));.   
ede0: 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33     aOp = sqlite3
edf0: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
ee00: 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f   ArraySize(setCo
ee10: 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65  okie), setCookie
ee20: 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 73 73 65  , 0);.      asse
ee30: 72 74 28 20 61 4f 70 21 3d 30 20 29 3b 0a 20 20  rt( aOp!=0 );.  
ee40: 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20      aOp[0].p1 = 
ee50: 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31  iDb;.      aOp[1
ee60: 5d 2e 70 31 20 3d 20 73 71 6c 69 74 65 33 41 74  ].p1 = sqlite3At
ee70: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
ee80: 20 20 61 4f 70 5b 32 5d 2e 70 31 20 3d 20 69 44    aOp[2].p1 = iD
ee90: 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e  b;.      aOp[2].
eea0: 70 32 20 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20 20  p2 = iCookie;.  
eeb0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
eec0: 2a 20 52 65 61 64 20 74 68 65 20 73 70 65 63 69  * Read the speci
eed0: 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75  fied cookie valu
eee0: 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  e */.      stati
eef0: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
ef00: 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20  st readCookie[] 
ef10: 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
ef20: 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
ef30: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20    0,  0,  0},   
ef40: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
ef50: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
ef60: 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30  ,      0,  1,  0
ef70: 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
ef80: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
ef90: 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c 20 20  tRow,       1,  
efa0: 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a  1,  0}.      };.
efb0: 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f        VdbeOp *aO
efc0: 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  p;.      sqlite3
efd0: 56 64 62 65 56 65 72 69 66 79 41 76 61 69 6c 61  VdbeVerifyAvaila
efe0: 62 6c 65 53 70 61 63 65 28 76 2c 20 41 72 72 61  bleSpace(v, Arra
eff0: 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65  ySize(readCookie
f000: 29 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20  ));.      aOp = 
f010: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f020: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
f030: 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c 72 65  e(readCookie),re
f040: 61 64 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20 20 20  adCookie,0);.   
f050: 20 20 20 61 73 73 65 72 74 28 20 61 4f 70 21 3d     assert( aOp!=
f060: 30 20 29 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30  0 );.      aOp[0
f070: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
f080: 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44    aOp[1].p1 = iD
f090: 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e  b;.      aOp[1].
f0a0: 70 33 20 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20 20  p3 = iCookie;.  
f0b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
f0c0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
f0d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f0e0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
f0f0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
f100: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
f110: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d  RANSIENT);.    }
f120: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
f130: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
f140: 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
f150: 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ON_PRAGMAS */..#
f160: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f170: 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
f180: 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a  _DIAGS.  /*.  **
f190: 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c     PRAGMA compil
f1a0: 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20  e_options.  **. 
f1b0: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
f1c0: 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70  ames of all comp
f1d0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
f1e0: 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 62 75   used in this bu
f1f0: 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70  ild,.  ** one op
f200: 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20  tion per row..  
f210: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
f220: 70 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  p_COMPILE_OPTION
f230: 53 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d  S: {.    int i =
f240: 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   0;.    const ch
f250: 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 70 50  ar *zOpt;.    pP
f260: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a  arse->nMem = 1;.
f270: 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e      setOneColumn
f280: 4e 61 6d 65 28 76 2c 20 22 63 6f 6d 70 69 6c 65  Name(v, "compile
f290: 5f 6f 70 74 69 6f 6e 22 29 3b 0a 20 20 20 20 77  _option");.    w
f2a0: 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71  hile( (zOpt = sq
f2b0: 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
f2c0: 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30  ion_get(i++))!=0
f2d0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
f2e0: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
f2f0: 76 2c 20 31 2c 20 7a 4f 70 74 29 3b 0a 20 20 20  v, 1, zOpt);.   
f300: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f310: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
f320: 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
f330: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
f340: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
f350: 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
f360: 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69  ION_DIAGS */..#i
f370: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
f380: 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20  T_WAL.  /*.  ** 
f390: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
f3a0: 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74  .]wal_checkpoint
f3b0: 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c   = passive|full|
f3c0: 72 65 73 74 61 72 74 7c 74 72 75 6e 63 61 74 65  restart|truncate
f3d0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b  .  **.  ** Check
f3e0: 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62 61  point the databa
f3f0: 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  se..  */.  case 
f400: 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43  PragTyp_WAL_CHEC
f410: 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 73 74  KPOINT: {.    st
f420: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
f430: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 62 75  *azCol[] = { "bu
f440: 73 79 22 2c 20 22 6c 6f 67 22 2c 20 22 63 68 65  sy", "log", "che
f450: 63 6b 70 6f 69 6e 74 65 64 22 20 7d 3b 0a 20 20  ckpointed" };.  
f460: 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49 64    int iBt = (pId
f470: 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f  2->z?iDb:SQLITE_
f480: 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a 20  MAX_ATTACHED);. 
f490: 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53     int eMode = S
f4a0: 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
f4b0: 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69 66  _PASSIVE;.    if
f4c0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
f4d0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
f4e0: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66 75  ICmp(zRight, "fu
f4f0: 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ll")==0 ){.     
f500: 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54     eMode = SQLIT
f510: 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c  E_CHECKPOINT_FUL
f520: 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  L;.      }else i
f530: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
f540: 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74 61  p(zRight, "resta
f550: 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  rt")==0 ){.     
f560: 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54     eMode = SQLIT
f570: 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
f580: 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c 73  TART;.      }els
f590: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
f5a0: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 74 72  ICmp(zRight, "tr
f5b0: 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a 20  uncate")==0 ){. 
f5c0: 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53         eMode = S
f5d0: 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
f5e0: 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20 20 20  _TRUNCATE;.     
f5f0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74   }.    }.    set
f600: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
f610: 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73  , 3, azCol);  as
f620: 73 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53 69  sert( 3==ArraySi
f630: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
f640: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
f650: 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  3;.    sqlite3Vd
f660: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
f670: 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20  heckpoint, iBt, 
f680: 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20 73  eMode, 1);.    s
f690: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f6a0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
f6b0: 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62  , 1, 3);.  }.  b
f6c0: 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  reak;..  /*.  **
f6d0: 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75     PRAGMA wal_au
f6e0: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a  tocheckpoint.  *
f6f0: 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61  *   PRAGMA wal_a
f700: 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20  utocheckpoint = 
f710: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66  N.  **.  ** Conf
f720: 69 67 75 72 65 20 61 20 64 61 74 61 62 61 73 65  igure a database
f730: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61   connection to a
f740: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65  utomatically che
f750: 63 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61  ckpoint a databa
f760: 73 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63  se.  ** after ac
f770: 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61  cumulating N fra
f780: 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20  mes in the log. 
f790: 4f 72 20 71 75 65 72 79 20 66 6f 72 20 74 68 65  Or query for the
f7a0: 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20   current value. 
f7b0: 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20   ** of N..  */. 
f7c0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41   case PragTyp_WA
f7d0: 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54  L_AUTOCHECKPOINT
f7e0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
f7f0: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
f800: 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63  te3_wal_autochec
f810: 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69 74  kpoint(db, sqlit
f820: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b  e3Atoi(zRight));
f830: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
f840: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 77  nSingleInt(v, "w
f850: 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
f860: 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e  t", .       db->
f870: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71  xWalCallback==sq
f880: 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
f890: 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20  ook ? .         
f8a0: 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f    SQLITE_PTR_TO_
f8b0: 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29  INT(db->pWalArg)
f8c0: 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65   : 0);.  }.  bre
f8d0: 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  ak;.#endif..  /*
f8e0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68  .  **  PRAGMA sh
f8f0: 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a  rink_memory.  **
f900: 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  .  ** IMPLEMENTA
f910: 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35  TION-OF: R-23445
f920: 2d 34 36 31 30 39 20 54 68 69 73 20 70 72 61 67  -46109 This prag
f930: 6d 61 20 63 61 75 73 65 73 20 74 68 65 20 64 61  ma causes the da
f940: 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e  tabase.  ** conn
f950: 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20  ection on which 
f960: 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f  it is invoked to
f970: 20 66 72 65 65 20 75 70 20 61 73 20 6d 75 63 68   free up as much
f980: 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20 20   memory as it.  
f990: 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69  ** can, by calli
f9a0: 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ng sqlite3_db_re
f9b0: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a  lease_memory()..
f9c0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f9d0: 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52  Typ_SHRINK_MEMOR
f9e0: 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  Y: {.    sqlite3
f9f0: 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
fa00: 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61  ry(db);.    brea
fa10: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
fa20: 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f  *   PRAGMA busy_
fa30: 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50  timeout.  **   P
fa40: 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f  RAGMA busy_timeo
fa50: 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ut = N.  **.  **
fa60: 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75   Call sqlite3_bu
fa70: 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e  sy_timeout(db, N
fa80: 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63  ).  Return the c
fa90: 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76  urrent timeout v
faa0: 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65  alue.  ** if one
fab0: 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20   is set.  If no 
fac0: 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20  busy handler or 
fad0: 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79  a different busy
fae0: 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a   handler is set.
faf0: 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72    ** then 0 is r
fb00: 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e  eturned.  Settin
fb10: 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f  g the busy_timeo
fb20: 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74  ut to 0 or negat
fb30: 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  ive.  ** disable
fb40: 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20  s the timeout.. 
fb50: 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61   */.  /*case Pra
fb60: 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
fb70: 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20  T*/ default: {. 
fb80: 20 20 20 61 73 73 65 72 74 28 20 70 50 72 61 67     assert( pPrag
fb90: 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50 72  ma->ePragTyp==Pr
fba0: 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
fbb0: 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  UT );.    if( zR
fbc0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
fbd0: 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
fbe0: 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  ut(db, sqlite3At
fbf0: 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
fc00: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
fc10: 67 6c 65 49 6e 74 28 76 2c 20 22 74 69 6d 65 6f  gleInt(v, "timeo
fc20: 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54 69  ut",  db->busyTi
fc30: 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  meout);.    brea
fc40: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
fc50: 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f  *   PRAGMA soft_
fc60: 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20  heap_limit.  ** 
fc70: 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65    PRAGMA soft_he
fc80: 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a  ap_limit = N.  *
fc90: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
fca0: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33 34  ATION-OF: R-2634
fcb0: 33 2d 34 35 39 33 30 20 54 68 69 73 20 70 72 61  3-45930 This pra
fcc0: 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74 68 65 0a  gma invokes the.
fcd0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66    ** sqlite3_sof
fce0: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 29  t_heap_limit64()
fcf0: 20 69 6e 74 65 72 66 61 63 65 20 77 69 74 68 20   interface with 
fd00: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 4e 2c 20  the argument N, 
fd10: 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20 73 70 65  if N is.  ** spe
fd20: 63 69 66 69 65 64 20 61 6e 64 20 69 73 20 61 20  cified and is a 
fd30: 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  non-negative int
fd40: 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c 45  eger..  ** IMPLE
fd50: 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
fd60: 36 34 34 35 31 2d 30 37 31 36 33 20 54 68 65 20  64451-07163 The 
fd70: 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20  soft_heap_limit 
fd80: 70 72 61 67 6d 61 20 61 6c 77 61 79 73 0a 20 20  pragma always.  
fd90: 2a 2a 20 72 65 74 75 72 6e 73 20 74 68 65 20 73  ** returns the s
fda0: 61 6d 65 20 69 6e 74 65 67 65 72 20 74 68 61 74  ame integer that
fdb0: 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e   would be return
fdc0: 65 64 20 62 79 20 74 68 65 0a 20 20 2a 2a 20 73  ed by the.  ** s
fdd0: 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
fde0: 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20 43 2d 6c  _limit64(-1) C-l
fdf0: 61 6e 67 75 61 67 65 20 66 75 6e 63 74 69 6f 6e  anguage function
fe00: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
fe10: 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
fe20: 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c  LIMIT: {.    sql
fe30: 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20  ite3_int64 N;.  
fe40: 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20    if( zRight && 
fe50: 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
fe60: 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29  oI64(zRight, &N)
fe70: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
fe80: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66       sqlite3_sof
fe90: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e  t_heap_limit64(N
fea0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
feb0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
fec0: 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  "soft_heap_limit
fed0: 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74  ",  sqlite3_soft
fee0: 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31  _heap_limit64(-1
fef0: 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
ff00: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
ff10: 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a 20  PRAGMA threads. 
ff20: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72   **   PRAGMA thr
ff30: 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  eads = N.  **.  
ff40: 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65  ** Configure the
ff50: 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
ff60: 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61 64  of worker thread
ff70: 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e  s.  Return the n
ff80: 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c  ew.  ** maximum,
ff90: 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
ffa0: 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75 65 73  less than reques
ffb0: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
ffc0: 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44 53   PragTyp_THREADS
ffd0: 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
ffe0: 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28  int64 N;.    if(
fff0: 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26 20   zRight.     && 
10000 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
10010 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29  oI64(zRight, &N)
10020 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  ==SQLITE_OK.    
10030 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a   && N>=0.    ){.
10040 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
10050 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c  mit(db, SQLITE_L
10060 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
10070 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78 37  ADS, (int)(N&0x7
10080 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20 7d  fffffff));.    }
10090 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
100a0 65 49 6e 74 28 76 2c 20 22 74 68 72 65 61 64 73  eInt(v, "threads
100b0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
100c0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c         sqlite3_l
100d0 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  imit(db, SQLITE_
100e0 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
100f0 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20  EADS, -1));.    
10100 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20  break;.  }..#if 
10110 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
10120 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
10130 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
10140 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74  /*.  ** Report t
10150 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
10160 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f   of file logs fo
10170 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a  r all databases.
10180 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
10190 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a  Typ_LOCK_STATUS:
101a0 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
101b0 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20  nst char *const 
101c0 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b  azLockName[] = {
101d0 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64  .      "unlocked
101e0 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72 65  ", "shared", "re
101f0 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e  served", "pendin
10200 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a  g", "exclusive".
10210 20 20 20 20 7d 3b 0a 20 20 20 20 73 74 61 74 69      };.    stati
10220 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
10230 43 6f 6c 5b 5d 20 3d 20 7b 20 22 64 61 74 61 62  Col[] = { "datab
10240 61 73 65 22 2c 20 22 73 74 61 74 75 73 22 20 7d  ase", "status" }
10250 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
10260 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d   setAllColumnNam
10270 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f 6c 29 3b  es(v, 2, azCol);
10280 20 61 73 73 65 72 74 28 20 32 3d 3d 41 72 72 61   assert( 2==Arra
10290 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a  ySize(azCol) );.
102a0 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
102b0 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d   = 2;.    for(i=
102c0 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
102d0 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20  +){.      Btree 
102e0 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73  *pBt;.      cons
102f0 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d  t char *zState =
10300 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20   "unknown";.    
10310 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69    int j;.      i
10320 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  f( db->aDb[i].zN
10330 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ame==0 ) continu
10340 65 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64  e;.      pBt = d
10350 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
10360 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20       if( pBt==0 
10370 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  || sqlite3BtreeP
10380 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a  ager(pBt)==0 ){.
10390 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d          zState =
103a0 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20   "closed";.     
103b0 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
103c0 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
103d0 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b  db, i ? db->aDb[
103e0 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20  i].zName : 0, . 
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10410 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c      SQLITE_FCNTL
10420 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d  _LOCKSTATE, &j)=
10430 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
10440 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
10450 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20  azLockName[j];. 
10460 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
10470 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
10480 64 28 76 2c 20 31 2c 20 22 73 73 22 2c 20 64 62  d(v, 1, "ss", db
10490 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
104a0 7a 53 74 61 74 65 29 3b 0a 20 20 20 20 20 20 73  zState);.      s
104b0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
104c0 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
104d0 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 2);.    }. 
104e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
104f0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
10500 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
10510 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59  case PragTyp_KEY
10520 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
10530 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79  ht ) sqlite3_key
10540 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69  _v2(db, zDb, zRi
10550 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  ght, sqlite3Strl
10560 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20  en30(zRight));. 
10570 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
10580 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b  case PragTyp_REK
10590 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
105a0 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72  ight ) sqlite3_r
105b0 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
105c0 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33   zRight, sqlite3
105d0 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
105e0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
105f0 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  }.  case PragTyp
10600 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69  _HEXKEY: {.    i
10610 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
10620 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20     u8 iByte;.   
10630 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
10640 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20  char zKey[40];. 
10650 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42       for(i=0, iB
10660 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  yte=0; i<sizeof(
10670 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74  zKey)*2 && sqlit
10680 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67 68  e3Isxdigit(zRigh
10690 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  t[i]); i++){.   
106a0 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69 42       iByte = (iB
106b0 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65  yte<<4) + sqlite
106c0 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74  3HexToInt(zRight
106d0 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  [i]);.        if
106e0 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65  ( (i&1)!=0 ) zKe
106f0 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a  y[i/2] = iByte;.
10700 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
10710 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78  ( (zLeft[3] & 0x
10720 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20  f)==0xb ){.     
10730 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76     sqlite3_key_v
10740 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c  2(db, zDb, zKey,
10750 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c   i/2);.      }el
10760 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
10770 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c  te3_rekey_v2(db,
10780 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
10790 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
107a0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
107b0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
107c0 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  d(SQLITE_HAS_COD
107d0 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  EC) || defined(S
107e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52  QLITE_ENABLE_CER
107f0 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67 54  OD).  case PragT
10800 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45  yp_ACTIVATE_EXTE
10810 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67  NSIONS: if( zRig
10820 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  ht ){.#ifdef SQL
10830 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
10840 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
10850 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73  NICmp(zRight, "s
10860 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20  ee-", 4)==0 ){. 
10870 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74       sqlite3_act
10880 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68  ivate_see(&zRigh
10890 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[4]);.    }.#en
108a0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
108b0 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20  E_ENABLE_CEROD. 
108c0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
108d0 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
108e0 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29  cerod-", 6)==0 )
108f0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
10900 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26  activate_cerod(&
10910 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20  zRight[6]);.    
10920 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
10930 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
10940 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20  } /* End of the 
10950 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f  PRAGMA switch */
10960 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20  ..pragma_out:.  
10970 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
10980 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69  , zLeft);.  sqli
10990 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52  te3DbFree(db, zR
109a0 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66  ight);.}..#endif
109b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
109c0 50 52 41 47 4d 41 20 2a 2f 0a                    PRAGMA */.