/ Hex Artifact Content
Login

Artifact 0200623c368b85c17d1f8e5c43822c110c8df54b:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20  or ON or NORMAL 
04c0: 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20  and 2 for FULL. 
04d0: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e   Return 1 for an
04e0: 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e   empty or .** un
04f0: 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e  recognized strin
0500: 67 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65  g argument.  The
0510: 20 46 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20   FULL option is 
0520: 64 69 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66  disallowed.** if
0530: 20 74 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61   the omitFull pa
0540: 72 61 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a  rameter it 1..**
0550: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
0560: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
0570: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
0580: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
0590: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
05a0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
05b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
05c0: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
05d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
05e0: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
05f0: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
0600: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
0610: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
0620: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
0630: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
0640: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
0650: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
0660: 2f 0a 73 74 61 74 69 63 20 75 38 20 67 65 74 53  /.static u8 getS
0670: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
0680: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d   char *z, int om
0690: 69 74 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29  itFull, u8 dflt)
06a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
06c0: 2a 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34  * 123456789 1234
06d0: 35 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69  56789 */.  stati
06e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65  c const char zTe
06f0: 78 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73  xt[] = "onoffals
0700: 65 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20  eyestruefull";. 
0710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0720: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0730: 20 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c   1, 2, 4, 9, 12,
0740: 20 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63   16};.  static c
0750: 6f 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b  onst u8 iLength[
0760: 5d 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c  ] = {2, 2, 3, 5,
0770: 20 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61   3, 4, 4};.  sta
0780: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61  tic const u8 iVa
0790: 6c 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20  lue[] =  {1, 0, 
07a0: 30 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a  0, 0, 1, 1, 2};.
07b0: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66    int i, n;.  if
07c0: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
07d0: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
07e0: 72 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74  rn (u8)sqlite3At
07f0: 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  oi(z);.  }.  n =
0800: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
0810: 28 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  (z);.  for(i=0; 
0820: 69 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e  i<ArraySize(iLen
0830: 67 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69  gth)-omitFull; i
0840: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65  ++){.    if( iLe
0850: 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71  ngth[i]==n && sq
0860: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a  lite3StrNICmp(&z
0870: 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d  Text[iOffset[i]]
0880: 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ,z,n)==0 ){.    
0890: 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b    return iValue[
08a0: 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  i];.    }.  }.  
08b0: 72 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a  return dflt;.}..
08c0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
08d0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
08e0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
08f0: 6c 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74  lue..*/.u8 sqlit
0900: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
0910: 73 74 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64  st char *z, u8 d
0920: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
0930: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
0940: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
0950: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
0960: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
0970: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
0980: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
0990: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
09a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
09b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
09c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
09d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
09e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
09f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
0a00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
0a10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
0a20: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0a30: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
0a40: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0a50: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0a60: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
0a70: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
0a80: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
0a90: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
0aa0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
0ab0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0ac0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
0ad0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
0ae0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
0af0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
0b00: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0b10: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
0b20: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
0b30: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0b40: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
0b50: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
0b60: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
0b70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
0b80: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0b90: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
0ba0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
0bb0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
0bc0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
0bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
0be0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
0bf0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
0c00: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
0c10: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
0c20: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
0c30: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
0c40: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
0c50: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
0c60: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
0c70: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
0c80: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
0c90: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0ca0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
0cb0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
0cc0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
0cd0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
0ce0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0cf0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
0d00: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
0d10: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
0d20: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
0d30: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
0d40: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d50: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
0d60: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
0d70: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
0d80: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
0d90: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
0da0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
0db0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
0dc0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
0dd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
0de0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
0df0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
0e00: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
0e10: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
0e20: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
0e30: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
0e40: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
0e50: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
0e60: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
0e70: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
0e80: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
0e90: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
0ea0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
0eb0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
0ec0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
0ed0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
0ee0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
0ef0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
0f00: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
0f10: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
0f20: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
0f30: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
0f40: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
0f50: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
0f60: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
0f70: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
0f80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
0f90: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
0fa0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
0fb0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
0fc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
0fd0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
0fe0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
0ff0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
1000: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
1010: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
1020: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
1030: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
1040: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
1050: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1060: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
1070: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
1080: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
1090: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
10a0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
10b0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
10c0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
10d0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
10e0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
10f0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
1100: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
1110: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
1120: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
1130: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
1140: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
1150: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
1160: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
1170: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
1180: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
1190: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11a0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
11b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
11c0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
11d0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
11e0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
11f0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1200: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1210: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
1220: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1230: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
1240: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
1250: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
1260: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1270: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
1280: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
1290: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
12a0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
12b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12c0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
12d0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
12e0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
12f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
1300: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
1310: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
1320: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
1330: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
1340: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
1350: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
1360: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
1370: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
1380: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
1390: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
13a0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
13b0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
13c0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
13d0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
13e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
13f0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
1400: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
1410: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
1420: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
1430: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1440: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
1450: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
1460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1470: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
1480: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
1490: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74   */../*.** Set t
14a0: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
14b0: 66 69 72 73 74 20 4e 20 63 6f 6c 75 6d 6e 73 20  first N columns 
14c0: 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  to the values in
14d0: 20 61 7a 43 6f 6c 5b 5d 0a 2a 2f 0a 73 74 61 74   azCol[].*/.stat
14e0: 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 43 6f  ic void setAllCo
14f0: 6c 75 6d 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62  lumnNames(.  Vdb
1500: 65 20 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20  e *v,           
1510: 20 20 20 20 2f 2a 20 54 68 65 20 71 75 65 72 79      /* The query
1520: 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1530: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20  ion */.  int N, 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1550: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
1560: 75 6d 6e 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  umns */.  const 
1570: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 20 20 20 20  char **azCol    
1580: 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 63 6f 6c   /* Names of col
1590: 75 6d 6e 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  umns */.){.  int
15a0: 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   i;.  sqlite3Vdb
15b0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 4e  eSetNumCols(v, N
15c0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
15d0: 4e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  N; i++){.    sql
15e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
15f0: 6d 65 28 76 2c 20 69 2c 20 43 4f 4c 4e 41 4d 45  me(v, i, COLNAME
1600: 5f 4e 41 4d 45 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  _NAME, azCol[i],
1610: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
1620: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
1630: 69 64 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e  id setOneColumnN
1640: 61 6d 65 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e  ame(Vdbe *v, con
1650: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73  st char *z){.  s
1660: 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
1670: 28 76 2c 20 31 2c 20 26 7a 29 3b 0a 7d 0a 0a 2f  (v, 1, &z);.}../
1680: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f  *.** Generate co
1690: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73  de to return a s
16a0: 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 76 61  ingle integer va
16b0: 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  lue..*/.static v
16c0: 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67 6c 65  oid returnSingle
16d0: 49 6e 74 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e  Int(Vdbe *v, con
16e0: 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c  st char *zLabel,
16f0: 20 69 36 34 20 76 61 6c 75 65 29 7b 0a 20 20 73   i64 value){.  s
1700: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
1710: 44 75 70 38 28 76 2c 20 4f 50 5f 49 6e 74 36 34  Dup8(v, OP_Int64
1720: 2c 20 30 2c 20 31 2c 20 30 2c 20 28 63 6f 6e 73  , 0, 1, 0, (cons
1730: 74 20 75 38 2a 29 26 76 61 6c 75 65 2c 20 50 34  t u8*)&value, P4
1740: 5f 49 4e 54 36 34 29 3b 0a 20 20 73 65 74 4f 6e  _INT64);.  setOn
1750: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a  eColumnName(v, z
1760: 4c 61 62 65 6c 29 3b 0a 20 20 73 71 6c 69 74 65  Label);.  sqlite
1770: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
1780: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
1790: 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e  1);.}../*.** Gen
17a0: 65 72 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65  erate code to re
17b0: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 74 65  turn a single te
17c0: 78 74 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  xt value..*/.sta
17d0: 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53  tic void returnS
17e0: 69 6e 67 6c 65 54 65 78 74 28 0a 20 20 56 64 62  ingleText(.  Vdb
17f0: 65 20 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20  e *v,           
1800: 20 20 20 20 20 2f 2a 20 50 72 65 70 61 72 65 64       /* Prepared
1810: 20 73 74 61 74 65 6d 65 6e 74 20 75 6e 64 65 72   statement under
1820: 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f   construction */
1830: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1840: 4c 61 62 65 6c 2c 20 20 20 20 20 2f 2a 20 4e 61  Label,     /* Na
1850: 6d 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  me of the result
1860: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 6f 6e   column */.  con
1870: 73 74 20 63 68 61 72 20 2a 7a 56 61 6c 75 65 20  st char *zValue 
1880: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
1890: 20 62 65 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a   be returned */.
18a0: 29 7b 0a 20 20 69 66 28 20 7a 56 61 6c 75 65 20  ){.  if( zValue 
18b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
18c0: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
18d0: 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  1, (const char*)
18e0: 7a 56 61 6c 75 65 29 3b 0a 20 20 20 20 73 65 74  zValue);.    set
18f0: 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c  OneColumnName(v,
1900: 20 7a 4c 61 62 65 6c 29 3b 0a 20 20 20 20 73 71   zLabel);.    sq
1910: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
1920: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
1930: 20 31 2c 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a   1, 1);.  }.}...
1940: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 73 61  /*.** Set the sa
1950: 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70  fety_level and p
1960: 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72 20 70  ager flags for p
1970: 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20 69 66  ager iDb.  Or if
1980: 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68   iDb<0.** set th
1990: 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72 20 61  ese values for a
19a0: 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69  ll pagers..*/.#i
19b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
19c0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
19d0: 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 41  static void setA
19e0: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73 71 6c  llPagerFlags(sql
19f0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28  ite3 *db){.  if(
1a00: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
1a10: 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62 20 3d  ){.    Db *pDb =
1a20: 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e   db->aDb;.    in
1a30: 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20  t n = db->nDb;. 
1a40: 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54     assert( SQLIT
1a50: 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47  E_FullFSync==PAG
1a60: 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a  ER_FULLFSYNC );.
1a70: 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49      assert( SQLI
1a80: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
1a90: 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  ==PAGER_CKPT_FUL
1aa0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
1ab0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 61 63  sert( SQLITE_Cac
1ac0: 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43  heSpill==PAGER_C
1ad0: 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20  ACHESPILL );.   
1ae0: 20 61 73 73 65 72 74 28 20 28 50 41 47 45 52 5f   assert( (PAGER_
1af0: 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45  FULLFSYNC | PAGE
1b00: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
1b10: 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45 53 50   | PAGER_CACHESP
1b20: 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20 20  ILL).           
1b30: 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c 41 47    ==  PAGER_FLAG
1b40: 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20 77 68  S_MASK );.    wh
1b50: 69 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29  ile( (n--) > 0 )
1b60: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 44 62 2d  {.      if( pDb-
1b70: 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20 20  >pBt ){.        
1b80: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50  sqlite3BtreeSetP
1b90: 61 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e 70  agerFlags(pDb->p
1ba0: 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
1bb0: 20 20 20 20 20 28 70 44 62 2d 3e 73 61 66 65 74       (pDb->safet
1bc0: 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45 52 5f  y_level & PAGER_
1bd0: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b  SYNCHRONOUS_MASK
1be0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
1bf0: 20 20 20 20 20 7c 20 28 64 62 2d 3e 66 6c 61 67       | (db->flag
1c00: 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47 53 5f  s & PAGER_FLAGS_
1c10: 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d  MASK) );.      }
1c20: 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20  .      pDb++;.  
1c30: 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a    }.  }.}.#else.
1c40: 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c 6c 50  # define setAllP
1c50: 61 67 65 72 46 6c 61 67 73 28 58 29 20 20 2f 2a  agerFlags(X)  /*
1c60: 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66   no-op */.#endif
1c70: 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  .../*.** Return 
1c80: 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
1c90: 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73   name for a cons
1ca0: 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f  traint resolutio
1cb0: 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  n action..*/.#if
1cc0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1cd0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61  _FOREIGN_KEY.sta
1ce0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
1cf0: 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63  actionName(u8 ac
1d00: 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63  tion){.  const c
1d10: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77  har *zName;.  sw
1d20: 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a  itch( action ){.
1d30: 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74 4e      case OE_SetN
1d40: 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53  ull:  zName = "S
1d50: 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20  ET NULL";       
1d60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1d70: 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e   OE_SetDflt:  zN
1d80: 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46 41 55  ame = "SET DEFAU
1d90: 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  LT";     break;.
1da0: 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61 73 63      case OE_Casc
1db0: 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43  ade:  zName = "C
1dc0: 41 53 43 41 44 45 22 3b 20 20 20 20 20 20 20 20  ASCADE";        
1dd0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1de0: 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e   OE_Restrict: zN
1df0: 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43 54 22  ame = "RESTRICT"
1e00: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
1e10: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
1e20: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e        zName = "N
1e30: 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20  O ACTION";  .   
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e50: 20 20 20 61 73 73 65 72 74 28 20 61 63 74 69 6f     assert( actio
1e60: 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72  n==OE_None ); br
1e70: 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  eak;.  }.  retur
1e80: 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69  n zName;.}.#endi
1e90: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65  f.../*.** Parame
1ea0: 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74 20 62  ter eMode must b
1eb0: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50 41 47  e one of the PAG
1ec0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
1ed0: 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  XX constants.** 
1ee0: 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67 65 72  defined in pager
1ef0: 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .h. This functio
1f00: 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 73  n returns the as
1f10: 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72 63 61  sociated lowerca
1f20: 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f  se.** journal-mo
1f30: 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73  de name..*/.cons
1f40: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
1f50: 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
1f60: 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61  nt eMode){.  sta
1f70: 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e 73 74  tic char * const
1f80: 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20   azModeName[] = 
1f90: 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22 2c 20  {.    "delete", 
1fa0: 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66 66 22  "persist", "off"
1fb0: 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20 22 6d  , "truncate", "m
1fc0: 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66 20 53  emory".#ifndef S
1fd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
1fe0: 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64      , "wal".#end
1ff0: 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72 74  if.  };.  assert
2000: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
2010: 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b  ODE_DELETE==0 );
2020: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
2030: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
2040: 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73  SIST==1 );.  ass
2050: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
2060: 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b  ALMODE_OFF==2 );
2070: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
2080: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
2090: 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73  NCATE==3 );.  as
20a0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
20b0: 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d  NALMODE_MEMORY==
20c0: 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50  4 );.  assert( P
20d0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
20e0: 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73  _WAL==5 );.  ass
20f0: 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26  ert( eMode>=0 &&
2100: 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a   eMode<=ArraySiz
2110: 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b  e(azModeName) );
2120: 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41  ..  if( eMode==A
2130: 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e  rraySize(azModeN
2140: 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20 30 3b  ame) ) return 0;
2150: 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65  .  return azMode
2160: 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a  Name[eMode];.}..
2170: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20  /*.** Process a 
2180: 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74  pragma statement
2190: 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61  .  .**.** Pragma
21a0: 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f  s are of this fo
21b0: 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50  rm:.**.**      P
21c0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69  RAGMA [schema.]i
21d0: 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a  d [= value].**.*
21e0: 2a 20 54 68 65 20 69 64 65 6e 74 69 66 69 65 72  * The identifier
21f0: 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61   might also be a
2200: 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61   string.  The va
2210: 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
2220: 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69   and.** identifi
2230: 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e  er, or a number.
2240: 20 20 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69    If minusFlag i
2250: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
2260: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e   value is.** a n
2270: 75 6d 62 65 72 20 74 68 61 74 20 77 61 73 20 70  umber that was p
2280: 72 65 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e  receded by a min
2290: 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49  us sign..**.** I
22a0: 66 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20  f the left side 
22b0: 69 73 20 22 64 61 74 61 62 61 73 65 2e 69 64 22  is "database.id"
22c0: 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68   then pId1 is th
22d0: 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a  e database name.
22e0: 2a 2a 20 61 6e 64 20 70 49 64 32 20 69 73 20 74  ** and pId2 is t
22f0: 68 65 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c  he id.  If the l
2300: 65 66 74 20 73 69 64 65 20 69 73 20 6a 75 73 74  eft side is just
2310: 20 22 69 64 22 20 74 68 65 6e 20 70 49 64 31 20   "id" then pId1 
2320: 69 73 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64  is the.** id and
2330: 20 70 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70   pId2 is any emp
2340: 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f  ty string..*/.vo
2350: 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
2360: 28 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  (.  Parse *pPars
2370: 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64  e, .  Token *pId
2380: 31 2c 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72  1,        /* Fir
2390: 73 74 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65  st part of [sche
23a0: 6d 61 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a  ma.]id field */.
23b0: 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20    Token *pId2,  
23c0: 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20        /* Second 
23d0: 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e  part of [schema.
23e0: 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55  ]id field, or NU
23f0: 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  LL */.  Token *p
2400: 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54  Value,      /* T
2410: 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e  oken for <value>
2420: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  , or NULL */.  i
2430: 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20  nt minusFlag    
2440: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20     /* True if a 
2450: 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64 65  '-' sign precede
2460: 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a  d <value> */.){.
2470: 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20    char *zLeft = 
2480: 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d  0;       /* Nul-
2490: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
24a0: 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a   string <id> */.
24b0: 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d    char *zRight =
24c0: 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d   0;      /* Nul-
24d0: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
24e0: 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c   string <value>,
24f0: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f   or NULL */.  co
2500: 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  nst char *zDb = 
2510: 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61  0;   /* The data
2520: 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  base name */.  T
2530: 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20  oken *pId;      
2540: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
2550: 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a   to <id> token *
2560: 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c  /.  char *aFcntl
2570: 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72  [4];       /* Ar
2580: 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45  gument to SQLITE
2590: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
25a0: 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
25b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
25c0: 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20  abase index for 
25d0: 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20  <database> */.  
25e0: 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69  int lwr, upr, mi
25f0: 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20  d = 0;       /* 
2600: 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f  Binary search bo
2610: 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63  unds */.  int rc
2620: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2630: 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e         /* return
2640: 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49   value form SQLI
2650: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
2660: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
2670: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20   = pParse->db;  
2680: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
2690: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
26a0: 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20    Db *pDb;      
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26c0: 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20 64  * The specific d
26d0: 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70 72  atabase being pr
26e0: 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65  agmaed */.  Vdbe
26f0: 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74   *v = sqlite3Get
2700: 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f  Vdbe(pParse);  /
2710: 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74 65  * Prepared state
2720: 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ment */.  const 
2730: 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e 61  struct sPragmaNa
2740: 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20  mes *pPragma;.. 
2750: 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74 75   if( v==0 ) retu
2760: 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rn;.  sqlite3Vdb
2770: 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b  eRunOnlyOnce(v);
2780: 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20  .  pParse->nMem 
2790: 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72  = 2;..  /* Inter
27a0: 70 72 65 74 20 74 68 65 20 5b 73 63 68 65 6d 61  pret the [schema
27b0: 2e 5d 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  .] part of the p
27c0: 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e  ragma statement.
27d0: 20 69 44 62 20 69 73 20 74 68 65 0a 20 20 2a 2a   iDb is the.  **
27e0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
27f0: 74 61 62 61 73 65 20 74 68 69 73 20 70 72 61 67  tabase this prag
2800: 6d 61 20 69 73 20 62 65 69 6e 67 20 61 70 70 6c  ma is being appl
2810: 69 65 64 20 74 6f 20 69 6e 20 64 62 2e 61 44 62  ied to in db.aDb
2820: 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73  []. */.  iDb = s
2830: 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d  qlite3TwoPartNam
2840: 65 28 70 50 61 72 73 65 2c 20 70 49 64 31 2c 20  e(pParse, pId1, 
2850: 70 49 64 32 2c 20 26 70 49 64 29 3b 0a 20 20 69  pId2, &pId);.  i
2860: 66 28 20 69 44 62 3c 30 20 29 20 72 65 74 75 72  f( iDb<0 ) retur
2870: 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  n;.  pDb = &db->
2880: 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20  aDb[iDb];..  /* 
2890: 49 66 20 74 68 65 20 74 65 6d 70 20 64 61 74 61  If the temp data
28a0: 62 61 73 65 20 68 61 73 20 62 65 65 6e 20 65 78  base has been ex
28b0: 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65 64 20 61  plicitly named a
28c0: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 0a 20  s part of the . 
28d0: 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65   ** pragma, make
28e0: 20 73 75 72 65 20 69 74 20 69 73 20 6f 70 65 6e   sure it is open
28f0: 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69 44  . .  */.  if( iD
2900: 62 3d 3d 31 20 26 26 20 73 71 6c 69 74 65 33 4f  b==1 && sqlite3O
2910: 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
2920: 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20 72  pParse) ){.    r
2930: 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c  eturn;.  }..  zL
2940: 65 66 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d  eft = sqlite3Nam
2950: 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70  eFromToken(db, p
2960: 49 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66  Id);.  if( !zLef
2970: 74 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  t ) return;.  if
2980: 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20  ( minusFlag ){. 
2990: 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69     zRight = sqli
29a0: 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22  te3MPrintf(db, "
29b0: 2d 25 54 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20  -%T", pValue);. 
29c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67   }else{.    zRig
29d0: 68 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65  ht = sqlite3Name
29e0: 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56  FromToken(db, pV
29f0: 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73  alue);.  }..  as
2a00: 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a 20 20  sert( pId2 );.  
2a10: 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20  zDb = pId2->n>0 
2a20: 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30  ? pDb->zName : 0
2a30: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  ;.  if( sqlite3A
2a40: 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65 2c  uthCheck(pParse,
2a50: 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20   SQLITE_PRAGMA, 
2a60: 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a  zLeft, zRight, z
2a70: 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  Db) ){.    goto 
2a80: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2a90: 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51  .  /* Send an SQ
2aa0: 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d  LITE_FCNTL_PRAGM
2ab0: 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74  A file-control t
2ac0: 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  o the underlying
2ad0: 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63   VFS.  ** connec
2ae0: 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72 65 74  tion.  If it ret
2af0: 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20  urns SQLITE_OK, 
2b00: 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61 74  then assume that
2b10: 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20 68 61   the VFS.  ** ha
2b20: 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67 6d 61  ndled the pragma
2b30: 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20 61 20   and generate a 
2b40: 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64 20 73  no-op prepared s
2b50: 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a 20  tatement..  **. 
2b60: 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
2b70: 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d 35  ON-OF: R-12238-5
2b80: 35 31 32 30 20 57 68 65 6e 65 76 65 72 20 61 20  5120 Whenever a 
2b90: 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e 74  PRAGMA statement
2ba0: 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20 2a 2a   is parsed,.  **
2bb0: 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c   an SQLITE_FCNTL
2bc0: 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63 6f 6e  _PRAGMA file con
2bd0: 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f 20  trol is sent to 
2be0: 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74 65 33  the open sqlite3
2bf0: 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65 63  _file.  ** objec
2c00: 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  t corresponding 
2c10: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
2c20: 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  file to which th
2c30: 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73 74  e pragma.  ** st
2c40: 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73 2e 0a  atement refers..
2c50: 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d    **.  ** IMPLEM
2c60: 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32  ENTATION-OF: R-2
2c70: 39 38 37 35 2d 33 31 36 37 38 20 54 68 65 20 61  9875-31678 The a
2c80: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 53  rgument to the S
2c90: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2ca0: 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f 6e  MA.  ** file con
2cb0: 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72 61 79  trol is an array
2cc0: 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
2cd0: 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a 2a 29  strings (char**)
2ce0: 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a 20 20   in which the.  
2cf0: 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e  ** second elemen
2d00: 74 20 6f 66 20 74 68 65 20 61 72 72 61 79 20 69  t of the array i
2d10: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
2d20: 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74 68 65  e pragma and the
2d30: 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65 6d   third.  ** elem
2d40: 65 6e 74 20 69 73 20 74 68 65 20 61 72 67 75 6d  ent is the argum
2d50: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61 67 6d  ent to the pragm
2d60: 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68 65  a or NULL if the
2d70: 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a 20   pragma has no. 
2d80: 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20   ** argument..  
2d90: 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d  */.  aFcntl[0] =
2da0: 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20   0;.  aFcntl[1] 
2db0: 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74  = zLeft;.  aFcnt
2dc0: 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20  l[2] = zRight;. 
2dd0: 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a   aFcntl[3] = 0;.
2de0: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
2df0: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72  r.nBusy = 0;.  r
2e00: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
2e10: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
2e20: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  , SQLITE_FCNTL_P
2e30: 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46  RAGMA, (void*)aF
2e40: 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d  cntl);.  if( rc=
2e50: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2e60: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65    returnSingleTe
2e70: 78 74 28 76 2c 20 22 72 65 73 75 6c 74 22 2c 20  xt(v, "result", 
2e80: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
2e90: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63  sqlite3_free(aFc
2ea0: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 67 6f 74  ntl[0]);.    got
2eb0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
2ec0: 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
2ed0: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
2ee0: 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d     if( aFcntl[0]
2ef0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2f00: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
2f10: 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30  , "%s", aFcntl[0
2f20: 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ]);.      sqlite
2f30: 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d  3_free(aFcntl[0]
2f40: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61  );.    }.    pPa
2f50: 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20  rse->nErr++;.   
2f60: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
2f70: 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d  ;.    goto pragm
2f80: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
2f90: 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61 67   Locate the prag
2fa0: 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70  ma in the lookup
2fb0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20   table */.  lwr 
2fc0: 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72  = 0;.  upr = Arr
2fd0: 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61  aySize(aPragmaNa
2fe0: 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28  mes)-1;.  while(
2ff0: 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20   lwr<=upr ){.   
3000: 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29   mid = (lwr+upr)
3010: 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  /2;.    rc = sql
3020: 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65  ite3_stricmp(zLe
3030: 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  ft, aPragmaNames
3040: 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  [mid].zName);.  
3050: 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72    if( rc==0 ) br
3060: 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c  eak;.    if( rc<
3070: 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d  0 ){.      upr =
3080: 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65   mid - 1;.    }e
3090: 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d  lse{.      lwr =
30a0: 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a   mid + 1;.    }.
30b0: 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70    }.  if( lwr>up
30c0: 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  r ) goto pragma_
30d0: 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61 20 3d  out;.  pPragma =
30e0: 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d   &aPragmaNames[m
30f0: 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  id];..  /* Make 
3100: 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73  sure the databas
3110: 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64  e schema is load
3120: 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d 61  ed if the pragma
3130: 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 2a   requires that *
3140: 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d 61  /.  if( (pPragma
3150: 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72  ->mPragFlag & Pr
3160: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3170: 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  a)!=0 ){.    if(
3180: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
3190: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
31a0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
31b0: 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  }..  /* Jump to 
31c0: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
31d0: 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a  pragma handler *
31e0: 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72 61  /.  switch( pPra
31f0: 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29 7b  gma->ePragTyp ){
3200: 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .  .#if !defined
3210: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3220: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21  ER_PRAGMAS) && !
3230: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
3240: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a  MIT_DEPRECATED).
3250: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
3260: 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61 75  A [schema.]defau
3270: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20 20  lt_cache_size.  
3280: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
3290: 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68  ma.]default_cach
32a0: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
32b0: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
32c0: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
32d0: 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74  rrent persistent
32e0: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
32f0: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
3300: 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75   size.  The valu
3310: 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74 68  e returned is th
3320: 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
3330: 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69   of.  ** pages i
3340: 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65  n the page cache
3350: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3360: 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68 65  rm sets both the
3370: 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61   current.  ** pa
3380: 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61  ge cache size va
3390: 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72 73  lue and the pers
33a0: 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63 68  istent page cach
33b0: 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a  e size value.  *
33c0: 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  * stored in the 
33d0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
33e0: 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76   **.  ** Older v
33f0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
3400: 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20  e would set the 
3410: 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73 69  default cache si
3420: 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67  ze to a.  ** neg
3430: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20  ative number to 
3440: 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f  indicate synchro
3450: 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65  nous=OFF.  These
3460: 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f   days, synchrono
3470: 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79  us.  ** is alway
3480: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20  s on by default 
3490: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
34a0: 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65  e sign of the de
34b0: 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a  fault cache.  **
34c0: 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74   size.  But cont
34d0: 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65  inue to take the
34e0: 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20   absolute value 
34f0: 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  of the default c
3500: 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f  ache.  ** size o
3510: 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d  f historical com
3520: 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f  patibility..  */
3530: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
3540: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
3550: 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  ZE: {.    static
3560: 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d   const int iLn =
3570: 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e   VDBE_OFFSET_LIN
3580: 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74  ENO(2);.    stat
3590: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
35a0: 69 73 74 20 67 65 74 43 61 63 68 65 53 69 7a 65  ist getCacheSize
35b0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
35c0: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30  P_Transaction, 0
35d0: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f0: 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a          /* 0 */.
3600: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
3610: 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20  ookie,  0, 1,   
3620: 20 20 20 20 20 42 54 52 45 45 5f 44 45 46 41 55       BTREE_DEFAU
3630: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20  LT_CACHE_SIZE}, 
3640: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 1 */.      {
3650: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
3660: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
3670: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
3680: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20  eger,     0, 2, 
3690: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
36a0: 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20   { OP_Subtract, 
36b0: 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20     1, 2,        
36c0: 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  1},.      { OP_I
36d0: 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38  fPos,       1, 8
36e0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
36f0: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
3700: 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20       0, 1,      
3710: 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20    0},           
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3730: 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   6 */.      { OP
3740: 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c  _Noop,        0,
3750: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
3760: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
3770: 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20  Row,   1, 1,    
3780: 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20      0},.    };. 
3790: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
37a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
37b0: 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29  sesBtree(v, iDb)
37c0: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
37d0: 74 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 6e  t ){.      setOn
37e0: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22  eColumnName(v, "
37f0: 63 61 63 68 65 5f 73 69 7a 65 22 29 3b 0a 20 20  cache_size");.  
3800: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
3810: 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 73 71 6c   += 2;.      sql
3820: 69 74 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f  ite3VdbeVerifyNo
3830: 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76  MallocRequired(v
3840: 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 43  , ArraySize(getC
3850: 61 63 68 65 53 69 7a 65 29 29 3b 0a 20 20 20 20  acheSize));.    
3860: 20 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56    aOp = sqlite3V
3870: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
3880: 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63  ArraySize(getCac
3890: 68 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68  heSize), getCach
38a0: 65 53 69 7a 65 2c 20 69 4c 6e 29 3b 0a 20 20 20  eSize, iLn);.   
38b0: 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52     if( ONLY_IF_R
38c0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f  EALLOC_STRESS(aO
38d0: 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20  p==0) ) break;. 
38e0: 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d       aOp[0].p1 =
38f0: 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b   iDb;.      aOp[
3900: 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20  1].p1 = iDb;.   
3910: 20 20 20 61 4f 70 5b 36 5d 2e 70 31 20 3d 20 53     aOp[6].p1 = S
3920: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41  QLITE_DEFAULT_CA
3930: 43 48 45 5f 53 49 5a 45 3b 0a 20 20 20 20 7d 65  CHE_SIZE;.    }e
3940: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
3950: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73  ize = sqlite3Abs
3960: 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f  Int32(sqlite3Ato
3970: 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
3980: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72    sqlite3BeginWr
3990: 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61  iteOperation(pPa
39a0: 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20  rse, 0, iDb);.  
39b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
39c0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
39d0: 67 65 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20  ger, size, 1);. 
39e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
39f0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74  AddOp3(v, OP_Set
3a00: 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52  Cookie, iDb, BTR
3a10: 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  EE_DEFAULT_CACHE
3a20: 5f 53 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20  _SIZE, 1);.     
3a30: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
3a40: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
3a50: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
3a60: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
3a70: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
3a80: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
3a90: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
3aa0: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
3ab0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
3ac0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
3ad0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
3ae0: 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45  endif /* !SQLITE
3af0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
3b00: 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f  MAS && !SQLITE_O
3b10: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
3b20: 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
3b30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3b40: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a  R_PRAGMAS).  /*.
3b50: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3b60: 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 0a  hema.]page_size.
3b70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3b80: 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 3d  hema.]page_size=
3b90: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
3ba0: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
3bb0: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
3bc0: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
3bd0: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
3be0: 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e  e size in bytes.
3bf0: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
3c00: 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20  m sets the.  ** 
3c10: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
3c20: 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76  ze value.  The v
3c30: 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  alue can only be
3c40: 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65   set if.  ** the
3c50: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
3c60: 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61 74  t yet been creat
3c70: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
3c80: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
3c90: 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  E: {.    Btree *
3ca0: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
3cb0: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
3cc0: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
3cd0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
3ce0: 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53  nt size = ALWAYS
3cf0: 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42  (pBt) ? sqlite3B
3d00: 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65 28  treeGetPageSize(
3d10: 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20  pBt) : 0;.      
3d20: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
3d30: 76 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20  v, "page_size", 
3d40: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  size);.    }else
3d50: 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f  {.      /* Mallo
3d60: 63 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20  c may fail when 
3d70: 73 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65  setting the page
3d80: 2d 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20  -size, as there 
3d90: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20  is an internal. 
3da0: 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74       ** buffer t
3db0: 68 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f  hat the pager mo
3dc0: 64 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69  dule resizes usi
3dd0: 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c  ng sqlite3_reall
3de0: 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  oc()..      */. 
3df0: 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67       db->nextPag
3e00: 65 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41  esize = sqlite3A
3e10: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
3e20: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f     if( SQLITE_NO
3e30: 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  MEM==sqlite3Btre
3e40: 65 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74  eSetPageSize(pBt
3e50: 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69  , db->nextPagesi
3e60: 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20  ze,-1,0) ){.    
3e70: 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
3e80: 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
3e90: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
3ea0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
3eb0: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
3ec0: 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65  a.]secure_delete
3ed0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
3ee0: 63 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65  chema.]secure_de
3ef0: 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a  lete=ON/OFF.  **
3f00: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
3f10: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
3f20: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
3f30: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 65   for the.  ** se
3f40: 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61 67  cure_delete flag
3f50: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3f60: 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20 73  rm changes the s
3f70: 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a  ecure_delete.  *
3f80: 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20 61  * flag setting a
3f90: 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e 65  nd reports thene
3fa0: 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20  w value..  */.  
3fb0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45 43  case PragTyp_SEC
3fc0: 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20  URE_DELETE: {.  
3fd0: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
3fe0: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74  Db->pBt;.    int
3ff0: 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73   b = -1;.    ass
4000: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
4010: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
4020: 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69 74  .      b = sqlit
4030: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
4040: 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  ght, 0);.    }. 
4050: 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d     if( pId2->n==
4060: 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20  0 && b>=0 ){.   
4070: 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
4080: 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
4090: 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
40a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
40b0: 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 64  eeSecureDelete(d
40c0: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
40d0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
40e0: 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65  }.    b = sqlite
40f0: 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65  3BtreeSecureDele
4100: 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20 20  te(pBt, b);.    
4110: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
4120: 76 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74  v, "secure_delet
4130: 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61  e", b);.    brea
4140: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
4150: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4160: 61 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e  a.]max_page_coun
4170: 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  t.  **  PRAGMA [
4180: 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65  schema.]max_page
4190: 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20  _count=N.  **.  
41a0: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
41b0: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
41c0: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  rrent setting fo
41d0: 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d  r the.  ** maxim
41e0: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  um number of pag
41f0: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
4200: 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20  se file.  The . 
4210: 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20   ** second form 
4220: 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e  attempts to chan
4230: 67 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e  ge this setting.
4240: 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d    Both.  ** form
4250: 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 75 72  s return the cur
4260: 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20  rent setting..  
4270: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f  **.  ** The abso
4280: 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20  lute value of N 
4290: 69 73 20 75 73 65 64 2e 20 20 54 68 69 73 20 69  is used.  This i
42a0: 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61  s undocumented a
42b0: 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68  nd might.  ** ch
42c0: 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20  ange.  The only 
42d0: 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72  purpose is to pr
42e0: 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20 77 61  ovide an easy wa
42f0: 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74  y to test.  ** t
4300: 68 65 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  he sqlite3AbsInt
4310: 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  32() function.. 
4320: 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   **.  **  PRAGMA
4330: 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 63   [schema.]page_c
4340: 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ount.  **.  ** R
4350: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
4360: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
4370: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
4380: 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
4390: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
43a0: 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  UNT: {.    int i
43b0: 52 65 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Reg;.    sqlite3
43c0: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
43d0: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
43e0: 20 20 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72     iReg = ++pPar
43f0: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66  se->nMem;.    if
4400: 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  ( sqlite3Tolower
4410: 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20  (zLeft[0])=='p' 
4420: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4430: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
4440: 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c  _Pagecount, iDb,
4450: 20 69 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73   iReg);.    }els
4460: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
4470: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
4480: 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20  _MaxPgcnt, iDb, 
4490: 69 52 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20  iReg, .         
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
44b0: 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 73  qlite3AbsInt32(s
44c0: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
44d0: 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  t)));.    }.    
44e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
44f0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
4500: 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20  w, iReg, 1);.   
4510: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
4520: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
4530: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4540: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
4550: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66  LNAME_NAME, zLef
4560: 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  t, SQLITE_TRANSI
4570: 45 4e 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ENT);.    break;
4580: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
4590: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
45a0: 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20  ]locking_mode.  
45b0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
45c0: 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  ma.]locking_mode
45d0: 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75   = (normal|exclu
45e0: 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73  sive).  */.  cas
45f0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  e PragTyp_LOCKIN
4600: 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f  G_MODE: {.    co
4610: 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d  nst char *zRet =
4620: 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69   "normal";.    i
4630: 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f  nt eMode = getLo
4640: 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74  ckingMode(zRight
4650: 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32  );..    if( pId2
4660: 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d  ->n==0 && eMode=
4670: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
4680: 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20  DE_QUERY ){.    
4690: 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41    /* Simple "PRA
46a0: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
46b0: 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  ;" statement. Th
46c0: 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f  is is a query fo
46d0: 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  r.      ** the c
46e0: 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c  urrent default l
46f0: 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69  ocking mode (whi
4700: 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ch may be differ
4710: 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  ent to.      ** 
4720: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
4730: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
4740: 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f  abase)..      */
4750: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64  .      eMode = d
4760: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  b->dfltLockMode;
4770: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4780: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
4790: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d  .      if( pId2-
47a0: 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  >n==0 ){.       
47b0: 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74   /* This indicat
47c0: 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62  es that no datab
47d0: 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65  ase name was spe
47e0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20  cified as part. 
47f0: 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
4800: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e   PRAGMA command.
4810: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
4820: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d  e locking-mode m
4830: 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a  ust be.        *
4840: 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74  * set on all att
4850: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c  ached databases,
4860: 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20   as well as the 
4870: 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20  main db file..  
4880: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20        **.       
4890: 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71   ** Also, the sq
48a0: 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f  lite3.dfltLockMo
48b0: 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  de variable is s
48c0: 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20  et so that.     
48d0: 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71     ** any subseq
48e0: 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20  uently attached 
48f0: 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75  databases also u
4900: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  se the specified
4910: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b  .        ** lock
4920: 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20  ing mode..      
4930: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74    */.        int
4940: 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73   ii;.        ass
4950: 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44  ert(pDb==&db->aD
4960: 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66  b[0]);.        f
4970: 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e  or(ii=2; ii<db->
4980: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
4990: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
49a0: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
49b0: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
49c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
49d0: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
49e0: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
49f0: 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  de);.        }. 
4a00: 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c         db->dfltL
4a10: 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d  ockMode = (u8)eM
4a20: 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ode;.      }.   
4a30: 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69     pPager = sqli
4a40: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
4a50: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65  b->pBt);.      e
4a60: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61  Mode = sqlite3Pa
4a70: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
4a80: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
4a90: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
4aa0: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
4ab0: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41  OCKINGMODE_NORMA
4ac0: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  L.            ||
4ad0: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4ae0: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
4af0: 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65  IVE );.    if( e
4b00: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
4b10: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
4b20: 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20  E ){.      zRet 
4b30: 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20  = "exclusive";. 
4b40: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
4b50: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f  ingleText(v, "lo
4b60: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52 65  cking_mode", zRe
4b70: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
4b80: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
4b90: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a  RAGMA [schema.]j
4ba0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a  ournal_mode.  **
4bb0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4bc0: 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  .]journal_mode =
4bd0: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20  .  **           
4be0: 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65             (dele
4bf0: 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74  te|persist|off|t
4c00: 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77  runcate|memory|w
4c10: 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63  al|off).  */.  c
4c20: 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52  ase PragTyp_JOUR
4c30: 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  NAL_MODE: {.    
4c40: 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20  int eMode;      
4c50: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
4c60: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
4c70: 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f  E_XXX symbols */
4c80: 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20  .    int ii;    
4c90: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
4ca0: 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73  ounter */..    s
4cb0: 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28  etOneColumnName(
4cc0: 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  v, "journal_mode
4cd0: 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  ");.    if( zRig
4ce0: 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  ht==0 ){.      /
4cf0: 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
4d00: 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f 66   "=MODE" part of
4d10: 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f 20   the pragma, do 
4d20: 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 0a  a query for the.
4d30: 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
4d40: 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 65   mode */.      e
4d50: 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55  Mode = PAGER_JOU
4d60: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  RNALMODE_QUERY;.
4d70: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4d80: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f   const char *zMo
4d90: 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20  de;.      int n 
4da0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
4db0: 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  0(zRight);.     
4dc0: 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a   for(eMode=0; (z
4dd0: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f  Mode = sqlite3Jo
4de0: 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d  urnalModename(eM
4df0: 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b  ode))!=0; eMode+
4e00: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
4e10: 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
4e20: 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e  zRight, zMode, n
4e30: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
4e40: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
4e50: 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  !zMode ){.      
4e60: 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f    /* If the "=MO
4e70: 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e 6f  DE" part does no
4e80: 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77  t match any know
4e90: 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a  n journal mode,.
4ea0: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
4eb0: 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20  do a query */.  
4ec0: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41        eMode = PA
4ed0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4ee0: 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20  QUERY;.      }. 
4ef0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f     }.    if( eMo
4f00: 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  de==PAGER_JOURNA
4f10: 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20 70  LMODE_QUERY && p
4f20: 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20  Id2->n==0 ){.   
4f30: 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50     /* Convert "P
4f40: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
4f50: 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d 41  de" into "PRAGMA
4f60: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
4f70: 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44 62  de" */.      iDb
4f80: 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64 32   = 0;.      pId2
4f90: 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 23  ->n = 1;.    }.#
4fa0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  ifdef SQLITE_DEF
4fb0: 41 55 4c 54 5f 57 41 4c 5f 53 41 46 45 54 59 4c  AULT_WAL_SAFETYL
4fc0: 45 56 45 4c 0a 20 20 20 20 69 66 28 20 21 20 53  EVEL.    if( ! S
4fd0: 51 4c 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65  QLITE_DbSafetyLe
4fe0: 76 65 6c 49 73 46 69 78 65 64 28 70 44 62 2d 3e  velIsFixed(pDb->
4ff0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 20 29 7b  safety_level) ){
5000: 0a 20 20 20 20 20 20 69 66 28 20 65 4d 6f 64 65  .      if( eMode
5010: 20 3d 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41   == PAGER_JOURNA
5020: 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20  LMODE_WAL ){.   
5030: 20 20 20 20 20 2f 2a 20 77 68 65 6e 20 65 6e 74       /* when ent
5040: 65 72 69 6e 67 20 77 61 6c 20 6d 6f 64 65 2c 20  ering wal mode, 
5050: 69 6d 6d 65 64 69 61 74 65 6c 79 20 73 77 69 74  immediately swit
5060: 63 68 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65  ch the safety_le
5070: 76 65 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 73  vel.        ** s
5080: 6f 20 74 68 61 74 20 61 20 71 75 65 72 79 20 74  o that a query t
5090: 6f 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f  o pragma synchro
50a0: 6e 6f 75 73 20 72 65 74 75 72 6e 73 20 74 68 65  nous returns the
50b0: 20 63 6f 72 72 65 63 74 20 76 61 6c 75 65 20 2a   correct value *
50c0: 2f 0a 20 20 20 20 20 20 0a 20 20 20 20 20 20 20  /.      .       
50d0: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
50e0: 65 6c 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41  el = SQLITE_DEFA
50f0: 55 4c 54 5f 57 41 4c 5f 53 41 46 45 54 59 4c 45  ULT_WAL_SAFETYLE
5100: 56 45 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  VEL;.      }else
5110: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
5120: 74 68 65 20 75 73 65 72 20 68 61 73 6e 27 74 20  the user hasn't 
5130: 6f 76 65 72 72 69 64 64 65 6e 20 74 68 65 20 73  overridden the s
5140: 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69  ynchronous setti
5150: 6e 67 2c 20 75 73 65 20 74 68 65 20 0a 20 20 20  ng, use the .   
5160: 20 20 20 20 20 2a 2a 20 64 65 66 61 75 6c 74 20       ** default 
5170: 66 6f 72 20 6e 6f 6e 2d 77 61 6c 20 64 61 74 61  for non-wal data
5180: 62 61 73 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  bases */.       
5190: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
51a0: 65 6c 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a  el = 3;.      }.
51b0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
51c0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
51d0: 41 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 20 2a  AL_SAFETYLEVEL *
51e0: 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d  /.    for(ii=db-
51f0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
5200: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i--){.      if( 
5210: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20  db->aDb[ii].pBt 
5220: 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70  && (ii==iDb || p
5230: 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20  Id2->n==0) ){.  
5240: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5250: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 69  eUsesBtree(v, ii
5260: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5270: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
5280: 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20  OP_JournalMode, 
5290: 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20  ii, 1, eMode);. 
52a0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
52b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
52c0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
52d0: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62  ow, 1, 1);.    b
52e0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
52f0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
5300: 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69  hema.]journal_si
5310: 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50  ze_limit.  **  P
5320: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a  RAGMA [schema.]j
5330: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
5340: 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65  t=N.  **.  ** Ge
5350: 74 20 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a  t or set the siz
5360: 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62  e limit on rollb
5370: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
5380: 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  s..  */.  case P
5390: 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53  ragTyp_JOURNAL_S
53a0: 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20  IZE_LIMIT: {.   
53b0: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
53c0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
53d0: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
53e0: 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d    i64 iLimit = -
53f0: 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  2;.    if( zRigh
5400: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
5410: 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
5420: 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29  zRight, &iLimit)
5430: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d  ;.      if( iLim
5440: 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d  it<-1 ) iLimit =
5450: 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   -1;.    }.    i
5460: 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50  Limit = sqlite3P
5470: 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c  agerJournalSizeL
5480: 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69  imit(pPager, iLi
5490: 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  mit);.    return
54a0: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6a 6f  SingleInt(v, "jo
54b0: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
54c0: 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20  ", iLimit);.    
54d0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64  break;.  }..#end
54e0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
54f0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
5500: 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  */..  /*.  **  P
5510: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
5520: 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20  uto_vacuum.  ** 
5530: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
5540: 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20  ]auto_vacuum=N. 
5550: 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20   **.  ** Get or 
5560: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  set the value of
5570: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 27 61   the database 'a
5580: 75 74 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61  uto-vacuum' para
5590: 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20  meter..  ** The 
55a0: 76 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a  value is one of:
55b0: 20 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20    0 NONE 1 FULL 
55c0: 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20  2 INCREMENTAL.  
55d0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
55e0: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
55f0: 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  M.  case PragTyp
5600: 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a  _AUTO_VACUUM: {.
5610: 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d      Btree *pBt =
5620: 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61   pDb->pBt;.    a
5630: 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b  ssert( pBt!=0 );
5640: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
5650: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
5660: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 61 75  SingleInt(v, "au
5670: 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69  to_vacuum", sqli
5680: 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56  te3BtreeGetAutoV
5690: 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20  acuum(pBt));.   
56a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
56b0: 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74  t eAuto = getAut
56c0: 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b  oVacuum(zRight);
56d0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
56e0: 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f  Auto>=0 && eAuto
56f0: 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  <=2 );.      db-
5700: 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28  >nextAutovac = (
5710: 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20  u8)eAuto;.      
5720: 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56  /* Call SetAutoV
5730: 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69  acuum() to set i
5740: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e  nitialize the in
5750: 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a  ternal auto and.
5760: 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61        ** incr-va
5770: 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73  cuum flags. This
5780: 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
5790: 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63  case this connec
57a0: 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72  tion.      ** cr
57b0: 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61  eates the databa
57c0: 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69  se file. It is i
57d0: 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74  mportant that it
57e0: 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20   is created.    
57f0: 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d    ** as an auto-
5800: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
5810: 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  b..      */.    
5820: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
5830: 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d  reeSetAutoVacuum
5840: 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20  (pBt, eAuto);.  
5850: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
5860: 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d  TE_OK && (eAuto=
5870: 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20  =1 || eAuto==2) 
5880: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ){.        /* Wh
5890: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61  en setting the a
58a0: 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto_vacuum mode 
58b0: 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22  to either "full"
58c0: 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   or .        ** 
58d0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77  "incremental", w
58e0: 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f  rite the value o
58f0: 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65  f meta[6] in the
5900: 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
5910: 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72    ** file. Befor
5920: 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74  e writing to met
5930: 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74  a[6], check that
5940: 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74   meta[3] indicat
5950: 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  es.        ** th
5960: 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69  at this really i
5970: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
5980: 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73   capable databas
5990: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
59a0: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
59b0: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
59c0: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
59d0: 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74  2);.        stat
59e0: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
59f0: 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d  ist setMeta6[] =
5a00: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f   {.          { O
5a10: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
5a20: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
5a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a40: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
5a50: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
5a60: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c  adCookie,     0,
5a70: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5a80: 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53      BTREE_LARGES
5a90: 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20  T_ROOT_PAGE},.  
5aa0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
5ac0: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
5ad0: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5ae0: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
5af0: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
5b00: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
5b10: 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20  OK, OE_Abort,   
5b20: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
5b30: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
5b40: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
5b50: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
5b60: 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1,              
5b70: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a     0},    /* 4 *
5b80: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
5b90: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20  _SetCookie,     
5ba0: 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   0,         BTRE
5bb0: 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31  E_INCR_VACUUM, 1
5bc0: 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20  },    /* 5 */.  
5bd0: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20        };.       
5be0: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20   VdbeOp *aOp;.  
5bf0: 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 20        int iAddr 
5c00: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
5c10: 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20  rentAddr(v);.   
5c20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5c30: 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65  VerifyNoMallocRe
5c40: 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53  quired(v, ArrayS
5c50: 69 7a 65 28 73 65 74 4d 65 74 61 36 29 29 3b 0a  ize(setMeta6));.
5c60: 20 20 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71          aOp = sq
5c70: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
5c80: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
5c90: 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65  setMeta6), setMe
5ca0: 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20  ta6, iLn);.     
5cb0: 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52     if( ONLY_IF_R
5cc0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f  EALLOC_STRESS(aO
5cd0: 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20  p==0) ) break;. 
5ce0: 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31         aOp[0].p1
5cf0: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20   = iDb;.        
5d00: 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b  aOp[1].p1 = iDb;
5d10: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e  .        aOp[2].
5d20: 70 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a 20 20  p2 = iAddr+4;.  
5d30: 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70 31 20        aOp[4].p1 
5d40: 3d 20 65 41 75 74 6f 20 2d 20 31 3b 0a 20 20 20  = eAuto - 1;.   
5d50: 20 20 20 20 20 61 4f 70 5b 35 5d 2e 70 31 20 3d       aOp[5].p1 =
5d60: 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 73 71   iDb;.        sq
5d70: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
5d80: 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20  ee(v, iDb);.    
5d90: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
5da0: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
5db0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
5dc0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e 63 72  MA [schema.]incr
5dd0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e  emental_vacuum(N
5de0: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e  ).  **.  ** Do N
5df0: 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d   steps of increm
5e00: 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20  ental vacuuming 
5e10: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20  on a database.. 
5e20: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
5e30: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
5e40: 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UM.  case PragTy
5e50: 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41  p_INCREMENTAL_VA
5e60: 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20  CUUM: {.    int 
5e70: 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20  iLimit, addr;.  
5e80: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
5e90: 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e  || !sqlite3GetIn
5ea0: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  t32(zRight, &iLi
5eb0: 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d  mit) || iLimit<=
5ec0: 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69  0 ){.      iLimi
5ed0: 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a  t = 0x7fffffff;.
5ee0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
5ef0: 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
5f00: 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20  tion(pParse, 0, 
5f10: 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iDb);.    sqlite
5f20: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
5f30: 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69  P_Integer, iLimi
5f40: 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20  t, 1);.    addr 
5f50: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
5f60: 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61  Op1(v, OP_IncrVa
5f70: 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62 65  cuum, iDb); Vdbe
5f80: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
5f90: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5fa0: 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p1(v, OP_ResultR
5fb0: 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  ow, 1);.    sqli
5fc0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
5fd0: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
5fe0: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
5ff0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
6000: 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b  IfPos, 1, addr);
6010: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
6020: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
6030: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
6040: 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  r);.    break;. 
6050: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64   }.#endif..#ifnd
6060: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
6070: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f  AGER_PRAGMAS.  /
6080: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
6090: 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69  schema.]cache_si
60a0: 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ze.  **  PRAGMA 
60b0: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
60c0: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
60d0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
60e0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
60f0: 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67  nt local setting
6100: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61   for the.  ** pa
6110: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54  ge cache size. T
6120: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
6130: 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20  ets the local.  
6140: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
6150: 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20  ze value.  If N 
6160: 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e  is positive then
6170: 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a   that is the.  *
6180: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
6190: 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20  s in the cache. 
61a0: 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76   If N is negativ
61b0: 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  e, then the.  **
61c0: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
61d0: 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20   is adjusted so 
61e0: 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75  that the cache u
61f0: 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73  ses -N kibibytes
6200: 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e  .  ** of memory.
6210: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
6220: 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a  gTyp_CACHE_SIZE:
6230: 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73   {.    assert( s
6240: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
6250: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
6260: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  ) );.    if( !zR
6270: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
6280: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
6290: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70   "cache_size", p
62a0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
62b0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  he_size);.    }e
62c0: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
62d0: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  ize = sqlite3Ato
62e0: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  i(zRight);.     
62f0: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
6300: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
6310: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
6320: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
6330: 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e  (pDb->pBt, pDb->
6340: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
6350: 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ize);.    }.    
6360: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6370: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
6380: 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 70 69  chema.]cache_spi
6390: 6c 6c 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ll.  **  PRAGMA 
63a0: 63 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c  cache_spill=BOOL
63b0: 45 41 4e 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  EAN.  **  PRAGMA
63c0: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
63d0: 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  spill=N.  **.  *
63e0: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
63f0: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
6400: 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69  rent local setti
6410: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
6420: 70 61 67 65 20 63 61 63 68 65 20 73 70 69 6c 6c  page cache spill
6430: 20 73 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e   size. The secon
6440: 64 20 66 6f 72 6d 20 74 75 72 6e 73 20 63 61 63  d form turns cac
6450: 68 65 20 73 70 69 6c 6c 20 6f 6e 0a 20 20 2a 2a  he spill on.  **
6460: 20 6f 72 20 6f 66 66 2e 20 20 57 68 65 6e 20 74   or off.  When t
6470: 75 72 6e 6e 69 6e 67 20 63 61 63 68 65 20 73 70  urnning cache sp
6480: 69 6c 6c 20 6f 6e 2c 20 74 68 65 20 73 69 7a 65  ill on, the size
6490: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a 20   is set to the. 
64a0: 20 2a 2a 20 63 75 72 72 65 6e 74 20 63 61 63 68   ** current cach
64b0: 65 5f 73 69 7a 65 2e 20 20 54 68 65 20 74 68 69  e_size.  The thi
64c0: 72 64 20 66 6f 72 6d 20 73 65 74 73 20 61 20 73  rd form sets a s
64d0: 70 69 6c 6c 20 73 69 7a 65 20 74 68 61 74 0a 20  pill size that. 
64e0: 20 2a 2a 20 6d 61 79 20 62 65 20 64 69 66 66 65   ** may be diffe
64f0: 72 65 6e 74 20 66 6f 72 6d 20 74 68 65 20 63 61  rent form the ca
6500: 63 68 65 20 73 69 7a 65 2e 0a 20 20 2a 2a 20 49  che size..  ** I
6510: 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20  f N is positive 
6520: 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65  then that is the
6530: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
6540: 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63  pages in the cac
6550: 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  he.  If N is neg
6560: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a  ative, then the.
6570: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
6580: 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64  ages is adjusted
6590: 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63   so that the cac
65a0: 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62  he uses -N kibib
65b0: 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d  ytes.  ** of mem
65c0: 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ory..  **.  ** I
65d0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
65e0: 63 61 63 68 65 5f 73 70 69 6c 6c 20 70 61 67 65  cache_spill page
65f0: 73 20 69 73 20 6c 65 73 73 20 74 68 65 6e 20 74  s is less then t
6600: 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a  he number of.  *
6610: 2a 20 63 61 63 68 65 5f 73 69 7a 65 20 70 61 67  * cache_size pag
6620: 65 73 2c 20 6e 6f 20 73 70 69 6c 6c 69 6e 67 20  es, no spilling 
6630: 6f 63 63 75 72 73 20 75 6e 74 69 6c 20 74 68 65  occurs until the
6640: 20 70 61 67 65 20 63 6f 75 6e 74 20 65 78 63 65   page count exce
6650: 65 64 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  eds.  ** the num
6660: 62 65 72 20 6f 66 20 63 61 63 68 65 5f 73 69 7a  ber of cache_siz
6670: 65 20 70 61 67 65 73 2e 0a 20 20 2a 2a 0a 20 20  e pages..  **.  
6680: 2a 2a 20 54 68 65 20 63 61 63 68 65 5f 73 70 69  ** The cache_spi
6690: 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65 74 74 69  ll=BOOLEAN setti
66a0: 6e 67 20 61 70 70 6c 69 65 73 20 74 6f 20 61 6c  ng applies to al
66b0: 6c 20 61 74 74 61 63 68 65 64 20 73 63 68 65 6d  l attached schem
66c0: 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20 6a 75 73  as,.  ** not jus
66d0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 73 70 65  t the schema spe
66e0: 63 69 66 69 65 64 2e 0a 20 20 2a 2f 0a 20 20 63  cified..  */.  c
66f0: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48  ase PragTyp_CACH
6700: 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20 20 20 61  E_SPILL: {.    a
6710: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
6720: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
6730: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
6740: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
6750: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
6760: 6c 65 49 6e 74 28 76 2c 20 22 63 61 63 68 65 5f  leInt(v, "cache_
6770: 73 70 69 6c 6c 22 2c 20 0a 20 20 20 20 20 20 20  spill", .       
6780: 20 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53    (db->flags & S
6790: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
67a0: 29 3d 3d 30 20 3f 20 30 20 3a 20 0a 20 20 20 20  )==0 ? 0 : .    
67b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
67c0: 74 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65  treeSetSpillSize
67d0: 28 70 44 62 2d 3e 70 42 74 2c 30 29 29 3b 0a 20  (pDb->pBt,0));. 
67e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
67f0: 69 6e 74 20 73 69 7a 65 20 3d 20 31 3b 0a 20 20  int size = 1;.  
6800: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
6810: 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20  etInt32(zRight, 
6820: 26 73 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20  &size) ){.      
6830: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
6840: 74 53 70 69 6c 6c 53 69 7a 65 28 70 44 62 2d 3e  tSpillSize(pDb->
6850: 70 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20  pBt, size);.    
6860: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 73 71    }.      if( sq
6870: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
6880: 7a 52 69 67 68 74 2c 20 73 69 7a 65 21 3d 30 29  zRight, size!=0)
6890: 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
68a0: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
68b0: 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20 20 20  CacheSpill;.    
68c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
68d0: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53   db->flags &= ~S
68e0: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
68f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6900: 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73  setAllPagerFlags
6910: 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  (db);.    }.    
6920: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6930: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
6940: 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73 69 7a 65  chema.]mmap_size
6950: 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73  (N).  **.  ** Us
6960: 65 64 20 74 6f 20 73 65 74 20 6d 61 70 70 69 6e  ed to set mappin
6970: 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68  g size limit. Th
6980: 65 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c  e mapping size l
6990: 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75 73 65  imit is.  ** use
69a0: 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 61  d to limit the a
69b0: 67 67 72 65 67 61 74 65 20 73 69 7a 65 20 6f 66  ggregate size of
69c0: 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70   all memory mapp
69d0: 65 64 20 72 65 67 69 6f 6e 73 20 6f 66 20 74 68  ed regions of th
69e0: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
69f0: 66 69 6c 65 2e 20 49 66 20 74 68 69 73 20 70 61  file. If this pa
6a00: 72 61 6d 65 74 65 72 20 69 73 20 73 65 74 20 74  rameter is set t
6a10: 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d  o zero, then mem
6a20: 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a  ory mapping.  **
6a30: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20   is not used at 
6a40: 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  all.  If N is ne
6a50: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
6a60: 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20   default memory 
6a70: 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64  map.  ** limit d
6a80: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 73 71 6c  etermined by sql
6a90: 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
6aa0: 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53  TE_CONFIG_MMAP_S
6ab0: 49 5a 45 29 20 69 73 20 73 65 74 2e 0a 20 20 2a  IZE) is set..  *
6ac0: 2a 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  * The parameter 
6ad0: 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e  N is measured in
6ae0: 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a   bytes..  **.  *
6af0: 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20  * This value is 
6b00: 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75  advisory.  The u
6b10: 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73  nderlying VFS is
6b20: 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20   free to memory 
6b30: 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74  map.  ** as litt
6b40: 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73  le or as much as
6b50: 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65   it wants.  Exce
6b60: 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20  pt, if N is set 
6b70: 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20  to 0 then the.  
6b80: 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72 73 20  ** upper layers 
6b90: 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b  will never invok
6ba0: 65 20 74 68 65 20 78 46 65 74 63 68 20 69 6e 74  e the xFetch int
6bb0: 65 72 66 61 63 65 73 20 74 6f 20 74 68 65 20 56  erfaces to the V
6bc0: 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  FS..  */.  case 
6bd0: 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a  PragTyp_MMAP_SIZ
6be0: 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  E: {.    sqlite3
6bf0: 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66 20 53  _int64 sz;.#if S
6c00: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6c10: 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65 72 74  IZE>0.    assert
6c20: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
6c30: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
6c40: 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
6c50: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6c60: 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 73 71  int ii;.      sq
6c70: 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
6c80: 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a 29 3b  64(zRight, &sz);
6c90: 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20  .      if( sz<0 
6ca0: 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c  ) sz = sqlite3Gl
6cb0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61  obalConfig.szMma
6cc0: 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  p;.      if( pId
6cd0: 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a  2->n==0 ) db->sz
6ce0: 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20  Mmap = sz;.     
6cf0: 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d   for(ii=db->nDb-
6d00: 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b  1; ii>=0; ii--){
6d10: 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
6d20: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20  >aDb[ii].pBt && 
6d30: 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32  (ii==iDb || pId2
6d40: 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20  ->n==0) ){.     
6d50: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
6d60: 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62  eSetMmapLimit(db
6d70: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73  ->aDb[ii].pBt, s
6d80: 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  z);.        }.  
6d90: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
6da0: 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20  sz = -1;.    rc 
6db0: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  = sqlite3_file_c
6dc0: 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20  ontrol(db, zDb, 
6dd0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41  SQLITE_FCNTL_MMA
6de0: 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65  P_SIZE, &sz);.#e
6df0: 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a  lse.    sz = 0;.
6e00: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
6e10: 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  OK;.#endif.    i
6e20: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
6e30: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
6e40: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6d 6d  SingleInt(v, "mm
6e50: 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20  ap_size", sz);. 
6e60: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21     }else if( rc!
6e70: 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44  =SQLITE_NOTFOUND
6e80: 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65   ){.      pParse
6e90: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20  ->nErr++;.      
6ea0: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b  pParse->rc = rc;
6eb0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
6ec0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
6ed0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6ee0: 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47  tore.  **   PRAG
6ef0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
6f00: 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72  "default"|"memor
6f10: 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20  y"|"file".  **. 
6f20: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
6f30: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
6f40: 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74  e of the temp_st
6f50: 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ore flag.  Chang
6f60: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
6f70: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
6f80: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
6f90: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
6fa0: 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a  and the default.
6fb0: 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20    ** value will 
6fc0: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
6fd0: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
6fe0: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64  tabase is opened
6ff0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65  ..  **.  ** Note
7000: 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73   that it is poss
7010: 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62  ible for the lib
7020: 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  rary compile-tim
7030: 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a  e options to.  *
7040: 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  * override this 
7050: 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63  setting.  */.  c
7060: 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50  ase PragTyp_TEMP
7070: 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66  _STORE: {.    if
7080: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
7090: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
70a0: 6e 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72  nt(v, "temp_stor
70b0: 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  e", db->temp_sto
70c0: 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  re);.    }else{.
70d0: 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70        changeTemp
70e0: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20  Storage(pParse, 
70f0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20  zRight);.    }. 
7100: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
7110: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
7120: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
7130: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
7140: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
7150: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
7160: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
7170: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
7180: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
7190: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
71a0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
71b0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
71c0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
71d0: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
71e0: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
71f0: 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  be used for temp
7200: 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a  orary files..  *
7210: 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e  * Setting to a n
7220: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
7230: 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ts to the defaul
7240: 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  t temporary dire
7250: 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20  ctory search..  
7260: 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20  ** If temporary 
7270: 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61  directory is cha
7280: 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c  nged, then inval
7290: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
72a0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
72b0: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
72c0: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
72d0: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
72e0: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
72f0: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
7300: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
7310: 63 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f  ctory", sqlite3_
7320: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b  temp_directory);
7330: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e  .    }else{.#ifn
7340: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7350: 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52  WSD.      if( zR
7360: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7370: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
7380: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
7390: 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66  OsAccess(db->pVf
73a0: 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54  s, zRight, SQLIT
73b0: 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49  E_ACCESS_READWRI
73c0: 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  TE, &res);.     
73d0: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
73e0: 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
73f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
7400: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
7410: 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61  se, "not a writa
7420: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b  ble directory");
7430: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
7440: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
7450: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
7460: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54      if( SQLITE_T
7470: 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20  EMP_STORE==0.   
7480: 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54      || (SQLITE_T
7490: 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20  EMP_STORE==1 && 
74a0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d  db->temp_store<=
74b0: 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51  1).       || (SQ
74c0: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
74d0: 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73  =2 && db->temp_s
74e0: 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29  tore==1).      )
74f0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69  {.        invali
7500: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28  dateTempStorage(
7510: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d  pParse);.      }
7520: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7530: 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70  ree(sqlite3_temp
7540: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
7550: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7560: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
7570: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
7580: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
7590: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
75a0: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
75b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
75c0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
75d0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
75e0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
75f0: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
7600: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
7610: 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49  #if SQLITE_OS_WI
7620: 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  N.  /*.  **   PR
7630: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
7640: 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20  directory.  **  
7650: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
7660: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
7670: 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d  "|"directory_nam
7680: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
7690: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
76a0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
76b0: 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  e data_store_dir
76c0: 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68  ectory flag.  Ch
76d0: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
76e0: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
76f0: 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20  cific directory 
7700: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64  to be used for d
7710: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68  atabase files th
7720: 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65  at.  ** were spe
7730: 63 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65  cified with a re
7740: 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e  lative pathname.
7750: 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e    Setting to a n
7760: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
7770: 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64  ts.  ** to the d
7780: 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20  efault database 
7790: 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68  directory, which
77a0: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69   for database fi
77b0: 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69  les specified wi
77c0: 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69  th.  ** a relati
77d0: 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f  ve path will pro
77e0: 62 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f  bably be based o
77f0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69  n the current di
7800: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a  rectory for the.
7810: 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44    ** process.  D
7820: 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65  atabase file spe
7830: 63 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61  cified with an a
7840: 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65  bsolute path are
7850: 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20   not impacted.  
7860: 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69  ** by this setti
7870: 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ng, regardless o
7880: 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a  f its value..  *
7890: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
78a0: 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45  agTyp_DATA_STORE
78b0: 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20  _DIRECTORY: {.  
78c0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
78d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
78e0: 67 6c 65 54 65 78 74 28 76 2c 20 22 64 61 74 61  gleText(v, "data
78f0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7900: 22 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  ", sqlite3_data_
7910: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
7920: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
7930: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
7940: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
7950: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
7960: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
7970: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
7980: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
7990: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
79a0: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
79b0: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
79c0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
79d0: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
79e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
79f0: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
7a00: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
7a10: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
7a20: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
7a30: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
7a40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
7a50: 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69  qlite3_free(sqli
7a60: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
7a70: 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ry);.      if( z
7a80: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
7a90: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
7aa0: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c  _directory = sql
7ab0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
7ac0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
7ad0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
7ae0: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
7af0: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
7b00: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
7b10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a  QLITE_OMIT_WSD *
7b20: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  /.    }.    brea
7b30: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
7b40: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
7b50: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
7b60: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
7b70: 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f  A [schema.]lock_
7b80: 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20  proxy_file.  ** 
7b90: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
7ba0: 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  .]lock_proxy_fil
7bb0: 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f  e = ":auto:"|"lo
7bc0: 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20  ck_file_path".  
7bd0: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
7be0: 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  r set the value 
7bf0: 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78  of the lock_prox
7c00: 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68  y_file flag.  Ch
7c10: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
7c20: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
7c30: 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65  cific file to be
7c40: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
7c50: 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e  se access locks.
7c60: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
7c70: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
7c80: 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20  ROXY_FILE: {.   
7c90: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7ca0: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
7cb0: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
7cc0: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
7cd0: 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70  );.      char *p
7ce0: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d  roxy_file_path =
7cf0: 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c   NULL;.      sql
7d00: 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65  ite3_file *pFile
7d10: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
7d20: 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20  ile(pPager);.   
7d30: 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65     sqlite3OsFile
7d40: 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c  ControlHint(pFil
7d50: 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f  e, SQLITE_GET_LO
7d60: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d80: 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f           &proxy_
7d90: 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20  file_path);.    
7da0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65    returnSingleTe
7db0: 78 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72 6f 78  xt(v, "lock_prox
7dc0: 79 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79 5f 66  y_file", proxy_f
7dd0: 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 7d  ile_path);.    }
7de0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65  else{.      Page
7df0: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
7e00: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
7e10: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73  b->pBt);.      s
7e20: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69  qlite3_file *pFi
7e30: 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  le = sqlite3Page
7e40: 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20  rFile(pPager);. 
7e50: 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20       int res;.  
7e60: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
7e70: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73  ] ){.        res
7e80: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
7e90: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
7ea0: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
7eb0: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69               zRi
7ee0: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c  ght);.      } el
7ef0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73  se {.        res
7f00: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
7f10: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
7f20: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
7f30: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c               NUL
7f60: 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  L);.      }.    
7f70: 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54    if( res!=SQLIT
7f80: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
7f90: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
7fa0: 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20  pParse, "failed 
7fb0: 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78  to set lock prox
7fc0: 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20  y file");.      
7fd0: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
7fe0: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
7ff0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8000: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
8010: 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f  _ENABLE_LOCKING_
8020: 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20  STYLE */      . 
8030: 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20     .  /*.  **   
8040: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
8050: 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a  synchronous.  **
8060: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
8070: 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  a.]synchronous=O
8080: 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c  FF|ON|NORMAL|FUL
8090: 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  L.  **.  ** Retu
80a0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
80b0: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
80c0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61   synchronous fla
80d0: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
80e0: 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  * the local valu
80f0: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20  e does not make 
8100: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
8110: 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65  isk file and the
8120: 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76 61  .  ** default va
8130: 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74  lue will be rest
8140: 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69  ored the next ti
8150: 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  me the database 
8160: 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a  is.  ** opened..
8170: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
8180: 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a  Typ_SYNCHRONOUS:
8190: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
81a0: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
81b0: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
81c0: 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 20 0a 20  synchronous", . 
81d0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
81e0: 45 5f 44 62 53 61 66 65 74 79 4c 65 76 65 6c 56  E_DbSafetyLevelV
81f0: 61 6c 75 65 28 70 44 62 2d 3e 73 61 66 65 74 79  alue(pDb->safety
8200: 5f 6c 65 76 65 6c 29 2d 31 29 3b 0a 20 20 20 20  _level)-1);.    
8210: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
8220: 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
8230: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
8240: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
8250: 73 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  se, .           
8260: 20 22 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d   "Safety level m
8270: 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65  ay not be change
8280: 64 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73  d inside a trans
8290: 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20  action");.      
82a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
82b0: 6e 74 20 69 4c 65 76 65 6c 20 3d 20 28 67 65 74  nt iLevel = (get
82c0: 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67  SafetyLevel(zRig
82d0: 68 74 2c 30 2c 31 29 2b 31 29 0a 20 20 20 20 20  ht,0,1)+1).     
82e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8300: 20 7c 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59   | SQLITE_SAFETY
8310: 4c 45 56 45 4c 5f 46 49 58 45 44 3b 0a 20 20 20  LEVEL_FIXED;.   
8320: 20 20 20 20 20 69 4c 65 76 65 6c 20 26 3d 20 50       iLevel &= P
8330: 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AGER_SYNCHRONOUS
8340: 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20 20 69  _MASK;.        i
8350: 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20 69  f( iLevel==0 ) i
8360: 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20 20  Level = 1;.     
8370: 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c     pDb->safety_l
8380: 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a 20  evel = iLevel;. 
8390: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67         setAllPag
83a0: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
83b0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
83c0: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
83d0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
83e0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
83f0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8400: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
8410: 41 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  AS.  case PragTy
8420: 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66  p_FLAG: {.    if
8430: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
8440: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
8450: 65 49 6e 74 28 76 2c 20 70 50 72 61 67 6d 61 2d  eInt(v, pPragma-
8460: 3e 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e 66 6c 61  >zName, (db->fla
8470: 67 73 20 26 20 70 50 72 61 67 6d 61 2d 3e 69 41  gs & pPragma->iA
8480: 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d 65  rg)!=0 );.    }e
8490: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d  lse{.      int m
84a0: 61 73 6b 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69  ask = pPragma->i
84b0: 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73 6b 20  Arg;    /* Mask 
84c0: 6f 66 20 62 69 74 73 20 74 6f 20 73 65 74 20 6f  of bits to set o
84d0: 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20 20  r clear. */.    
84e0: 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
84f0: 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  mmit==0 ){.     
8500: 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20 6b 65     /* Foreign ke
8510: 79 20 73 75 70 70 6f 72 74 20 6d 61 79 20 6e 6f  y support may no
8520: 74 20 62 65 20 65 6e 61 62 6c 65 64 20 6f 72 20  t be enabled or 
8530: 64 69 73 61 62 6c 65 64 20 77 68 69 6c 65 20 6e  disabled while n
8540: 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e  ot.        ** in
8550: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64   auto-commit mod
8560: 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  e.  */.        m
8570: 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f  ask &= ~(SQLITE_
8580: 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20 20  ForeignKeys);.  
8590: 20 20 20 20 7d 0a 23 69 66 20 53 51 4c 49 54 45      }.#if SQLITE
85a0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
85b0: 54 49 4f 4e 0a 20 20 20 20 20 20 69 66 28 20 64  TION.      if( d
85c0: 62 2d 3e 61 75 74 68 2e 61 75 74 68 4c 65 76 65  b->auth.authLeve
85d0: 6c 3d 3d 55 41 55 54 48 5f 55 73 65 72 20 29 7b  l==UAUTH_User ){
85e0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e  .        /* Do n
85f0: 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d  ot allow non-adm
8600: 69 6e 20 75 73 65 72 73 20 74 6f 20 6d 6f 64 69  in users to modi
8610: 66 79 20 74 68 65 20 73 63 68 65 6d 61 20 61 72  fy the schema ar
8620: 62 69 74 72 61 72 69 6c 79 20 2a 2f 0a 20 20 20  bitrarily */.   
8630: 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53       mask &= ~(S
8640: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
8650: 61 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64  a);.      }.#end
8660: 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20 73 71  if..      if( sq
8670: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
8680: 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20  zRight, 0) ){.  
8690: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
86a0: 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d  |= mask;.      }
86b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62  else{.        db
86c0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b  ->flags &= ~mask
86d0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6d 61  ;.        if( ma
86e0: 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65 72  sk==SQLITE_Defer
86f0: 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65 66 65 72  FKs ) db->nDefer
8700: 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a  redImmCons = 0;.
8710: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
8720: 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65 20 66 6c  * Many of the fl
8730: 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69 66  ag-pragmas modif
8740: 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  y the code gener
8750: 61 74 65 64 20 62 79 20 74 68 65 20 53 51 4c 20  ated by the SQL 
8760: 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c  .      ** compil
8770: 65 72 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68  er (eg. count_ch
8780: 61 6e 67 65 73 29 2e 20 53 6f 20 61 64 64 20 61  anges). So add a
8790: 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65 78 70 69  n opcode to expi
87a0: 72 65 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20  re all.      ** 
87b0: 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61  compiled SQL sta
87c0: 74 65 6d 65 6e 74 73 20 61 66 74 65 72 20 6d 6f  tements after mo
87d0: 64 69 66 79 69 6e 67 20 61 20 70 72 61 67 6d 61  difying a pragma
87e0: 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f   value..      */
87f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8800: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45  beAddOp2(v, OP_E
8810: 78 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20  xpire, 0, 0);.  
8820: 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46      setAllPagerF
8830: 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a  lags(db);.    }.
8840: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
8850: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
8860: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
8870: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
8880: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
8890: 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
88a0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c  **   PRAGMA tabl
88b0: 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a  e_info(<table>).
88c0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
88d0: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f   a single row fo
88e0: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  r each column of
88f0: 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65   the named table
8900: 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  . The columns of
8910: 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75 72 6e  .  ** the return
8920: 65 64 20 64 61 74 61 20 73 65 74 20 61 72 65 3a  ed data set are:
8930: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20  .  **.  ** cid: 
8940: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64         Column id
8950: 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20   (numbered from 
8960: 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c 20 73  left to right, s
8970: 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a 20 20  tarting at 0).  
8980: 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20 20 43  ** name:       C
8990: 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20  olumn name.  ** 
89a0: 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f 6c 75  type:       Colu
89b0: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  mn declaration t
89c0: 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c  ype..  ** notnul
89d0: 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20 27 4e  l:    True if 'N
89e0: 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61 72 74  OT NULL' is part
89f0: 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61   of column decla
8a00: 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74  ration.  ** dflt
8a10: 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65 66 61  _value: The defa
8a20: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ult value for th
8a30: 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79  e column, if any
8a40: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
8a50: 61 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f  agTyp_TABLE_INFO
8a60: 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
8a70: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
8a80: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
8a90: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
8aa0: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
8ab0: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
8ac0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
8ad0: 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20  t char *azCol[] 
8ae0: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 22 63 69  = {.         "ci
8af0: 64 22 2c 20 22 6e 61 6d 65 22 2c 20 22 74 79 70  d", "name", "typ
8b00: 65 22 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 22  e", "notnull", "
8b10: 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20 22 70 6b  dflt_value", "pk
8b20: 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  ".      };.     
8b30: 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20 20   int i, k;.     
8b40: 20 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20 30   int nHidden = 0
8b50: 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a  ;.      Column *
8b60: 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64 65  pCol;.      Inde
8b70: 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74 65 33  x *pPk = sqlite3
8b80: 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
8b90: 70 54 61 62 29 3b 0a 20 20 20 20 20 20 70 50 61  pTab);.      pPa
8ba0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
8bb0: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
8bc0: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
8bd0: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
8be0: 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d   setAllColumnNam
8bf0: 65 73 28 76 2c 20 36 2c 20 61 7a 43 6f 6c 29 3b  es(v, 6, azCol);
8c00: 20 61 73 73 65 72 74 28 20 36 3d 3d 41 72 72 61   assert( 6==Arra
8c10: 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a  ySize(azCol) );.
8c20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 69 65        sqlite3Vie
8c30: 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
8c40: 70 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a 20  pParse, pTab);. 
8c50: 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 70 43       for(i=0, pC
8c60: 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69  ol=pTab->aCol; i
8c70: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b  <pTab->nCol; i++
8c80: 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20  , pCol++){.     
8c90: 20 20 20 69 66 28 20 49 73 48 69 64 64 65 6e 43     if( IsHiddenC
8ca0: 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20  olumn(pCol) ){. 
8cb0: 20 20 20 20 20 20 20 20 20 6e 48 69 64 64 65 6e           nHidden
8cc0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f  ++;.          co
8cd0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
8ce0: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70  }.        if( (p
8cf0: 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  Col->colFlags & 
8d00: 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29  COLFLAG_PRIMKEY)
8d10: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
8d20: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   k = 0;.        
8d30: 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d 30  }else if( pPk==0
8d40: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20   ){.          k 
8d50: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
8d60: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  se{.          fo
8d70: 72 28 6b 3d 31 3b 20 6b 3c 3d 70 54 61 62 2d 3e  r(k=1; k<=pTab->
8d80: 6e 43 6f 6c 20 26 26 20 70 50 6b 2d 3e 61 69 43  nCol && pPk->aiC
8d90: 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b  olumn[k-1]!=i; k
8da0: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a  ++){}.        }.
8db0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8dc0: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
8dd0: 31 2c 20 22 69 73 73 69 73 69 22 2c 0a 20 20 20  1, "issisi",.   
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 69 2d 6e 48              i-nH
8df0: 69 64 64 65 6e 2c 0a 20 20 20 20 20 20 20 20 20  idden,.         
8e00: 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 4e 61 6d        pCol->zNam
8e10: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
8e20: 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20    pCol->zType ? 
8e30: 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22  pCol->zType : ""
8e40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8e50: 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f   pCol->notNull ?
8e60: 20 31 20 3a 20 30 2c 0a 20 20 20 20 20 20 20 20   1 : 0,.        
8e70: 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 44 66         pCol->zDf
8e80: 6c 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  lt,.            
8e90: 20 20 20 6b 29 3b 0a 20 20 20 20 20 20 20 20 73     k);.        s
8ea0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
8eb0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
8ec0: 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d  , 1, 6);.      }
8ed0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
8ee0: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
8ef0: 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20  Typ_STATS: {.   
8f00: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8f10: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20  ar *azCol[] = { 
8f20: 22 74 61 62 6c 65 22 2c 20 22 69 6e 64 65 78 22  "table", "index"
8f30: 2c 20 22 77 69 64 74 68 22 2c 20 22 68 65 69 67  , "width", "heig
8f40: 68 74 22 20 7d 3b 0a 20 20 20 20 49 6e 64 65 78  ht" };.    Index
8f50: 20 2a 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68   *pIdx;.    Hash
8f60: 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d  Elem *i;.    v =
8f70: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
8f80: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 70 50 61  pParse);.    pPa
8f90: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20  rse->nMem = 4;. 
8fa0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
8fb0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
8fc0: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 65 74  e, iDb);.    set
8fd0: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
8fe0: 2c 20 34 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73  , 4, azCol);  as
8ff0: 73 65 72 74 28 20 34 3d 3d 41 72 72 61 79 53 69  sert( 4==ArraySi
9000: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
9010: 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73   for(i=sqliteHas
9020: 68 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63  hFirst(&pDb->pSc
9030: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20  hema->tblHash); 
9040: 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e  i; i=sqliteHashN
9050: 65 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54  ext(i)){.      T
9060: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
9070: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a  iteHashData(i);.
9080: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9090: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
90a0: 20 22 73 73 69 69 22 2c 0a 20 20 20 20 20 20 20   "ssii",.       
90b0: 20 20 20 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c      pTab->zName,
90c0: 0a 20 20 20 20 20 20 20 20 20 20 20 30 2c 0a 20  .           0,. 
90d0: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
90e0: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
90f0: 74 28 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f 77  t(pTab->szTabRow
9100: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 69  ),.           (i
9110: 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  nt)sqlite3LogEst
9120: 54 6f 49 6e 74 28 70 54 61 62 2d 3e 6e 52 6f 77  ToInt(pTab->nRow
9130: 4c 6f 67 45 73 74 29 29 3b 0a 20 20 20 20 20 20  LogEst));.      
9140: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9150: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
9160: 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20  w, 1, 4);.      
9170: 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70  for(pIdx=pTab->p
9180: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
9190: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a  x=pIdx->pNext){.
91a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
91b0: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
91c0: 32 2c 20 22 73 69 69 22 2c 0a 20 20 20 20 20 20  2, "sii",.      
91d0: 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65       pIdx->zName
91e0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 6e  ,.           (in
91f0: 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  t)sqlite3LogEstT
9200: 6f 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64 78  oInt(pIdx->szIdx
9210: 52 6f 77 29 2c 0a 20 20 20 20 20 20 20 20 20 20  Row),.          
9220: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
9230: 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 61  EstToInt(pIdx->a
9240: 69 52 6f 77 4c 6f 67 45 73 74 5b 30 5d 29 29 3b  iRowLogEst[0]));
9250: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9260: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9270: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34  _ResultRow, 1, 4
9280: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
9290: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
92a0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e   case PragTyp_IN
92b0: 44 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52  DEX_INFO: if( zR
92c0: 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65  ight ){.    Inde
92d0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62  x *pIdx;.    Tab
92e0: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49  le *pTab;.    pI
92f0: 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  dx = sqlite3Find
9300: 49 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74  Index(db, zRight
9310: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
9320: 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20 73 74  pIdx ){.      st
9330: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
9340: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20  *azCol[] = {.   
9350: 20 20 20 20 20 20 22 73 65 71 6e 6f 22 2c 20 22        "seqno", "
9360: 63 69 64 22 2c 20 22 6e 61 6d 65 22 2c 20 22 64  cid", "name", "d
9370: 65 73 63 22 2c 20 22 63 6f 6c 6c 22 2c 20 22 6b  esc", "coll", "k
9380: 65 79 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20  ey".      };.   
9390: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
93a0: 69 6e 74 20 6d 78 3b 0a 20 20 20 20 20 20 69 66  int mx;.      if
93b0: 28 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20  ( pPragma->iArg 
93c0: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 50 52  ){.        /* PR
93d0: 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f  AGMA index_xinfo
93e0: 20 28 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 20   (newer version 
93f0: 77 69 74 68 20 6d 6f 72 65 20 72 6f 77 73 20 61  with more rows a
9400: 6e 64 20 63 6f 6c 75 6d 6e 73 29 20 2a 2f 0a 20  nd columns) */. 
9410: 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78         mx = pIdx
9420: 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20  ->nColumn;.     
9430: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
9440: 3d 20 36 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 6;.      }else
9450: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41  {.        /* PRA
9460: 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20 28  GMA index_info (
9470: 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 29 20  legacy version) 
9480: 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20  */.        mx = 
9490: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a 20  pIdx->nKeyCol;. 
94a0: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e         pParse->n
94b0: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d  Mem = 3;.      }
94c0: 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 70 49  .      pTab = pI
94d0: 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20  dx->pTable;.    
94e0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
94f0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
9500: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 61 73  , iDb);.      as
9510: 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 4d  sert( pParse->nM
9520: 65 6d 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a  em<=ArraySize(az
9530: 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 73 65  Col) );.      se
9540: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
9550: 76 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  v, pParse->nMem,
9560: 20 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20 66   azCol);.      f
9570: 6f 72 28 69 3d 30 3b 20 69 3c 6d 78 3b 20 69 2b  or(i=0; i<mx; i+
9580: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20  +){.        i16 
9590: 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43  cnum = pIdx->aiC
95a0: 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20  olumn[i];.      
95b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
95c0: 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 69  tiLoad(v, 1, "ii
95d0: 73 22 2c 20 69 2c 20 63 6e 75 6d 2c 0a 20 20 20  s", i, cnum,.   
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95f0: 20 20 20 20 20 20 20 20 20 20 63 6e 75 6d 3c 30            cnum<0
9600: 20 3f 20 30 20 3a 20 70 54 61 62 2d 3e 61 43 6f   ? 0 : pTab->aCo
9610: 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 29 3b 0a  l[cnum].zName);.
9620: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 72 61          if( pPra
9630: 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20  gma->iArg ){.   
9640: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9650: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 34  beMultiLoad(v, 4
9660: 2c 20 22 69 73 69 22 2c 0a 20 20 20 20 20 20 20  , "isi",.       
9670: 20 20 20 20 20 70 49 64 78 2d 3e 61 53 6f 72 74       pIdx->aSort
9680: 4f 72 64 65 72 5b 69 5d 2c 0a 20 20 20 20 20 20  Order[i],.      
9690: 20 20 20 20 20 20 70 49 64 78 2d 3e 61 7a 43 6f        pIdx->azCo
96a0: 6c 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20  ll[i],.         
96b0: 20 20 20 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43     i<pIdx->nKeyC
96c0: 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ol);.        }. 
96d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
96e0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
96f0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 70 50 61  esultRow, 1, pPa
9700: 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20  rse->nMem);.    
9710: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
9720: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
9730: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53  ragTyp_INDEX_LIS
9740: 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  T: if( zRight ){
9750: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
9760: 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  ;.    Table *pTa
9770: 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  b;.    int i;.  
9780: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
9790: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
97a0: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
97b0: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
97c0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
97d0: 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b  har *azCol[] = {
97e0: 0a 20 20 20 20 20 20 20 20 22 73 65 71 22 2c 20  .        "seq", 
97f0: 22 6e 61 6d 65 22 2c 20 22 75 6e 69 71 75 65 22  "name", "unique"
9800: 2c 20 22 6f 72 69 67 69 6e 22 2c 20 22 70 61 72  , "origin", "par
9810: 74 69 61 6c 22 0a 20 20 20 20 20 20 7d 3b 0a 20  tial".      };. 
9820: 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
9830: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
9840: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
9850: 4d 65 6d 20 3d 20 35 3b 0a 20 20 20 20 20 20 73  Mem = 5;.      s
9860: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
9870: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
9880: 44 62 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c  Db);.      setAl
9890: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
98a0: 35 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65  5, azCol);  asse
98b0: 72 74 28 20 35 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 5==ArraySize
98c0: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20  (azCol) );.     
98d0: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
98e0: 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64  pIndex, i=0; pId
98f0: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
9900: 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ext, i++){.     
9910: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61     const char *a
9920: 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22 63  zOrigin[] = { "c
9930: 22 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b 0a  ", "u", "pk" };.
9940: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9950: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
9960: 31 2c 20 22 69 73 69 73 69 22 2c 0a 20 20 20 20  1, "isisi",.    
9970: 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20         i,.      
9980: 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65       pIdx->zName
9990: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 49 73 55  ,.           IsU
99a0: 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29  niqueIndex(pIdx)
99b0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 61 7a 4f  ,.           azO
99c0: 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78 54  rigin[pIdx->idxT
99d0: 79 70 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  ype],.          
99e0: 20 70 49 64 78 2d 3e 70 50 61 72 74 49 64 78 57   pIdx->pPartIdxW
99f0: 68 65 72 65 21 3d 30 29 3b 0a 20 20 20 20 20 20  here!=0);.      
9a00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9a10: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9a20: 52 6f 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20 20  Row, 1, 5);.    
9a30: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
9a40: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
9a50: 72 61 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f  ragTyp_DATABASE_
9a60: 4c 49 53 54 3a 20 7b 0a 20 20 20 20 73 74 61 74  LIST: {.    stat
9a70: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
9a80: 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65 71 22  zCol[] = { "seq"
9a90: 2c 20 22 6e 61 6d 65 22 2c 20 22 66 69 6c 65 22  , "name", "file"
9aa0: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   };.    int i;. 
9ab0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
9ac0: 3d 20 33 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43  = 3;.    setAllC
9ad0: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 33 2c  olumnNames(v, 3,
9ae0: 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28   azCol); assert(
9af0: 20 33 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a   3==ArraySize(az
9b00: 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28  Col) );.    for(
9b10: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
9b20: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
9b30: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d  db->aDb[i].pBt==
9b40: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
9b50: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
9b60: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20  aDb[i].zName!=0 
9b70: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9b80: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
9b90: 20 31 2c 20 22 69 73 73 22 2c 0a 20 20 20 20 20   1, "iss",.     
9ba0: 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20      i,.         
9bb0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
9bc0: 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  ,.         sqlit
9bd0: 65 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61  e3BtreeGetFilena
9be0: 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  me(db->aDb[i].pB
9bf0: 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  t));.      sqlit
9c00: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
9c10: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
9c20: 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   3);.    }.  }. 
9c30: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
9c40: 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f  PragTyp_COLLATIO
9c50: 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 73 74  N_LIST: {.    st
9c60: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
9c70: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65  *azCol[] = { "se
9c80: 71 22 2c 20 22 6e 61 6d 65 22 20 7d 3b 0a 20 20  q", "name" };.  
9c90: 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20    int i = 0;.   
9ca0: 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20   HashElem *p;.  
9cb0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9cc0: 20 32 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f   2;.    setAllCo
9cd0: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 32 2c 20  lumnNames(v, 2, 
9ce0: 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20  azCol); assert( 
9cf0: 32 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  2==ArraySize(azC
9d00: 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 70  ol) );.    for(p
9d10: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
9d20: 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b  (&db->aCollSeq);
9d30: 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68   p; p=sqliteHash
9d40: 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20  Next(p)){.      
9d50: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d  CollSeq *pColl =
9d60: 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69   (CollSeq *)sqli
9d70: 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20  teHashData(p);. 
9d80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9d90: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
9da0: 22 69 73 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c 6c  "is", i++, pColl
9db0: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
9dc0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9dd0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
9de0: 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
9df0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
9e00: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
9e10: 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41  IT_SCHEMA_PRAGMA
9e20: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
9e30: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
9e40: 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72 61  N_KEY.  case Pra
9e50: 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  gTyp_FOREIGN_KEY
9e60: 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68  _LIST: if( zRigh
9e70: 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70  t ){.    FKey *p
9e80: 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  FK;.    Table *p
9e90: 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  Tab;.    pTab = 
9ea0: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
9eb0: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
9ec0: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
9ed0: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
9ee0: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
9ef0: 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d  se);.      pFK =
9f00: 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20   pTab->pFKey;.  
9f10: 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20      if( pFK ){. 
9f20: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
9f30: 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b  nst char *azCol[
9f40: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ] = {.          
9f50: 20 22 69 64 22 2c 20 22 73 65 71 22 2c 20 22 74   "id", "seq", "t
9f60: 61 62 6c 65 22 2c 20 22 66 72 6f 6d 22 2c 20 22  able", "from", "
9f70: 74 6f 22 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22  to", "on_update"
9f80: 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 0a 20  , "on_delete",. 
9f90: 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68            "match
9fa0: 22 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20  ".        };.   
9fb0: 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20       int i = 0; 
9fc0: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
9fd0: 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20  >nMem = 8;.     
9fe0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
9ff0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
a000: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20  e, iDb);.       
a010: 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d   setAllColumnNam
a020: 65 73 28 76 2c 20 38 2c 20 61 7a 43 6f 6c 29 3b  es(v, 8, azCol);
a030: 20 61 73 73 65 72 74 28 20 38 3d 3d 41 72 72 61   assert( 8==Arra
a040: 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a  ySize(azCol) );.
a050: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 46          while(pF
a060: 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  K){.          in
a070: 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66  t j;.          f
a080: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e  or(j=0; j<pFK->n
a090: 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  Col; j++){.     
a0a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a0b0: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
a0c0: 2c 20 22 69 69 73 73 73 73 73 73 22 2c 0a 20 20  , "iissssss",.  
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0e0: 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   i,.            
a0f0: 20 20 20 20 20 20 20 6a 2c 0a 20 20 20 20 20 20         j,.      
a100: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b               pFK
a110: 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20 20 20 20 20  ->zTo,.         
a120: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
a130: 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  aCol[pFK->aCol[j
a140: 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 0a  ].iFrom].zName,.
a150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a160: 20 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e     pFK->aCol[j].
a170: 7a 43 6f 6c 2c 0a 20 20 20 20 20 20 20 20 20 20  zCol,.          
a180: 20 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e 4e           actionN
a190: 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e  ame(pFK->aAction
a1a0: 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20 55 50 44  [1]),  /* ON UPD
a1b0: 41 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ATE */.         
a1c0: 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e            action
a1d0: 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f  Name(pFK->aActio
a1e0: 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e 20 44 45  n[0]),  /* ON DE
a1f0: 4c 45 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20  LETE */.        
a200: 20 20 20 20 20 20 20 20 20 20 20 22 4e 4f 4e 45             "NONE
a210: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
a220: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a230: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
a240: 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20  w, 1, 8);.      
a250: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
a260: 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70  ++i;.          p
a270: 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46  FK = pFK->pNextF
a280: 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  rom;.        }. 
a290: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
a2a0: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
a2b0: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
a2c0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
a2d0: 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65  _KEY) */..#ifnde
a2e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
a2f0: 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65  REIGN_KEY.#ifnde
a300: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
a310: 49 47 47 45 52 0a 20 20 63 61 73 65 20 50 72 61  IGGER.  case Pra
a320: 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  gTyp_FOREIGN_KEY
a330: 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b  _CHECK: {.    FK
a340: 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20  ey *pFK;        
a350: 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67       /* A foreig
a360: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
a370: 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
a380: 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
a390: 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f  * Child table co
a3a0: 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45  ntain "REFERENCE
a3b0: 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20  S" keyword */.  
a3c0: 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74    Table *pParent
a3d0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65  ;        /* Pare
a3e0: 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20 63 68  nt table that ch
a3f0: 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f  ild points to */
a400: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
a410: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
a420: 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61 72 65  ndex in the pare
a430: 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  nt table */.    
a440: 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
a450: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
a460: 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e  ounter:  Foreign
a470: 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20   key number for 
a480: 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  pTab */.    int 
a490: 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  j;              
a4a0: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
a4b0: 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68  er:  Field of th
a4c0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f  e foreign key */
a4d0: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b  .    HashElem *k
a4e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
a4f0: 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65  oop counter:  Ne
a500: 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65  xt table in sche
a510: 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b  ma */.    int x;
a520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a530: 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61   /* result varia
a540: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ble */.    int r
a550: 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20  egResult;       
a560: 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73    /* 3 registers
a570: 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c   to hold a resul
a580: 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74  t row */.    int
a590: 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20   regKey;        
a5a0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
a5b0: 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20  to hold key for 
a5c0: 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20  checking the FK 
a5d0: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f  */.    int regRo
a5e0: 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  w;            /*
a5f0: 20 52 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   Registers to ho
a600: 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54  ld a row from pT
a610: 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  ab */.    int ad
a620: 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20  drTop;          
a630: 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f   /* Top of a loo
a640: 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69  p checking forei
a650: 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69  gn keys */.    i
a660: 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20  nt addrOk;      
a670: 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
a680: 72 65 20 69 66 20 74 68 65 20 6b 65 79 20 69 73  re if the key is
a690: 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a   OK */.    int *
a6a0: 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  aiCols;         
a6b0: 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61    /* child to pa
a6c0: 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70  rent column mapp
a6d0: 69 6e 67 20 2a 2f 0a 20 20 20 20 73 74 61 74 69  ing */.    stati
a6e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
a6f0: 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65  Col[] = { "table
a700: 22 2c 20 22 72 6f 77 69 64 22 2c 20 22 70 61 72  ", "rowid", "par
a710: 65 6e 74 22 2c 20 22 66 6b 69 64 22 20 7d 3b 0a  ent", "fkid" };.
a720: 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74 20 3d  .    regResult =
a730: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b   pParse->nMem+1;
a740: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
a750: 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b  m += 4;.    regK
a760: 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  ey = ++pParse->n
a770: 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77 20  Mem;.    regRow 
a780: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
a790: 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  ;.    v = sqlite
a7a0: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
a7b0: 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75  ;.    setAllColu
a7c0: 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61 7a  mnNames(v, 4, az
a7d0: 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 34 3d  Col); assert( 4=
a7e0: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
a7f0: 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) );.    sqlite3
a800: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
a810: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
a820: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
a830: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b  hFirst(&db->aDb[
a840: 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62  iDb].pSchema->tb
a850: 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c  lHash);.    whil
a860: 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66  e( k ){.      if
a870: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
a880: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
a890: 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50  e3LocateTable(pP
a8a0: 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c  arse, 0, zRight,
a8b0: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b   zDb);.        k
a8c0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
a8d0: 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  e{.        pTab 
a8e0: 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65  = (Table*)sqlite
a8f0: 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20  HashData(k);.   
a900: 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48       k = sqliteH
a910: 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20  ashNext(k);.    
a920: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54    }.      if( pT
a930: 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70  ab==0 || pTab->p
a940: 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  FKey==0 ) contin
a950: 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
a960: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
a970: 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e  e, iDb, pTab->tn
a980: 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  um, 0, pTab->zNa
a990: 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  me);.      if( p
a9a0: 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77  Tab->nCol+regRow
a9b0: 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20  >pParse->nMem ) 
a9c0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pParse->nMem = p
a9d0: 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52  Tab->nCol + regR
a9e0: 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ow;.      sqlite
a9f0: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
aa00: 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c  e, 0, iDb, pTab,
aa10: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
aa20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aa30: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 72 65  LoadString(v, re
aa40: 67 52 65 73 75 6c 74 2c 20 70 54 61 62 2d 3e 7a  gResult, pTab->z
aa50: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f 72  Name);.      for
aa60: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
aa70: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
aa80: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
aa90: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
aaa0: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
aab0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
aac0: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
aad0: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
aae0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
aaf0: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
ab00: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ab10: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
ab20: 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d  e, iDb, pParent-
ab30: 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e  >tnum, 0, pParen
ab40: 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  t->zName);.     
ab50: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
ab60: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
ab70: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
ab80: 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20  , &pIdx, 0);.   
ab90: 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b       if( x==0 ){
aba0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
abb0: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
abc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
abd0: 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69  nTable(pParse, i
abe0: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20  , iDb, pParent, 
abf0: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
ac00: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
ac10: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ac20: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
ac30: 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20  OP_OpenRead, i, 
ac40: 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29  pIdx->tnum, iDb)
ac50: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
ac60: 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65  lite3VdbeSetP4Ke
ac70: 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49  yInfo(pParse, pI
ac80: 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  dx);.          }
ac90: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
aca0: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b            k = 0;
acb0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
acc0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
acd0: 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
ace0: 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30  ( pParse->nErr>0
acf0: 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20   || pFK==0 );.  
ad00: 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72      if( pFK ) br
ad10: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  eak;.      if( p
ad20: 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20  Parse->nTab<i ) 
ad30: 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69  pParse->nTab = i
ad40: 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20  ;.      addrTop 
ad50: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
ad60: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op1(v, OP_Rewind
ad70: 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 0); VdbeCovera
ad80: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72  ge(v);.      for
ad90: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
ada0: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
adb0: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
adc0: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
add0: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
ade0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
adf0: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
ae00: 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20       pIdx = 0;. 
ae10: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20         aiCols = 
ae20: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  0;.        if( p
ae30: 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20  Parent ){.      
ae40: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
ae50: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
ae60: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
ae70: 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c  K, &pIdx, &aiCol
ae80: 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  s);.          as
ae90: 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20  sert( x==0 );.  
aea0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
aeb0: 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33  addrOk = sqlite3
aec0: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
aed0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
aee0: 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30  arent && pIdx==0
aef0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e   ){.          in
af00: 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43  t iKey = pFK->aC
af10: 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20  ol[0].iFrom;.   
af20: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69         assert( i
af30: 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70  Key>=0 && iKey<p
af40: 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20  Tab->nCol );.   
af50: 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 21         if( iKey!
af60: 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a  =pTab->iPKey ){.
af70: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
af80: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
af90: 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69   OP_Column, 0, i
afa0: 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  Key, regRow);.  
afb0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
afc0: 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76  3ColumnDefault(v
afd0: 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65  , pTab, iKey, re
afe0: 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20  gRow);.         
aff0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b000: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
b010: 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f  l, regRow, addrO
b020: 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  k); VdbeCoverage
b030: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
b040: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b050: 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49  p2(v, OP_MustBeI
b060: 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20 20  nt, regRow, .   
b070: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b080: 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64  te3VdbeCurrentAd
b090: 64 72 28 76 29 2b 33 29 3b 20 56 64 62 65 43 6f  dr(v)+3); VdbeCo
b0a0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
b0b0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
b0c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b0d0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b0e0: 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77  Rowid, 0, regRow
b0f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
b100: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b110: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
b120: 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30  _NotExists, i, 0
b130: 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65 43  , regRow); VdbeC
b140: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
b150: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b160: 65 47 6f 74 6f 28 76 2c 20 61 64 64 72 4f 6b 29  eGoto(v, addrOk)
b170: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
b180: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
b190: 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  v, sqlite3VdbeCu
b1a0: 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b  rrentAddr(v)-2);
b1b0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
b1c0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
b1d0: 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20  0; j<pFK->nCol; 
b1e0: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
b1f0: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
b200: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
b210: 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20  e(v, pTab, 0,.  
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b230: 20 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73            aiCols
b240: 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70   ? aiCols[j] : p
b250: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
b260: 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20  m, regRow+j);.  
b270: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b280: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
b290: 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77  P_IsNull, regRow
b2a0: 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62  +j, addrOk); Vdb
b2b0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
b2c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
b2d0: 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20      if( pParent 
b2e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
b2f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
b300: 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  (v, OP_MakeRecor
b310: 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e  d, regRow, pFK->
b320: 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20  nCol, regKey,.  
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b340: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b350: 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
b360: 53 74 72 28 64 62 2c 70 49 64 78 29 2c 20 70 46  Str(db,pIdx), pF
b370: 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20  K->nCol);.      
b380: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b390: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
b3a0: 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f  _Found, i, addrO
b3b0: 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20  k, regKey, 0);. 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43             VdbeC
b3d0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
b3e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
b3f0: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
b400: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
b410: 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52  P_Rowid, 0, regR
b420: 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20  esult+1);.      
b430: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
b440: 74 69 4c 6f 61 64 28 76 2c 20 72 65 67 52 65 73  tiLoad(v, regRes
b450: 75 6c 74 2b 32 2c 20 22 73 69 22 2c 20 70 46 4b  ult+2, "si", pFK
b460: 2d 3e 7a 54 6f 2c 20 69 2d 31 29 3b 0a 20 20 20  ->zTo, i-1);.   
b470: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b480: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
b490: 75 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c  ultRow, regResul
b4a0: 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73  t, 4);.        s
b4b0: 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76  qlite3VdbeResolv
b4c0: 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b  eLabel(v, addrOk
b4d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b4e0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 69 43  e3DbFree(db, aiC
b4f0: 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ols);.      }.  
b500: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b510: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp2(v, OP_Next
b520: 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b  , 0, addrTop+1);
b530: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
b540: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
b550: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
b560: 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20  ddrTop);.    }. 
b570: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
b580: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
b590: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
b5a0: 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ER) */.#endif /*
b5b0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
b5c0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
b5d0: 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e  Y) */..#ifndef N
b5e0: 44 45 42 55 47 0a 20 20 63 61 73 65 20 50 72 61  DEBUG.  case Pra
b5f0: 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43  gTyp_PARSER_TRAC
b600: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  E: {.    if( zRi
b610: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
b620: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
b630: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b  an(zRight, 0) ){
b640: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b650: 50 61 72 73 65 72 54 72 61 63 65 28 73 74 64 6f  ParserTrace(stdo
b660: 75 74 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b  ut, "parser: ");
b670: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
b680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72        sqlite3Par
b690: 73 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a  serTrace(0, 0);.
b6a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
b6b0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
b6c0: 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c  f..  /* Reinstal
b6d0: 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64 20 47  l the LIKE and G
b6e0: 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  LOB functions.  
b6f0: 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66 20 4c  The variant of L
b700: 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20 77 69  IKE.  ** used wi
b710: 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e 73 69  ll be case sensi
b720: 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65 70 65  tive or not depe
b730: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52 48 53  nding on the RHS
b740: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
b750: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
b760: 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20  TIVE_LIKE: {.   
b770: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
b780: 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69       sqlite3Regi
b790: 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
b7a0: 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74  s(db, sqlite3Get
b7b0: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
b7c0: 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  0));.    }.  }. 
b7d0: 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66   break;..#ifndef
b7e0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
b7f0: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
b800: 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  X.# define SQLIT
b810: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
b820: 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a  K_ERROR_MAX 100.
b830: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
b840: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
b850: 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a  GRITY_CHECK.  /*
b860: 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f 63   Pragma "quick_c
b870: 68 65 63 6b 22 20 69 73 20 72 65 64 75 63 65 64  heck" is reduced
b880: 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a   version of .  *
b890: 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  * integrity_chec
b8a0: 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64 65  k designed to de
b8b0: 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62 61  tect most databa
b8c0: 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20  se corruption.  
b8d0: 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74 20  ** without most 
b8e0: 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61 64 20  of the overhead 
b8f0: 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67 72  of a full integr
b900: 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a  ity-check..  */.
b910: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
b920: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a 20  NTEGRITY_CHECK: 
b930: 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20  {.    int i, j, 
b940: 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20  addr, mxErr;..  
b950: 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d 20    int isQuick = 
b960: 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28  (sqlite3Tolower(
b970: 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b  zLeft[0])=='q');
b980: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
b990: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77  PRAGMA command w
b9a0: 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  as of the form "
b9b0: 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65  PRAGMA <db>.inte
b9c0: 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20  grity_check",.  
b9d0: 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69 73    ** then iDb is
b9e0: 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64 65   set to the inde
b9f0: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
ba00: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
ba10: 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20  <db>..    ** In 
ba20: 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 69  this case, the i
ba30: 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61 74 61  ntegrity of data
ba40: 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69 73  base iDb only is
ba50: 20 76 65 72 69 66 69 65 64 20 62 79 0a 20 20 20   verified by.   
ba60: 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72 65   ** the VDBE cre
ba70: 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20  ated below..    
ba80: 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 77  **.    ** Otherw
ba90: 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d  ise, if the comm
baa0: 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20 22  and was simply "
bab0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
bac0: 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20 20  _check" (or.    
bad0: 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63 6b  ** "PRAGMA quick
bae0: 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20 69  _check"), then i
baf0: 44 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e 20  Db is set to 0. 
bb00: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65  In this case, se
bb10: 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20  t iDb.    ** to 
bb20: 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64 69  -1 here, to indi
bb30: 63 61 74 65 20 74 68 61 74 20 74 68 65 20 56 44  cate that the VD
bb40: 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66 79  BE should verify
bb50: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a 20   the integrity. 
bb60: 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74     ** of all att
bb70: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
bb80: 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
bb90: 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61   iDb>=0 );.    a
bba0: 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c  ssert( iDb==0 ||
bbb0: 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20   pId2->z );.    
bbc0: 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29  if( pId2->z==0 )
bbd0: 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20   iDb = -1;..    
bbe0: 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68  /* Initialize th
bbf0: 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 2a  e VDBE program *
bc00: 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  /.    pParse->nM
bc10: 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 65 74 4f  em = 6;.    setO
bc20: 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20  neColumnName(v, 
bc30: 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  "integrity_check
bc40: 22 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20  ");..    /* Set 
bc50: 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f  the maximum erro
bc60: 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d  r count */.    m
bc70: 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e  xErr = SQLITE_IN
bc80: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
bc90: 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28  ROR_MAX;.    if(
bca0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
bcb0: 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
bcc0: 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72 72 29  (zRight, &mxErr)
bcd0: 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78 45 72  ;.      if( mxEr
bce0: 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  r<=0 ){.        
bcf0: 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49  mxErr = SQLITE_I
bd00: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
bd10: 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20  RROR_MAX;.      
bd20: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
bd30: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bd40: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45   OP_Integer, mxE
bd50: 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b  rr, 1);  /* reg[
bd60: 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72 73 20  1] holds errors 
bd70: 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20  left */..    /* 
bd80: 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20  Do an integrity 
bd90: 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61  check on each da
bda0: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
bdb0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
bdc0: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
bdd0: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a     HashElem *x;.
bde0: 20 20 20 20 20 20 48 61 73 68 20 2a 70 54 62 6c        Hash *pTbl
bdf0: 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74  s;.      int cnt
be00: 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69 66 28   = 0;..      if(
be10: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20   OMIT_TEMPDB && 
be20: 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b  i==1 ) continue;
be30: 0a 20 20 20 20 20 20 69 66 28 20 69 44 62 3e 3d  .      if( iDb>=
be40: 30 20 26 26 20 69 21 3d 69 44 62 20 29 20 63 6f  0 && i!=iDb ) co
be50: 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73  ntinue;..      s
be60: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
be70: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
be80: 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20  );.      addr = 
be90: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bea0: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
beb0: 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75  ); /* Halt if ou
bec0: 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20  t of errors */. 
bed0: 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67       VdbeCoverag
bee0: 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  e(v);.      sqli
bef0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bf00: 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
bf10: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bf20: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
bf30: 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  dr);..      /* D
bf40: 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63  o an integrity c
bf50: 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72  heck of the B-Tr
bf60: 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  ee.      **.    
bf70: 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69    ** Begin by fi
bf80: 6c 6c 69 6e 67 20 72 65 67 69 73 74 65 72 73 20  lling registers 
bf90: 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74  2, 3, ... with t
bfa0: 68 65 20 72 6f 6f 74 20 70 61 67 65 73 20 6e 75  he root pages nu
bfb0: 6d 62 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 66  mbers.      ** f
bfc0: 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e  or all tables an
bfd0: 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65  d indices in the
bfe0: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
bff0: 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
c000: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
c010: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 2c 20  utexHeld(db, i, 
c020: 30 29 20 29 3b 0a 20 20 20 20 20 20 70 54 62 6c  0) );.      pTbl
c030: 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e  s = &db->aDb[i].
c040: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
c050: 3b 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71  ;.      for(x=sq
c060: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54  liteHashFirst(pT
c070: 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74  bls); x; x=sqlit
c080: 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20  eHashNext(x)){. 
c090: 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54         Table *pT
c0a0: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
c0b0: 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20  ata(x);.        
c0c0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
c0d0: 20 20 20 20 20 69 66 28 20 48 61 73 52 6f 77 69       if( HasRowi
c0e0: 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20  d(pTab) ){.     
c0f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c100: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c110: 65 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d  eger, pTab->tnum
c120: 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20  , 2+cnt);.      
c130: 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28      VdbeComment(
c140: 28 76 2c 20 22 25 73 22 2c 20 70 54 61 62 2d 3e  (v, "%s", pTab->
c150: 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20  zName));.       
c160: 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20     cnt++;.      
c170: 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
c180: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
c190: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
c1a0: 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  dx->pNext){.    
c1b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c1c0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c1d0: 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75  teger, pIdx->tnu
c1e0: 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20  m, 2+cnt);.     
c1f0: 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74       VdbeComment
c200: 28 28 76 2c 20 22 25 73 22 2c 20 70 49 64 78 2d  ((v, "%s", pIdx-
c210: 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20  >zName));.      
c220: 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20      cnt++;.     
c230: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20     }.      }..  
c240: 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
c250: 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75 6d 62   sufficient numb
c260: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
c270: 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
c280: 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 50 61  ted */.      pPa
c290: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28  rse->nMem = MAX(
c2a0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63   pParse->nMem, c
c2b0: 6e 74 2b 38 20 29 3b 0a 0a 20 20 20 20 20 20 2f  nt+8 );..      /
c2c0: 2a 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20  * Do the b-tree 
c2d0: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73  integrity checks
c2e0: 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
c2f0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
c300: 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32  P_IntegrityCk, 2
c310: 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20  , cnt, 1);.     
c320: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
c330: 67 65 50 35 28 76 2c 20 28 75 38 29 69 29 3b 0a  geP5(v, (u8)i);.
c340: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
c350: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
c360: 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b  , OP_IsNull, 2);
c370: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
c380: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c390: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c3a0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
c3b0: 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  ,.         sqlit
c3c0: 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2a  e3MPrintf(db, "*
c3d0: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 25  ** in database %
c3e0: 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44  s ***\n", db->aD
c3f0: 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20  b[i].zName),.   
c400: 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d 49 43        P4_DYNAMIC
c410: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c420: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
c430: 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20 31 29 3b  _Move, 2, 4, 1);
c440: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c450: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
c460: 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b  oncat, 4, 3, 2);
c470: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c480: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
c490: 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b  esultRow, 2, 1);
c4a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c4b0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
c4c0: 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  dr);..      /* M
c4d0: 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65  ake sure all the
c4e0: 20 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e   indices are con
c4f0: 73 74 72 75 63 74 65 64 20 63 6f 72 72 65 63 74  structed correct
c500: 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ly..      */.   
c510: 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48     for(x=sqliteH
c520: 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b  ashFirst(pTbls);
c530: 20 78 20 26 26 20 21 69 73 51 75 69 63 6b 3b 20   x && !isQuick; 
c540: 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  x=sqliteHashNext
c550: 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61  (x)){.        Ta
c560: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
c570: 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20  teHashData(x);. 
c580: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
c590: 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20  dx, *pPk;.      
c5a0: 20 20 49 6e 64 65 78 20 2a 70 50 72 69 6f 72 20    Index *pPrior 
c5b0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  = 0;.        int
c5c0: 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20   loopTop;.      
c5d0: 20 20 69 6e 74 20 69 44 61 74 61 43 75 72 2c 20    int iDataCur, 
c5e0: 69 49 64 78 43 75 72 3b 0a 20 20 20 20 20 20 20  iIdxCur;.       
c5f0: 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b 0a 0a 20   int r1 = -1;.. 
c600: 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d         if( pTab-
c610: 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e  >pIndex==0 ) con
c620: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70  tinue;.        p
c630: 50 6b 20 3d 20 48 61 73 52 6f 77 69 64 28 70 54  Pk = HasRowid(pT
c640: 61 62 29 20 3f 20 30 20 3a 20 73 71 6c 69 74 65  ab) ? 0 : sqlite
c650: 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
c660: 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 20 20  (pTab);.        
c670: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
c680: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
c690: 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74  fPos, 1);  /* St
c6a0: 6f 70 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72  op if out of err
c6b0: 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 56  ors */.        V
c6c0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
c6d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c6e0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c6f0: 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
c700: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c710: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
c720: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c730: 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
c740: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
c750: 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62    sqlite3OpenTab
c760: 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61  leAndIndices(pPa
c770: 72 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70  rse, pTab, OP_Op
c780: 65 6e 52 65 61 64 2c 20 30 2c 0a 20 20 20 20 20  enRead, 0,.     
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c                1,
c7b0: 20 30 2c 20 26 69 44 61 74 61 43 75 72 2c 20 26   0, &iDataCur, &
c7c0: 69 49 64 78 43 75 72 29 3b 0a 20 20 20 20 20 20  iIdxCur);.      
c7d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c7e0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c7f0: 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20 20 20  r, 0, 7);.      
c800: 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
c810: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
c820: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
c830: 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
c840: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c850: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c860: 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29 3b 20  teger, 0, 8+j); 
c870: 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73  /* index entries
c880: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
c890: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 50      }.        pP
c8a0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58  arse->nMem = MAX
c8b0: 28 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38  (pParse->nMem, 8
c8c0: 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +j);.        sql
c8d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c8e0: 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69 44 61  , OP_Rewind, iDa
c8f0: 74 61 43 75 72 2c 20 30 29 3b 20 56 64 62 65 43  taCur, 0); VdbeC
c900: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
c910: 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71      loopTop = sq
c920: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c930: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c  v, OP_AddImm, 7,
c940: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   1);.        /* 
c950: 56 65 72 69 66 79 20 74 68 61 74 20 61 6c 6c 20  Verify that all 
c960: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73  NOT NULL columns
c970: 20 72 65 61 6c 6c 79 20 61 72 65 20 4e 4f 54 20   really are NOT 
c980: 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20 20 20  NULL */.        
c990: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d  for(j=0; j<pTab-
c9a0: 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20  >nCol; j++){.   
c9b0: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 72         char *zEr
c9c0: 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  r;.          int
c9d0: 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20   jmp2, jmp3;.   
c9e0: 20 20 20 20 20 20 20 69 66 28 20 6a 3d 3d 70 54         if( j==pT
c9f0: 61 62 2d 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74  ab->iPKey ) cont
ca00: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
ca10: 69 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a  if( pTab->aCol[j
ca20: 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63  ].notNull==0 ) c
ca30: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
ca40: 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f     sqlite3ExprCo
ca50: 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
ca60: 6c 65 28 76 2c 20 70 54 61 62 2c 20 69 44 61 74  le(v, pTab, iDat
ca70: 61 43 75 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20  aCur, j, 3);.   
ca80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ca90: 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 4f 50  beChangeP5(v, OP
caa0: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 3b  FLAG_TYPEOFARG);
cab0: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20  .          jmp2 
cac0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
cad0: 4f 70 31 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c  Op1(v, OP_NotNul
cae0: 6c 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72  l, 3); VdbeCover
caf0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
cb00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cb10: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
cb20: 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63  , 1, -1); /* Dec
cb30: 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d  rement error lim
cb40: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
cb50: 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50  zErr = sqlite3MP
cb60: 72 69 6e 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20  rintf(db, "NULL 
cb70: 76 61 6c 75 65 20 69 6e 20 25 73 2e 25 73 22 2c  value in %s.%s",
cb80: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pTab->zName,.  
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62              pTab
cbb0: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29  ->aCol[j].zName)
cbc0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cbd0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
cbe0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
cbf0: 33 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44  3, 0, zErr, P4_D
cc00: 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20  YNAMIC);.       
cc10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cc20: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
cc30: 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20  tRow, 3, 1);.   
cc40: 20 20 20 20 20 20 20 6a 6d 70 33 20 3d 20 73 71         jmp3 = sq
cc50: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
cc60: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
cc70: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
cc80: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cc90: 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c  te3VdbeAddOp0(v,
cca0: 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20   OP_Halt);.     
ccb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ccc0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32  JumpHere(v, jmp2
ccd0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
cce0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
ccf0: 28 76 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20  (v, jmp3);.     
cd00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20     }.        /* 
cd10: 56 61 6c 69 64 61 74 65 20 69 6e 64 65 78 20 65  Validate index e
cd20: 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65 20 63  ntries for the c
cd30: 75 72 72 65 6e 74 20 72 6f 77 20 2a 2f 0a 20 20  urrent row */.  
cd40: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
cd50: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
cd60: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
cd70: 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
cd80: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d            int jm
cd90: 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20  p2, jmp3, jmp4, 
cda0: 6a 6d 70 35 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp5;.          
cdb0: 69 6e 74 20 63 6b 55 6e 69 71 20 3d 20 73 71 6c  int ckUniq = sql
cdc0: 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65  ite3VdbeMakeLabe
cdd0: 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  l(v);.          
cde0: 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20  if( pPk==pIdx ) 
cdf0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
ce00: 20 20 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33      r1 = sqlite3
ce10: 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
ce20: 28 70 50 61 72 73 65 2c 20 70 49 64 78 2c 20 69  (pParse, pIdx, i
ce30: 44 61 74 61 43 75 72 2c 20 30 2c 20 30 2c 20 26  DataCur, 0, 0, &
ce40: 6a 6d 70 33 2c 0a 20 20 20 20 20 20 20 20 20 20  jmp3,.          
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 50 72               pPr
ce70: 69 6f 72 2c 20 72 31 29 3b 0a 20 20 20 20 20 20  ior, r1);.      
ce80: 20 20 20 20 70 50 72 69 6f 72 20 3d 20 70 49 64      pPrior = pId
ce90: 78 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  x;.          sql
cea0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ceb0: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a  , OP_AddImm, 8+j
cec0: 2c 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d  , 1);  /* increm
ced0: 65 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20  ent entry count 
cee0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  */.          /* 
cef0: 56 65 72 69 66 79 20 74 68 61 74 20 61 6e 20 69  Verify that an i
cf00: 6e 64 65 78 20 65 6e 74 72 79 20 65 78 69 73 74  ndex entry exist
cf10: 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  s for the curren
cf20: 74 20 74 61 62 6c 65 20 72 6f 77 20 2a 2f 0a 20  t table row */. 
cf30: 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20           jmp2 = 
cf40: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cf50: 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64  4Int(v, OP_Found
cf60: 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 63 6b 55  , iIdxCur+j, ckU
cf70: 6e 69 71 2c 20 72 31 2c 0a 20 20 20 20 20 20 20  niq, r1,.       
cf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
cfa0: 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56  Idx->nColumn); V
cfb0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
cfc0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cfd0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cfe0: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
cff0: 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65  ; /* Decrement e
d000: 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20  rror limit */.  
d010: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d020: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
d030: 20 33 2c 20 22 72 6f 77 20 22 29 3b 0a 20 20 20   3, "row ");.   
d040: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d050: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
d060: 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b  oncat, 7, 3, 3);
d070: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d080: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
d090: 28 76 2c 20 34 2c 20 22 20 6d 69 73 73 69 6e 67  (v, 4, " missing
d0a0: 20 66 72 6f 6d 20 69 6e 64 65 78 20 22 29 3b 0a   from index ");.
d0b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d0c0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
d0d0: 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20  P_Concat, 4, 3, 
d0e0: 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d  3);.          jm
d0f0: 70 35 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p5 = sqlite3Vdbe
d100: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 34 2c  LoadString(v, 4,
d110: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a 20   pIdx->zName);. 
d120: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d130: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
d140: 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33  _Concat, 4, 3, 3
d150: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d160: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d170: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
d180: 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 1);.         
d190: 20 6a 6d 70 34 20 3d 20 73 71 6c 69 74 65 33 56   jmp4 = sqlite3V
d1a0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
d1b0: 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43  IfPos, 1); VdbeC
d1c0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
d1d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d1e0: 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61  eAddOp0(v, OP_Ha
d1f0: 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  lt);.          s
d200: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
d210: 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20  re(v, jmp2);.   
d220: 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 55 4e         /* For UN
d230: 49 51 55 45 20 69 6e 64 65 78 65 73 2c 20 76 65  IQUE indexes, ve
d240: 72 69 66 79 20 74 68 61 74 20 6f 6e 6c 79 20 6f  rify that only o
d250: 6e 65 20 65 6e 74 72 79 20 65 78 69 73 74 73 20  ne entry exists 
d260: 77 69 74 68 20 74 68 65 0a 20 20 20 20 20 20 20  with the.       
d270: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6b 65     ** current ke
d280: 79 2e 20 20 54 68 65 20 65 6e 74 72 79 20 69 73  y.  The entry is
d290: 20 75 6e 69 71 75 65 20 69 66 20 28 31 29 20 61   unique if (1) a
d2a0: 6e 79 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c  ny column is NUL
d2b0: 4c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f  L.          ** o
d2c0: 72 20 28 32 29 20 74 68 65 20 6e 65 78 74 20 65  r (2) the next e
d2d0: 6e 74 72 79 20 68 61 73 20 61 20 64 69 66 66 65  ntry has a diffe
d2e0: 72 65 6e 74 20 6b 65 79 20 2a 2f 0a 20 20 20 20  rent key */.    
d2f0: 20 20 20 20 20 20 69 66 28 20 49 73 55 6e 69 71        if( IsUniq
d300: 75 65 49 6e 64 65 78 28 70 49 64 78 29 20 29 7b  ueIndex(pIdx) ){
d310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
d320: 20 75 6e 69 71 4f 6b 20 3d 20 73 71 6c 69 74 65   uniqOk = sqlite
d330: 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76  3VdbeMakeLabel(v
d340: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
d350: 6e 74 20 6a 6d 70 36 3b 0a 20 20 20 20 20 20 20  nt jmp6;.       
d360: 20 20 20 20 20 69 6e 74 20 6b 6b 3b 0a 20 20 20       int kk;.   
d370: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 6b 3d           for(kk=
d380: 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79  0; kk<pIdx->nKey
d390: 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20  Col; kk++){.    
d3a0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 43            int iC
d3b0: 6f 6c 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c  ol = pIdx->aiCol
d3c0: 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20 20 20 20  umn[kk];.       
d3d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69         assert( i
d3e0: 43 6f 6c 21 3d 58 4e 5f 52 4f 57 49 44 20 26 26  Col!=XN_ROWID &&
d3f0: 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c   iCol<pTab->nCol
d400: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   );.            
d410: 20 20 69 66 28 20 69 43 6f 6c 3e 3d 30 20 26 26    if( iCol>=0 &&
d420: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c   pTab->aCol[iCol
d430: 5d 2e 6e 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e 74  ].notNull ) cont
d440: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
d450: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d460: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
d470: 6c 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f  ll, r1+kk, uniqO
d480: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  k);.            
d490: 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
d4a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
d4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6a 6d 70  .            jmp
d4c0: 36 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  6 = sqlite3VdbeA
d4d0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp1(v, OP_Next
d4e0: 2c 20 69 49 64 78 43 75 72 2b 6a 29 3b 20 56 64  , iIdxCur+j); Vd
d4f0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d500: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d510: 65 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 75 6e  e3VdbeGoto(v, un
d520: 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  iqOk);.         
d530: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
d540: 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 36 29 3b  mpHere(v, jmp6);
d550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d560: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e  ite3VdbeAddOp4In
d570: 74 28 76 2c 20 4f 50 5f 49 64 78 47 54 2c 20 69  t(v, OP_IdxGT, i
d580: 49 64 78 43 75 72 2b 6a 2c 20 75 6e 69 71 4f 6b  IdxCur+j, uniqOk
d590: 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20  , r1,.          
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5b0: 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 4b 65         pIdx->nKe
d5c0: 79 43 6f 6c 29 3b 20 56 64 62 65 43 6f 76 65 72  yCol); VdbeCover
d5d0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
d5e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d5f0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
d600: 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44  mm, 1, -1); /* D
d610: 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c  ecrement error l
d620: 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  imit */.        
d630: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
d640: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 33 2c 20  oadString(v, 3, 
d650: 22 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72  "non-unique entr
d660: 79 20 69 6e 20 69 6e 64 65 78 20 22 29 3b 0a 20  y in index ");. 
d670: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d680: 65 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 6a 6d  e3VdbeGoto(v, jm
d690: 70 35 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  p5);.           
d6a0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f   sqlite3VdbeReso
d6b0: 6c 76 65 4c 61 62 65 6c 28 76 2c 20 75 6e 69 71  lveLabel(v, uniq
d6c0: 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  Ok);.          }
d6d0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d6e0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
d6f0: 2c 20 6a 6d 70 34 29 3b 0a 20 20 20 20 20 20 20  , jmp4);.       
d700: 20 20 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76     sqlite3Resolv
d710: 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 70 50  ePartIdxLabel(pP
d720: 61 72 73 65 2c 20 6a 6d 70 33 29 3b 0a 20 20 20  arse, jmp3);.   
d730: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
d740: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d750: 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 44 61  (v, OP_Next, iDa
d760: 74 61 43 75 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b  taCur, loopTop);
d770: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d780: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d790: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
d7a0: 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66   loopTop-1);.#if
d7b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d7c0: 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20 20 20 20  _BTREECOUNT.    
d7d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
d7e0: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 32 2c 20  oadString(v, 2, 
d7f0: 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  "wrong # of entr
d800: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22 29 3b  ies in index ");
d810: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
d820: 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  , pIdx=pTab->pIn
d830: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
d840: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b  pIdx->pNext, j++
d850: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
d860: 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e   pPk==pIdx ) con
d870: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20  tinue;.         
d880: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
d890: 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76  dbeCurrentAddr(v
d8a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d8b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d8c0: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61  , OP_IfPos, 1, a
d8d0: 64 64 72 2b 32 29 3b 20 56 64 62 65 43 6f 76 65  ddr+2); VdbeCove
d8e0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
d8f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d900: 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
d910: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
d920: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d930: 4f 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c  Op2(v, OP_Count,
d940: 20 69 49 64 78 43 75 72 2b 6a 2c 20 33 29 3b 0a   iIdxCur+j, 3);.
d950: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d960: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
d970: 50 5f 45 71 2c 20 38 2b 6a 2c 20 61 64 64 72 2b  P_Eq, 8+j, addr+
d980: 38 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72  8, 3); VdbeCover
d990: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
d9a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
d9b0: 6e 67 65 50 35 28 76 2c 20 53 51 4c 49 54 45 5f  ngeP5(v, SQLITE_
d9c0: 4e 4f 54 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20  NOTNULL);.      
d9d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d9e0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
d9f0: 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20  mm, 1, -1);.    
da00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
da10: 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 33  eLoadString(v, 3
da20: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a  , pIdx->zName);.
da30: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
da40: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
da50: 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20  P_Concat, 3, 2, 
da60: 37 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  7);.          sq
da70: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
da80: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
da90: 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   7, 1);.        
daa0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
dab0: 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55  TE_OMIT_BTREECOU
dac0: 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20  NT */.      } . 
dad0: 20 20 20 7d 0a 20 20 20 20 7b 0a 20 20 20 20 20     }.    {.     
dae0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
daf0: 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46  t iLn = VDBE_OFF
db00: 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20  SET_LINENO(2);. 
db10: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
db20: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64  t VdbeOpList end
db30: 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Code[] = {.     
db40: 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20     { OP_AddImm, 
db50: 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20       1, 0,      
db60: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
db70: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66  .        { OP_If
db80: 2c 20 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c  ,          1, 0,
db90: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
dba0: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 1 */.        {
dbb0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20   OP_String8,    
dbc0: 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d   0, 3,        0}
dbd0: 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20  ,    /* 2 */.   
dbe0: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
dbf0: 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20  Row,   3, 1,    
dc00: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7d 3b      0},.      };
dc10: 0a 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61  .      VdbeOp *a
dc20: 4f 70 3b 0a 0a 20 20 20 20 20 20 61 4f 70 20 3d  Op;..      aOp =
dc30: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
dc40: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
dc50: 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64  ze(endCode), end
dc60: 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20  Code, iLn);.    
dc70: 20 20 69 66 28 20 61 4f 70 20 29 7b 0a 20 20 20    if( aOp ){.   
dc80: 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 32 20 3d       aOp[0].p2 =
dc90: 20 2d 6d 78 45 72 72 3b 0a 20 20 20 20 20 20 20   -mxErr;.       
dca0: 20 61 4f 70 5b 31 5d 2e 70 32 20 3d 20 73 71 6c   aOp[1].p2 = sql
dcb0: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
dcc0: 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20 20 20  ddr(v);.        
dcd0: 61 4f 70 5b 32 5d 2e 70 34 74 79 70 65 20 3d 20  aOp[2].p4type = 
dce0: 50 34 5f 53 54 41 54 49 43 3b 0a 20 20 20 20 20  P4_STATIC;.     
dcf0: 20 20 20 61 4f 70 5b 32 5d 2e 70 34 2e 7a 20 3d     aOp[2].p4.z =
dd00: 20 22 6f 6b 22 3b 0a 20 20 20 20 20 20 7d 0a 20   "ok";.      }. 
dd10: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
dd20: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
dd30: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
dd40: 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e  Y_CHECK */..#ifn
dd50: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
dd60: 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20  UTF16.  /*.  ** 
dd70: 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
dd80: 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  g.  **   PRAGMA 
dd90: 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d  encoding = "utf-
dda0: 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66  8"|"utf-16"|"utf
ddb0: 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65  -16le"|"utf-16be
ddc0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69  ".  **.  ** In i
ddd0: 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74  ts first form, t
dde0: 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72  his pragma retur
ddf0: 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  ns the encoding 
de00: 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a  of the main.  **
de10: 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
de20: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
de30: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69  t initialized, i
de40: 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  t is initialized
de50: 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   now..  **.  ** 
de60: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
de70: 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69  of this pragma i
de80: 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
de90: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
dea0: 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74  ile.  ** has not
deb0: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
dec0: 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68  itialized. In th
ded0: 69 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20  is case it sets 
dee0: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a  the default.  **
def0: 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77   encoding that w
df00: 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
df10: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
df20: 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20  e file if a new 
df30: 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65  file.  ** is cre
df40: 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73  ated. If an exis
df50: 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61  ting main databa
df60: 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65  se file is opene
df70: 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  d, then the.  **
df80: 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
df90: 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65  coding for the e
dfa0: 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
dfb0: 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a   is used..  ** .
dfc0: 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65    ** In all case
dfd0: 73 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  s new databases 
dfe0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
dff0: 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64  e ATTACH command
e000: 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65   are.  ** create
e010: 64 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  d to use the sam
e020: 65 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65  e default text e
e030: 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d  ncoding as the m
e040: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66  ain database. If
e050: 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  .  ** the main d
e060: 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
e070: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
e080: 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20   and/or created 
e090: 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a  when ATTACH.  **
e0a0: 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68   is executed, th
e0b0: 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72  is is done befor
e0c0: 65 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65  e the ATTACH ope
e0d0: 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  ration..  **.  *
e0e0: 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * In the second 
e0f0: 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61  form this pragma
e100: 20 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65   sets the text e
e110: 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73  ncoding to be us
e120: 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64  ed in.  ** new d
e130: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72  atabase files cr
e140: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73  eated using this
e150: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
e160: 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a  . It is only.  *
e170: 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f  * useful if invo
e180: 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ked immediately 
e190: 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64  after the main d
e1a0: 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20  atabase i.  */. 
e1b0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e   case PragTyp_EN
e1c0: 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74  CODING: {.    st
e1d0: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
e1e0: 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20  t EncName {.    
e1f0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20    char *zName;. 
e200: 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20       u8 enc;.   
e210: 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20   } encnames[] = 
e220: 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22  {.      { "UTF8"
e230: 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ,     SQLITE_UTF
e240: 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  8        },.    
e250: 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20    { "UTF-8",    
e260: 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20  SQLITE_UTF8     
e270: 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
e280: 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f  e element [1] */
e290: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
e2a0: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  le", SQLITE_UTF1
e2b0: 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6LE     },  /* M
e2c0: 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
e2d0: 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  2] */.      { "U
e2e0: 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45  TF-16be", SQLITE
e2f0: 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20  _UTF16BE     }, 
e300: 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
e310: 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20  ent [3] */.     
e320: 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53   { "UTF16le",  S
e330: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20  QLITE_UTF16LE   
e340: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
e350: 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f  F16be",  SQLITE_
e360: 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20  UTF16BE     },. 
e370: 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c       { "UTF-16",
e380: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
e390: 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
e3a0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
e3b0: 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  /.      { "UTF16
e3c0: 22 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20  ",    0         
e3d0: 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53           }, /* S
e3e0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
e3f0: 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20  E */.      { 0, 
e400: 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63  0 }.    };.    c
e410: 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e  onst struct EncN
e420: 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69  ame *pEnc;.    i
e430: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20  f( !zRight ){   
e440: 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
e450: 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69  ding" */.      i
e460: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
e470: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
e480: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
e490: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
e4a0: 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
e4b0: 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  F8].enc==SQLITE_
e4c0: 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20 61 73  UTF8 );.      as
e4d0: 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
e4e0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65  QLITE_UTF16LE].e
e4f0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
e500: 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  LE );.      asse
e510: 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
e520: 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63  ITE_UTF16BE].enc
e530: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
e540: 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   );.      return
e550: 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 65  SingleText(v, "e
e560: 6e 63 6f 64 69 6e 67 22 2c 20 65 6e 63 6e 61 6d  ncoding", encnam
e570: 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e 64  es[ENC(pParse->d
e580: 62 29 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  b)].zName);.    
e590: 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20  }else{          
e5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e5b0: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
e5c0: 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20  g = XXX" */.    
e5d0: 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65    /* Only change
e5e0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71   the value of sq
e5f0: 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20  lite.enc if the 
e600: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
e610: 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  is not.      ** 
e620: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20  initialized. If 
e630: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
e640: 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65  e exists, the ne
e650: 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c  w sqlite.enc val
e660: 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  ue.      ** will
e670: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
e680: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
e690: 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20  is next loaded. 
e6a0: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20  If it does not. 
e6b0: 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20       ** already 
e6c0: 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20  exists, it will 
e6d0: 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  be created to us
e6e0: 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69  e the new encodi
e6f0: 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ng value..      
e700: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20  */.      if( .  
e710: 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f        !(DbHasPro
e720: 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f  perty(db, 0, DB_
e730: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c  SchemaLoaded)) |
e740: 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73  | .        DbHas
e750: 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
e760: 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20  DB_Empty) .     
e770: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
e780: 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30  pEnc=&encnames[0
e790: 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20  ]; pEnc->zName; 
e7a0: 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20  pEnc++){.       
e7b0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
e7c0: 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
e7d0: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b   pEnc->zName) ){
e7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 43 48  .            SCH
e7f0: 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e  EMA_ENC(db) = EN
e800: 43 28 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20  C(db) =.        
e810: 20 20 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e          pEnc->en
e820: 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20  c ? pEnc->enc : 
e830: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
e840: 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  VE;.            
e850: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
e860: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
e870: 20 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e       if( !pEnc->
e880: 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  zName ){.       
e890: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
e8a0: 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75  sg(pParse, "unsu
e8b0: 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67  pported encoding
e8c0: 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a  : %s", zRight);.
e8d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e8e0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
e8f0: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
e900: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
e910: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
e920: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
e930: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a  VERSION_PRAGMAS.
e940: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
e950: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68 65  MA [schema.]sche
e960: 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  ma_version.  ** 
e970: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e980: 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
e990: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
e9a0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
e9b0: 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65  [schema.]user_ve
e9c0: 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
e9d0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65  GMA [schema.]use
e9e0: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  r_version = <int
e9f0: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
ea00: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
ea10: 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74  .]freelist_count
ea20: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
ea30: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
ea40: 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61  [schema.]applica
ea50: 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50  tion_id.  **   P
ea60: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
ea70: 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20  pplication_id = 
ea80: 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
ea90: 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73   ** The pragma's
eaa0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
eab0: 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  and user_version
eac0: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 65 74   are used to set
ead0: 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65   or get.  ** the
eae0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63   value of the sc
eaf0: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64  hema-version and
eb00: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72   user-version, r
eb10: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74  espectively. Bot
eb20: 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  h.  ** the schem
eb30: 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68  a-version and th
eb40: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61  e user-version a
eb50: 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64  re 32-bit signed
eb60: 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73   integers.  ** s
eb70: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
eb80: 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20  abase header..  
eb90: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65  **.  ** The sche
eba0: 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75  ma-cookie is usu
ebb0: 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75  ally only manipu
ebc0: 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79  lated internally
ebd0: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20   by SQLite. It. 
ebe0: 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74   ** is increment
ebf0: 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65  ed by SQLite whe
ec00: 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
ec10: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64  se schema is mod
ec20: 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63  ified (by.  ** c
ec30: 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70  reating or dropp
ec40: 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69  ing a table or i
ec50: 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d  ndex). The schem
ec60: 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65  a version is use
ec70: 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65  d by.  ** SQLite
ec80: 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65   each time a que
ec90: 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74  ry is executed t
eca0: 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
ecb0: 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65  e internal cache
ecc0: 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68  .  ** of the sch
ecd0: 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f  ema used when co
ece0: 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20  mpiling the SQL 
ecf0: 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68  query matches th
ed00: 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a  e schema of.  **
ed10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 67   the database ag
ed20: 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20  ainst which the 
ed30: 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69  compiled query i
ed40: 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75  s actually execu
ed50: 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72  ted..  ** Subver
ed60: 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e  ting this mechan
ed70: 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52  ism by using "PR
ed80: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
ed90: 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20  ion" to modify. 
eda0: 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
edb0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74  ersion is potent
edc0: 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20  ially dangerous 
edd0: 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20  and may lead to 
ede0: 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61  program.  ** cra
edf0: 73 68 65 73 20 6f 72 20 64 61 74 61 62 61 73 65  shes or database
ee00: 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65   corruption. Use
ee10: 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20   with caution!. 
ee20: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65   **.  ** The use
ee30: 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74  r-version is not
ee40: 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
ee50: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d   by SQLite. It m
ee60: 61 79 20 62 65 20 75 73 65 64 20 62 79 0a 20 20  ay be used by.  
ee70: 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ** applications 
ee80: 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e  for any purpose.
ee90: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
eea0: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
eeb0: 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f  E: {.    int iCo
eec0: 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e  okie = pPragma->
eed0: 69 41 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20  iArg;  /* Which 
eee0: 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f  cookie to read o
eef0: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73  r write */.    s
ef00: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
ef10: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
ef20: 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 28   if( zRight && (
ef30: 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c  pPragma->mPragFl
ef40: 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65  ag & PragFlag_Re
ef50: 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20  adOnly)==0 ){.  
ef60: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65      /* Write the
ef70: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69   specified cooki
ef80: 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  e value */.     
ef90: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
efa0: 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b  beOpList setCook
efb0: 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
efc0: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
efd0: 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d  n,    0,  1,  0}
efe0: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
eff0: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
f000: 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c  r,        0,  1,
f010: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
f020: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65  .        { OP_Se
f030: 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  tCookie,      0,
f040: 20 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20    0,  1},    /* 
f050: 32 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20  2 */.      };.  
f060: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
f070: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f080: 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63  beVerifyNoMalloc
f090: 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61  Required(v, Arra
f0a0: 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29  ySize(setCookie)
f0b0: 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73  );.      aOp = s
f0c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
f0d0: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
f0e0: 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74  (setCookie), set
f0f0: 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20  Cookie, 0);.    
f100: 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45    if( ONLY_IF_RE
f110: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70  ALLOC_STRESS(aOp
f120: 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20  ==0) ) break;.  
f130: 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20      aOp[0].p1 = 
f140: 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31  iDb;.      aOp[1
f150: 5d 2e 70 31 20 3d 20 73 71 6c 69 74 65 33 41 74  ].p1 = sqlite3At
f160: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
f170: 20 20 61 4f 70 5b 32 5d 2e 70 31 20 3d 20 69 44    aOp[2].p1 = iD
f180: 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e  b;.      aOp[2].
f190: 70 32 20 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20 20  p2 = iCookie;.  
f1a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
f1b0: 2a 20 52 65 61 64 20 74 68 65 20 73 70 65 63 69  * Read the speci
f1c0: 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75  fied cookie valu
f1d0: 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  e */.      stati
f1e0: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
f1f0: 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20  st readCookie[] 
f200: 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
f210: 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
f220: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20    0,  0,  0},   
f230: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
f240: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
f250: 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30  ,      0,  1,  0
f260: 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
f270: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
f280: 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c 20 20  tRow,       1,  
f290: 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a  1,  0}.      };.
f2a0: 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f        VdbeOp *aO
f2b0: 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  p;.      sqlite3
f2c0: 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c  VdbeVerifyNoMall
f2d0: 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41 72  ocRequired(v, Ar
f2e0: 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b  raySize(readCook
f2f0: 69 65 29 29 3b 0a 20 20 20 20 20 20 61 4f 70 20  ie));.      aOp 
f300: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
f310: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
f320: 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c  ize(readCookie),
f330: 72 65 61 64 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20  readCookie,0);. 
f340: 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46       if( ONLY_IF
f350: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28  _REALLOC_STRESS(
f360: 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b  aOp==0) ) break;
f370: 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31  .      aOp[0].p1
f380: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f   = iDb;.      aO
f390: 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20  p[1].p1 = iDb;. 
f3a0: 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 33 20 3d       aOp[1].p3 =
f3b0: 20 69 43 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20   iCookie;.      
f3c0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
f3d0: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
f3e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
f3f0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
f400: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65  OLNAME_NAME, zLe
f410: 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  ft, SQLITE_TRANS
f420: 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  IENT);.    }.  }
f430: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
f440: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
f450: 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
f460: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
f470: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
f480: 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
f490: 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  GS.  /*.  **   P
f4a0: 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70  RAGMA compile_op
f4b0: 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tions.  **.  ** 
f4c0: 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73  Return the names
f4d0: 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d   of all compile-
f4e0: 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65  time options use
f4f0: 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c  d in this build,
f500: 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e  .  ** one option
f510: 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20   per row..  */. 
f520: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f   case PragTyp_CO
f530: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b  MPILE_OPTIONS: {
f540: 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a  .    int i = 0;.
f550: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
f560: 7a 4f 70 74 3b 0a 20 20 20 20 70 50 61 72 73 65  zOpt;.    pParse
f570: 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20  ->nMem = 1;.    
f580: 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65  setOneColumnName
f590: 28 76 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74  (v, "compile_opt
f5a0: 69 6f 6e 22 29 3b 0a 20 20 20 20 77 68 69 6c 65  ion");.    while
f5b0: 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65  ( (zOpt = sqlite
f5c0: 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
f5d0: 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a  get(i++))!=0 ){.
f5e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f5f0: 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 31  eLoadString(v, 1
f600: 2c 20 7a 4f 70 74 29 3b 0a 20 20 20 20 20 20 73  , zOpt);.      s
f610: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f620: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
f630: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 1);.    }. 
f640: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
f650: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
f660: 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
f670: 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  DIAGS */..#ifnde
f680: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
f690: 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  L.  /*.  **   PR
f6a0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 77 61  AGMA [schema.]wa
f6b0: 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70  l_checkpoint = p
f6c0: 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74  assive|full|rest
f6d0: 61 72 74 7c 74 72 75 6e 63 61 74 65 0a 20 20 2a  art|truncate.  *
f6e0: 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  *.  ** Checkpoin
f6f0: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  t the database..
f700: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f710: 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49  Typ_WAL_CHECKPOI
f720: 4e 54 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  NT: {.    static
f730: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
f740: 6f 6c 5b 5d 20 3d 20 7b 20 22 62 75 73 79 22 2c  ol[] = { "busy",
f750: 20 22 6c 6f 67 22 2c 20 22 63 68 65 63 6b 70 6f   "log", "checkpo
f760: 69 6e 74 65 64 22 20 7d 3b 0a 20 20 20 20 69 6e  inted" };.    in
f770: 74 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a  t iBt = (pId2->z
f780: 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f  ?iDb:SQLITE_MAX_
f790: 41 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69  ATTACHED);.    i
f7a0: 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54  nt eMode = SQLIT
f7b0: 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
f7c0: 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52  SIVE;.    if( zR
f7d0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
f7e0: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
f7f0: 28 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29  (zRight, "full")
f800: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65  ==0 ){.        e
f810: 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
f820: 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20  ECKPOINT_FULL;. 
f830: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
f840: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52  qlite3StrICmp(zR
f850: 69 67 68 74 2c 20 22 72 65 73 74 61 72 74 22 29  ight, "restart")
f860: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65  ==0 ){.        e
f870: 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
f880: 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54  ECKPOINT_RESTART
f890: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
f8a0: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
f8b0: 28 7a 52 69 67 68 74 2c 20 22 74 72 75 6e 63 61  (zRight, "trunca
f8c0: 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  te")==0 ){.     
f8d0: 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54     eMode = SQLIT
f8e0: 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55  E_CHECKPOINT_TRU
f8f0: 4e 43 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a 20  NCATE;.      }. 
f900: 20 20 20 7d 0a 20 20 20 20 73 65 74 41 6c 6c 43     }.    setAllC
f910: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 33 2c  olumnNames(v, 3,
f920: 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74   azCol);  assert
f930: 28 20 33 3d 3d 41 72 72 61 79 53 69 7a 65 28 61  ( 3==ArraySize(a
f940: 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 70 50 61  zCol) );.    pPa
f950: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
f960: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f970: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b  dOp3(v, OP_Check
f980: 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64  point, iBt, eMod
f990: 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  e, 1);.    sqlit
f9a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
f9b0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
f9c0: 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   3);.  }.  break
f9d0: 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  ;..  /*.  **   P
f9e0: 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68  RAGMA wal_autoch
f9f0: 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20  eckpoint.  **   
fa00: 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63  PRAGMA wal_autoc
fa10: 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20  heckpoint = N.  
fa20: 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72  **.  ** Configur
fa30: 65 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e a database con
fa40: 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d  nection to autom
fa50: 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f  atically checkpo
fa60: 69 6e 74 20 61 20 64 61 74 61 62 61 73 65 0a 20  int a database. 
fa70: 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75   ** after accumu
fa80: 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20  lating N frames 
fa90: 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71  in the log. Or q
faa0: 75 65 72 79 20 66 6f 72 20 74 68 65 20 63 75 72  uery for the cur
fab0: 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20  rent value.  ** 
fac0: 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  of N..  */.  cas
fad0: 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55  e PragTyp_WAL_AU
fae0: 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a  TOCHECKPOINT: {.
faf0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
fb00: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
fb10: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
fb20: 6e 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  nt(db, sqlite3At
fb30: 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
fb40: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
fb50: 67 6c 65 49 6e 74 28 76 2c 20 22 77 61 6c 5f 61  gleInt(v, "wal_a
fb60: 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20  utocheckpoint", 
fb70: 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c  .       db->xWal
fb80: 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65  Callback==sqlite
fb90: 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20  3WalDefaultHook 
fba0: 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53 51  ? .           SQ
fbb0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
fbc0: 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30  db->pWalArg) : 0
fbd0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
fbe0: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a  #endif..  /*.  *
fbf0: 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b  *  PRAGMA shrink
fc00: 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a  _memory.  **.  *
fc10: 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
fc20: 2d 4f 46 3a 20 52 2d 32 33 34 34 35 2d 34 36 31  -OF: R-23445-461
fc30: 30 39 20 54 68 69 73 20 70 72 61 67 6d 61 20 63  09 This pragma c
fc40: 61 75 73 65 73 20 74 68 65 20 64 61 74 61 62 61  auses the databa
fc50: 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69  se.  ** connecti
fc60: 6f 6e 20 6f 6e 20 77 68 69 63 68 20 69 74 20 69  on on which it i
fc70: 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 66 72 65  s invoked to fre
fc80: 65 20 75 70 20 61 73 20 6d 75 63 68 20 6d 65 6d  e up as much mem
fc90: 6f 72 79 20 61 73 20 69 74 0a 20 20 2a 2a 20 63  ory as it.  ** c
fca0: 61 6e 2c 20 62 79 20 63 61 6c 6c 69 6e 67 20 73  an, by calling s
fcb0: 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
fcc0: 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a 20 20 2a 2f  e_memory()..  */
fcd0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
fce0: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b  SHRINK_MEMORY: {
fcf0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
fd00: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 64  release_memory(d
fd10: 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  b);.    break;. 
fd20: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
fd30: 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65  PRAGMA busy_time
fd40: 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  out.  **   PRAGM
fd50: 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d  A busy_timeout =
fd60: 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c   N.  **.  ** Cal
fd70: 6c 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74  l sqlite3_busy_t
fd80: 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20  imeout(db, N).  
fd90: 52 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65  Return the curre
fda0: 6e 74 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65  nt timeout value
fdb0: 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20  .  ** if one is 
fdc0: 73 65 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79  set.  If no busy
fdd0: 20 68 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69   handler or a di
fde0: 66 66 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e  fferent busy han
fdf0: 64 6c 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a  dler is set.  **
fe00: 20 74 68 65 6e 20 30 20 69 73 20 72 65 74 75 72   then 0 is retur
fe10: 6e 65 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68  ned.  Setting th
fe20: 65 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74  e busy_timeout t
fe30: 6f 20 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a  o 0 or negative.
fe40: 20 20 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68    ** disables th
fe50: 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a  e timeout..  */.
fe60: 20 20 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70    /*case PragTyp
fe70: 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20  _BUSY_TIMEOUT*/ 
fe80: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61  default: {.    a
fe90: 73 73 65 72 74 28 20 70 50 72 61 67 6d 61 2d 3e  ssert( pPragma->
fea0: 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79  ePragTyp==PragTy
feb0: 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29  p_BUSY_TIMEOUT )
fec0: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
fed0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
fee0: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
fef0: 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
ff00: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
ff10: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
ff20: 6e 74 28 76 2c 20 22 74 69 6d 65 6f 75 74 22 2c  nt(v, "timeout",
ff30: 20 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75    db->busyTimeou
ff40: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
ff50: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
ff60: 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70  PRAGMA soft_heap
ff70: 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 20 50 52  _limit.  **   PR
ff80: 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c  AGMA soft_heap_l
ff90: 69 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  imit = N.  **.  
ffa0: 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
ffb0: 4e 2d 4f 46 3a 20 52 2d 32 36 33 34 33 2d 34 35  N-OF: R-26343-45
ffc0: 39 33 30 20 54 68 69 73 20 70 72 61 67 6d 61 20  930 This pragma 
ffd0: 69 6e 76 6f 6b 65 73 20 74 68 65 0a 20 20 2a 2a  invokes the.  **
ffe0: 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
fff0: 61 70 5f 6c 69 6d 69 74 36 34 28 29 20 69 6e 74  ap_limit64() int
10000 65 72 66 61 63 65 20 77 69 74 68 20 74 68 65 20  erface with the 
10010 61 72 67 75 6d 65 6e 74 20 4e 2c 20 69 66 20 4e  argument N, if N
10020 20 69 73 0a 20 20 2a 2a 20 73 70 65 63 69 66 69   is.  ** specifi
10030 65 64 20 61 6e 64 20 69 73 20 61 20 6e 6f 6e 2d  ed and is a non-
10040 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
10050 2e 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  ..  ** IMPLEMENT
10060 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 36 34 34 35  ATION-OF: R-6445
10070 31 2d 30 37 31 36 33 20 54 68 65 20 73 6f 66 74  1-07163 The soft
10080 5f 68 65 61 70 5f 6c 69 6d 69 74 20 70 72 61 67  _heap_limit prag
10090 6d 61 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 72  ma always.  ** r
100a0 65 74 75 72 6e 73 20 74 68 65 20 73 61 6d 65 20  eturns the same 
100b0 69 6e 74 65 67 65 72 20 74 68 61 74 20 77 6f 75  integer that wou
100c0 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 62  ld be returned b
100d0 79 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  y the.  ** sqlit
100e0 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
100f0 69 74 36 34 28 2d 31 29 20 43 2d 6c 61 6e 67 75  it64(-1) C-langu
10100 61 67 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  age function..  
10110 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
10120 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49  p_SOFT_HEAP_LIMI
10130 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  T: {.    sqlite3
10140 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66  _int64 N;.    if
10150 28 20 7a 52 69 67 68 74 20 26 26 20 73 71 6c 69  ( zRight && sqli
10160 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
10170 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51  (zRight, &N)==SQ
10180 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
10190 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
101a0 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20  ap_limit64(N);. 
101b0 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
101c0 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 73 6f 66  ingleInt(v, "sof
101d0 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20  t_heap_limit",  
101e0 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
101f0 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a  p_limit64(-1));.
10200 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
10210 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
10220 4d 41 20 74 68 72 65 61 64 73 0a 20 20 2a 2a 20  MA threads.  ** 
10230 20 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73    PRAGMA threads
10240 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
10250 6f 6e 66 69 67 75 72 65 20 74 68 65 20 6d 61 78  onfigure the max
10260 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 77  imum number of w
10270 6f 72 6b 65 72 20 74 68 72 65 61 64 73 2e 20 20  orker threads.  
10280 52 65 74 75 72 6e 20 74 68 65 20 6e 65 77 0a 20  Return the new. 
10290 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68 69   ** maximum, whi
102a0 63 68 20 6d 69 67 68 74 20 62 65 20 6c 65 73 73  ch might be less
102b0 20 74 68 61 6e 20 72 65 71 75 65 73 74 65 64 2e   than requested.
102c0 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
102d0 67 54 79 70 5f 54 48 52 45 41 44 53 3a 20 7b 0a  gTyp_THREADS: {.
102e0 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
102f0 34 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  4 N;.    if( zRi
10300 67 68 74 0a 20 20 20 20 20 26 26 20 73 71 6c 69  ght.     && sqli
10310 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
10320 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51  (zRight, &N)==SQ
10330 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26 20  LITE_OK.     && 
10340 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  N>=0.    ){.    
10350 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28    sqlite3_limit(
10360 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54  db, SQLITE_LIMIT
10370 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
10380 20 28 69 6e 74 29 28 4e 26 30 78 37 66 66 66 66   (int)(N&0x7ffff
10390 66 66 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  fff));.    }.   
103a0 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
103b0 28 76 2c 20 22 74 68 72 65 61 64 73 22 2c 0a 20  (v, "threads",. 
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103d0 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
103e0 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49  (db, SQLITE_LIMI
103f0 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
10400 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61  , -1));.    brea
10410 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69  k;.  }..#if defi
10420 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
10430 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
10440 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20  ITE_TEST).  /*. 
10450 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63   ** Report the c
10460 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20  urrent state of 
10470 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c  file logs for al
10480 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f  l databases.  */
10490 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
104a0 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20  LOCK_STATUS: {. 
104b0 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
104c0 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f  char *const azLo
104d0 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  ckName[] = {.   
104e0 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22     "unlocked", "
104f0 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76  shared", "reserv
10500 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20  ed", "pending", 
10510 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20  "exclusive".    
10520 7d 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  };.    static co
10530 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b  nst char *azCol[
10540 5d 20 3d 20 7b 20 22 64 61 74 61 62 61 73 65 22  ] = { "database"
10550 2c 20 22 73 74 61 74 75 73 22 20 7d 3b 0a 20 20  , "status" };.  
10560 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 65 74    int i;.    set
10570 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
10580 2c 20 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73  , 2, azCol); ass
10590 65 72 74 28 20 32 3d 3d 41 72 72 61 79 53 69 7a  ert( 2==ArraySiz
105a0 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
105b0 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32  pParse->nMem = 2
105c0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
105d0 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
105e0 20 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74        Btree *pBt
105f0 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  ;.      const ch
10600 61 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e  ar *zState = "un
10610 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e  known";.      in
10620 74 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64  t j;.      if( d
10630 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d  b->aDb[i].zName=
10640 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
10650 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61       pBt = db->a
10660 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20  Db[i].pBt;.     
10670 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73   if( pBt==0 || s
10680 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
10690 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  (pBt)==0 ){.    
106a0 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63 6c      zState = "cl
106b0 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c  osed";.      }el
106c0 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f 66  se if( sqlite3_f
106d0 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
106e0 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  i ? db->aDb[i].z
106f0 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20 20  Name : 0, .     
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10720 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43  SQLITE_FCNTL_LOC
10730 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c  KSTATE, &j)==SQL
10740 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
10750 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f     zState = azLo
10760 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20  ckName[j];.     
10770 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
10780 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
10790 20 31 2c 20 22 73 73 22 2c 20 64 62 2d 3e 61 44   1, "ss", db->aD
107a0 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 53 74 61  b[i].zName, zSta
107b0 74 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  te);.      sqlit
107c0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
107d0 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
107e0 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62   2);.    }.    b
107f0 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
10800 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
10810 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65  HAS_CODEC.  case
10820 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a   PragTyp_KEY: {.
10830 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
10840 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28   sqlite3_key_v2(
10850 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c  db, zDb, zRight,
10860 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
10870 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62  (zRight));.    b
10880 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65  reak;.  }.  case
10890 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20   PragTyp_REKEY: 
108a0 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
108b0 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79   ) sqlite3_rekey
108c0 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69  _v2(db, zDb, zRi
108d0 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  ght, sqlite3Strl
108e0 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20  en30(zRight));. 
108f0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
10900 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58  case PragTyp_HEX
10910 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
10920 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75  Right ){.      u
10930 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69  8 iByte;.      i
10940 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72  nt i;.      char
10950 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20   zKey[40];.     
10960 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d   for(i=0, iByte=
10970 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79  0; i<sizeof(zKey
10980 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73  )*2 && sqlite3Is
10990 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d  xdigit(zRight[i]
109a0 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ); i++){.       
109b0 20 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c   iByte = (iByte<
109c0 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78  <4) + sqlite3Hex
109d0 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29  ToInt(zRight[i])
109e0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69  ;.        if( (i
109f0 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f  &1)!=0 ) zKey[i/
10a00 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20  2] = iByte;.    
10a10 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a    }.      if( (z
10a20 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d  Left[3] & 0xf)==
10a30 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73  0xb ){.        s
10a40 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62  qlite3_key_v2(db
10a50 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
10a60 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
10a70 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
10a80 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
10a90 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20  , zKey, i/2);.  
10aa0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
10ab0 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
10ac0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
10ad0 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20  LITE_HAS_CODEC) 
10ae0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
10af0 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a  E_ENABLE_CEROD).
10b00 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41    case PragTyp_A
10b10 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f  CTIVATE_EXTENSIO
10b20 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  NS: if( zRight )
10b30 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
10b40 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66  HAS_CODEC.    if
10b50 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
10b60 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22  p(zRight, "see-"
10b70 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  , 4)==0 ){.     
10b80 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74   sqlite3_activat
10b90 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d  e_see(&zRight[4]
10ba0 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
10bb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
10bc0 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69  ABLE_CEROD.    i
10bd0 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
10be0 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f  mp(zRight, "cero
10bf0 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20  d-", 6)==0 ){.  
10c00 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69      sqlite3_acti
10c10 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67  vate_cerod(&zRig
10c20 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[6]);.    }.#e
10c30 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
10c40 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a  ;.#endif..  } /*
10c50 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47   End of the PRAG
10c60 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72  MA switch */..pr
10c70 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69  agma_out:.  sqli
10c80 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c  te3DbFree(db, zL
10c90 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  eft);.  sqlite3D
10ca0 62 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74  bFree(db, zRight
10cb0 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  );.}..#endif /* 
10cc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
10cd0 4d 41 20 2a 2f 0a                                MA */.