/ Hex Artifact Content
Login

Artifact 17e0049780fee7594233d627ad8da19a81a335c7:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20  or ON or NORMAL 
04c0: 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20  and 2 for FULL. 
04d0: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e   Return 1 for an
04e0: 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e   empty or .** un
04f0: 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e  recognized strin
0500: 67 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65  g argument.  The
0510: 20 46 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20   FULL option is 
0520: 64 69 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66  disallowed.** if
0530: 20 74 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61   the omitFull pa
0540: 72 61 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a  rameter it 1..**
0550: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
0560: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
0570: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
0580: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
0590: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
05a0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
05b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
05c0: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
05d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
05e0: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
05f0: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
0600: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
0610: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
0620: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
0630: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
0640: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
0650: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
0660: 2f 0a 73 74 61 74 69 63 20 75 38 20 67 65 74 53  /.static u8 getS
0670: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
0680: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d   char *z, int om
0690: 69 74 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29  itFull, u8 dflt)
06a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
06c0: 2a 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34  * 123456789 1234
06d0: 35 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69  56789 */.  stati
06e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65  c const char zTe
06f0: 78 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73  xt[] = "onoffals
0700: 65 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20  eyestruefull";. 
0710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0720: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0730: 20 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c   1, 2, 4, 9, 12,
0740: 20 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63   16};.  static c
0750: 6f 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b  onst u8 iLength[
0760: 5d 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c  ] = {2, 2, 3, 5,
0770: 20 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61   3, 4, 4};.  sta
0780: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61  tic const u8 iVa
0790: 6c 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20  lue[] =  {1, 0, 
07a0: 30 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a  0, 0, 1, 1, 2};.
07b0: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66    int i, n;.  if
07c0: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
07d0: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
07e0: 72 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74  rn (u8)sqlite3At
07f0: 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  oi(z);.  }.  n =
0800: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
0810: 28 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  (z);.  for(i=0; 
0820: 69 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e  i<ArraySize(iLen
0830: 67 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69  gth)-omitFull; i
0840: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65  ++){.    if( iLe
0850: 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71  ngth[i]==n && sq
0860: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a  lite3StrNICmp(&z
0870: 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d  Text[iOffset[i]]
0880: 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ,z,n)==0 ){.    
0890: 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b    return iValue[
08a0: 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  i];.    }.  }.  
08b0: 72 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a  return dflt;.}..
08c0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
08d0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
08e0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
08f0: 6c 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74  lue..*/.u8 sqlit
0900: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
0910: 73 74 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64  st char *z, u8 d
0920: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
0930: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
0940: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
0950: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
0960: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
0970: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
0980: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
0990: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
09a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
09b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
09c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
09d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
09e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
09f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
0a00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
0a10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
0a20: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0a30: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
0a40: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0a50: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0a60: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
0a70: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
0a80: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
0a90: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
0aa0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
0ab0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0ac0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
0ad0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
0ae0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
0af0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
0b00: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0b10: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
0b20: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
0b30: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0b40: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
0b50: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
0b60: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
0b70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
0b80: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0b90: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
0ba0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
0bb0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
0bc0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
0bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
0be0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
0bf0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
0c00: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
0c10: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
0c20: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
0c30: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
0c40: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
0c50: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
0c60: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
0c70: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
0c80: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
0c90: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0ca0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
0cb0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
0cc0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
0cd0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
0ce0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0cf0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
0d00: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
0d10: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
0d20: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
0d30: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
0d40: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d50: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
0d60: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
0d70: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
0d80: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
0d90: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
0da0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
0db0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
0dc0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
0dd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
0de0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
0df0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
0e00: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
0e10: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
0e20: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
0e30: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
0e40: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
0e50: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
0e60: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
0e70: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
0e80: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
0e90: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
0ea0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
0eb0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
0ec0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
0ed0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
0ee0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
0ef0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
0f00: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
0f10: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
0f20: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
0f30: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
0f40: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
0f50: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
0f60: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
0f70: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
0f80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
0f90: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
0fa0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
0fb0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
0fc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
0fd0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
0fe0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
0ff0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
1000: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
1010: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
1020: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
1030: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
1040: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
1050: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1060: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
1070: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
1080: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
1090: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
10a0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
10b0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
10c0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
10d0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
10e0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
10f0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
1100: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
1110: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
1120: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
1130: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
1140: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
1150: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
1160: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
1170: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
1180: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
1190: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11a0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
11b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
11c0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
11d0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
11e0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
11f0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1200: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1210: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
1220: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1230: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
1240: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
1250: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
1260: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1270: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
1280: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
1290: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
12a0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
12b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12c0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
12d0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
12e0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
12f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
1300: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
1310: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
1320: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
1330: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
1340: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
1350: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
1360: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
1370: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
1380: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
1390: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
13a0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
13b0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
13c0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
13d0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
13e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
13f0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
1400: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
1410: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
1420: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
1430: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1440: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
1450: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
1460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1470: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
1480: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
1490: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72   */../*.** Gener
14a0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
14b0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
14c0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
14d0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
14e0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
14f0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
1500: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
1510: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
1520: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
1530: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
1540: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
1550: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
1560: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
1570: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
1580: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
1590: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
15a0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
15b0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
15c0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
15d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
15e0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
15f0: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
1600: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
1610: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
1620: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
1630: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
1640: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
1650: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
1660: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
1670: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
1680: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
1690: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
16a0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
16b0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
16c0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
16d0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
16e0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
16f0: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
1700: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
1710: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
1720: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1730: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
1740: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
1750: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
1760: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
1770: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
1780: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
1790: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
17a0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
17b0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
17c0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
17d0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
17e0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
17f0: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
1800: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
1810: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1820: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
1830: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
1840: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
1850: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
1860: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
1870: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
1880: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
1890: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
18a0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
18b0: 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28   );.    while( (
18c0: 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20  n--) > 0 ){.    
18d0: 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29    if( pDb->pBt )
18e0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
18f0: 33 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c  3BtreeSetPagerFl
1900: 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20  ags(pDb->pBt,.  
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1920: 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65  pDb->safety_leve
1930: 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52  l & PAGER_SYNCHR
1940: 4f 4e 4f 55 53 5f 4d 41 53 4b 29 0a 20 20 20 20  ONOUS_MASK).    
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c                 |
1960: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50 41   (db->flags & PA
1970: 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20  GER_FLAGS_MASK) 
1980: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1990: 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   pDb++;.    }.  
19a0: 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  }.}.#else.# defi
19b0: 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c  ne setAllPagerFl
19c0: 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70  ags(X)  /* no-op
19d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a   */.#endif.../*.
19e0: 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d 61  ** Return a huma
19f0: 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65 20  n-readable name 
1a00: 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  for a constraint
1a10: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74 69   resolution acti
1a20: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1a30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
1a40: 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63 6f  GN_KEY.static co
1a50: 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f 6e  nst char *action
1a60: 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29 7b  Name(u8 action){
1a70: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1a80: 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28 20  Name;.  switch( 
1a90: 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63 61  action ){.    ca
1aa0: 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20 20  se OE_SetNull:  
1ab0: 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55 4c  zName = "SET NUL
1ac0: 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  L";        break
1ad0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65  ;.    case OE_Se
1ae0: 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d 20  tDflt:  zName = 
1af0: 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20 20  "SET DEFAULT";  
1b00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1b10: 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20 20  se OE_Cascade:  
1b20: 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44 45  zName = "CASCADE
1b30: 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ";         break
1b40: 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52 65  ;.    case OE_Re
1b50: 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d 20  strict: zName = 
1b60: 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20 20  "RESTRICT";     
1b70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
1b80: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20  fault:          
1b90: 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54 49  zName = "NO ACTI
1ba0: 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20 20  ON";  .         
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
1bc0: 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45 5f  ert( action==OE_
1bd0: 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a 20  None ); break;. 
1be0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d   }.  return zNam
1bf0: 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  e;.}.#endif.../*
1c00: 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65 4d  .** Parameter eM
1c10: 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65 20  ode must be one 
1c20: 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55  of the PAGER_JOU
1c30: 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f 6e  RNALMODE_XXX con
1c40: 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e 65  stants.** define
1c50: 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54 68  d in pager.h. Th
1c60: 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  is function retu
1c70: 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61 74  rns the associat
1c80: 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a 20  ed lowercase.** 
1c90: 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61 6d  journal-mode nam
1ca0: 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  e..*/.const char
1cb0: 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
1cc0: 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d 6f  Modename(int eMo
1cd0: 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63 68  de){.  static ch
1ce0: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f 64  ar * const azMod
1cf0: 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eName[] = {.    
1d00: 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73 69  "delete", "persi
1d10: 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72 75  st", "off", "tru
1d20: 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79 22  ncate", "memory"
1d30: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d40: 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c 20  OMIT_WAL.     , 
1d50: 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20 7d  "wal".#endif.  }
1d60: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
1d70: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
1d80: 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73  LETE==0 );.  ass
1d90: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
1da0: 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d 3d  ALMODE_PERSIST==
1db0: 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50  1 );.  assert( P
1dc0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
1dd0: 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73 73  _OFF==2 );.  ass
1de0: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
1df0: 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 3d  ALMODE_TRUNCATE=
1e00: 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =3 );.  assert( 
1e10: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
1e20: 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a 20  E_MEMORY==4 );. 
1e30: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
1e40: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d 3d  OURNALMODE_WAL==
1e50: 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 65  5 );.  assert( e
1e60: 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64 65  Mode>=0 && eMode
1e70: 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f  <=ArraySize(azMo
1e80: 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69 66  deName) );..  if
1e90: 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53 69  ( eMode==ArraySi
1ea0: 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29  ze(azModeName) )
1eb0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74   return 0;.  ret
1ec0: 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 65  urn azModeName[e
1ed0: 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Mode];.}../*.** 
1ee0: 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d 61  Process a pragma
1ef0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a 2a   statement.  .**
1f00: 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65 20  .** Pragmas are 
1f10: 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a 2a  of this form:.**
1f20: 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41 20  .**      PRAGMA 
1f30: 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b 3d  [database.]id [=
1f40: 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54 68   value].**.** Th
1f50: 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69 67  e identifier mig
1f60: 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74 72  ht also be a str
1f70: 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ing.  The value 
1f80: 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e 64  is a string, and
1f90: 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c 20  .** identifier, 
1fa0: 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  or a number.  If
1fb0: 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74 72   minusFlag is tr
1fc0: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ue, then the val
1fd0: 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65  ue is.** a numbe
1fe0: 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63 65  r that was prece
1ff0: 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20 73  ded by a minus s
2000: 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ign..**.** If th
2010: 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 22  e left side is "
2020: 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68 65  database.id" the
2030: 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64 61  n pId1 is the da
2040: 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20 61  tabase name.** a
2050: 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20 69  nd pId2 is the i
2060: 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74 20  d.  If the left 
2070: 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69 64  side is just "id
2080: 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74  " then pId1 is t
2090: 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49 64  he.** id and pId
20a0: 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20 73  2 is any empty s
20b0: 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73  tring..*/.void s
20c0: 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20 20  qlite3Pragma(.  
20d0: 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 0a  Parse *pParse, .
20e0: 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20 20    Token *pId1,  
20f0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 70        /* First p
2100: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
2110: 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20  .]id field */.  
2120: 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20  Token *pId2,    
2130: 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61      /* Second pa
2140: 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e  rt of [database.
2150: 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55  ]id field, or NU
2160: 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  LL */.  Token *p
2170: 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54  Value,      /* T
2180: 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e  oken for <value>
2190: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  , or NULL */.  i
21a0: 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20  nt minusFlag    
21b0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20     /* True if a 
21c0: 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64 65  '-' sign precede
21d0: 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a  d <value> */.){.
21e0: 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20    char *zLeft = 
21f0: 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d  0;       /* Nul-
2200: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
2210: 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a   string <id> */.
2220: 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d    char *zRight =
2230: 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d   0;      /* Nul-
2240: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
2250: 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c   string <value>,
2260: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f   or NULL */.  co
2270: 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  nst char *zDb = 
2280: 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61  0;   /* The data
2290: 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  base name */.  T
22a0: 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20  oken *pId;      
22b0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
22c0: 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a   to <id> token *
22d0: 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c  /.  char *aFcntl
22e0: 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72  [4];       /* Ar
22f0: 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45  gument to SQLITE
2300: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
2310: 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
2320: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
2330: 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20  abase index for 
2340: 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20  <database> */.  
2350: 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69  int lwr, upr, mi
2360: 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20  d = 0;       /* 
2370: 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f  Binary search bo
2380: 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63  unds */.  int rc
2390: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23a0: 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e         /* return
23b0: 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49   value form SQLI
23c0: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
23d0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
23e0: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20   = pParse->db;  
23f0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
2400: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
2410: 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20    Db *pDb;      
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2430: 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20 64  * The specific d
2440: 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70 72  atabase being pr
2450: 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65  agmaed */.  Vdbe
2460: 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74   *v = sqlite3Get
2470: 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f  Vdbe(pParse);  /
2480: 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74 65  * Prepared state
2490: 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ment */.  const 
24a0: 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e 61  struct sPragmaNa
24b0: 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20  mes *pPragma;.. 
24c0: 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74 75   if( v==0 ) retu
24d0: 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rn;.  sqlite3Vdb
24e0: 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b  eRunOnlyOnce(v);
24f0: 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20  .  pParse->nMem 
2500: 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72  = 2;..  /* Inter
2510: 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62 61  pret the [databa
2520: 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68 65  se.] part of the
2530: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
2540: 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20 20  t. iDb is the.  
2550: 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  ** index of the 
2560: 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70 72  database this pr
2570: 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61 70  agma is being ap
2580: 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e 61  plied to in db.a
2590: 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d  Db[]. */.  iDb =
25a0: 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
25b0: 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64 31  ame(pParse, pId1
25c0: 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a 20  , pId2, &pId);. 
25d0: 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65 74   if( iDb<0 ) ret
25e0: 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  urn;.  pDb = &db
25f0: 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f  ->aDb[iDb];..  /
2600: 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64 61  * If the temp da
2610: 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e 20  tabase has been 
2620: 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65 64  explicitly named
2630: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
2640: 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d 61  .  ** pragma, ma
2650: 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f 70  ke sure it is op
2660: 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  en. .  */.  if( 
2670: 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74 65  iDb==1 && sqlite
2680: 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
2690: 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20  e(pParse) ){.   
26a0: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20   return;.  }..  
26b0: 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33 4e  zLeft = sqlite3N
26c0: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
26d0: 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c   pId);.  if( !zL
26e0: 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  eft ) return;.  
26f0: 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b  if( minusFlag ){
2700: 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71  .    zRight = sq
2710: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
2720: 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29 3b   "-%T", pValue);
2730: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52  .  }else{.    zR
2740: 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e 61  ight = sqlite3Na
2750: 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20  meFromToken(db, 
2760: 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20 20  pValue);.  }..  
2770: 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a  assert( pId2 );.
2780: 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e    zDb = pId2->n>
2790: 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20 3a  0 ? pDb->zName :
27a0: 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
27b0: 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72 73  3AuthCheck(pPars
27c0: 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41  e, SQLITE_PRAGMA
27d0: 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c  , zLeft, zRight,
27e0: 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74   zDb) ){.    got
27f0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
2800: 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20  }..  /* Send an 
2810: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2820: 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c  GMA file-control
2830: 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69   to the underlyi
2840: 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e  ng VFS.  ** conn
2850: 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72  ection.  If it r
2860: 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b  eturns SQLITE_OK
2870: 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68  , then assume th
2880: 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20  at the VFS.  ** 
2890: 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67  handled the prag
28a0: 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20  ma and generate 
28b0: 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64  a no-op prepared
28c0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a   statement..  **
28d0: 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  .  ** IMPLEMENTA
28e0: 54 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38  TION-OF: R-12238
28f0: 2d 35 35 31 32 30 20 57 68 65 6e 65 76 65 72 20  -55120 Whenever 
2900: 61 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65  a PRAGMA stateme
2910: 6e 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20  nt is parsed,.  
2920: 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e  ** an SQLITE_FCN
2930: 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63  TL_PRAGMA file c
2940: 6f 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74  ontrol is sent t
2950: 6f 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74  o the open sqlit
2960: 65 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a  e3_file.  ** obj
2970: 65 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ect correspondin
2980: 67 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  g to the databas
2990: 65 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20  e file to which 
29a0: 74 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20  the pragma.  ** 
29b0: 73 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73  statement refers
29c0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c  ..  **.  ** IMPL
29d0: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
29e0: 2d 32 39 38 37 35 2d 33 31 36 37 38 20 54 68 65  -29875-31678 The
29f0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2a00: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2a10: 41 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63  AGMA.  ** file c
2a20: 6f 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72  ontrol is an arr
2a30: 61 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  ay of pointers t
2a40: 6f 20 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a  o strings (char*
2a50: 2a 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a  *) in which the.
2a60: 20 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d    ** second elem
2a70: 65 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61 79  ent of the array
2a80: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2a90: 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74  the pragma and t
2aa0: 68 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c  he third.  ** el
2ab0: 65 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72 67  ement is the arg
2ac0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61  ument to the pra
2ad0: 67 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74  gma or NULL if t
2ae0: 68 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f  he pragma has no
2af0: 0a 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a  .  ** argument..
2b00: 20 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d    */.  aFcntl[0]
2b10: 20 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31   = 0;.  aFcntl[1
2b20: 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63  ] = zLeft;.  aFc
2b30: 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b  ntl[2] = zRight;
2b40: 0a 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30  .  aFcntl[3] = 0
2b50: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
2b60: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
2b70: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
2b80: 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a  le_control(db, z
2b90: 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  Db, SQLITE_FCNTL
2ba0: 5f 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29  _PRAGMA, (void*)
2bb0: 61 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72  aFcntl);.  if( r
2bc0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2bd0: 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30      if( aFcntl[0
2be0: 5d 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d  ] ){.      int m
2bf0: 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  em = ++pParse->n
2c00: 4d 65 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Mem;.      sqlit
2c10: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
2c20: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d  OP_String8, 0, m
2c30: 65 6d 2c 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d  em, 0, aFcntl[0]
2c40: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
2c50: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
2c60: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
2c70: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
2c80: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
2c90: 4d 45 5f 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74  ME_NAME, "result
2ca0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
2cb0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2cc0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
2cd0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c  _ResultRow, mem,
2ce0: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
2cf0: 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30  e3_free(aFcntl[0
2d00: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  ]);.    }.    go
2d10: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2d20: 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
2d30: 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a  ITE_NOTFOUND ){.
2d40: 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30      if( aFcntl[0
2d50: 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ] ){.      sqlit
2d60: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
2d70: 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b  e, "%s", aFcntl[
2d80: 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0]);.      sqlit
2d90: 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30  e3_free(aFcntl[0
2da0: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50  ]);.    }.    pP
2db0: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
2dc0: 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72    pParse->rc = r
2dd0: 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67  c;.    goto prag
2de0: 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  ma_out;.  }..  /
2df0: 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61  * Locate the pra
2e00: 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75  gma in the looku
2e10: 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72  p table */.  lwr
2e20: 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72   = 0;.  upr = Ar
2e30: 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e  raySize(aPragmaN
2e40: 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65  ames)-1;.  while
2e50: 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20  ( lwr<=upr ){.  
2e60: 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72    mid = (lwr+upr
2e70: 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  )/2;.    rc = sq
2e80: 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c  lite3_stricmp(zL
2e90: 65 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65  eft, aPragmaName
2ea0: 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  s[mid].zName);. 
2eb0: 20 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62     if( rc==0 ) b
2ec0: 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63  reak;.    if( rc
2ed0: 3c 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20  <0 ){.      upr 
2ee0: 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d  = mid - 1;.    }
2ef0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20  else{.      lwr 
2f00: 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d  = mid + 1;.    }
2f10: 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75  .  }.  if( lwr>u
2f20: 70 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  pr ) goto pragma
2f30: 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61 20  _out;.  pPragma 
2f40: 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  = &aPragmaNames[
2f50: 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  mid];..  /* Make
2f60: 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
2f70: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61  se schema is loa
2f80: 64 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d  ded if the pragm
2f90: 61 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  a requires that 
2fa0: 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d  */.  if( (pPragm
2fb0: 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  a->mPragFlag & P
2fc0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
2fd0: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
2fe0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
2ff0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
3000: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
3010: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
3020: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
3030: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
3040: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72  */.  switch( pPr
3050: 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29  agma->ePragTyp )
3060: 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  {.  .#if !define
3070: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
3080: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
3090: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
30a0: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
30b0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
30c0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65  MA [database.]de
30d0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
30e0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
30f0: 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74  atabase.]default
3100: 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20  _cache_size=N.  
3110: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
3120: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
3130: 68 65 20 63 75 72 72 65 6e 74 20 70 65 72 73 69  he current persi
3140: 73 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  stent setting fo
3150: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
3160: 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65  cache size.  The
3170: 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
3180: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  is the maximum n
3190: 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61  umber of.  ** pa
31a0: 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20  ges in the page 
31b0: 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f  cache.  The seco
31c0: 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74  nd form sets bot
31d0: 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20  h the current.  
31e0: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
31f0: 7a 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  ze value and the
3200: 20 70 65 72 73 69 73 74 65 6e 74 20 70 61 67 65   persistent page
3210: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
3220: 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  e.  ** stored in
3230: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3240: 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c  le..  **.  ** Ol
3250: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
3260: 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74  SQLite would set
3270: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
3280: 68 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a  he size to a.  *
3290: 2a 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  * negative numbe
32a0: 72 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79  r to indicate sy
32b0: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20  nchronous=OFF.  
32c0: 54 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63  These days, sync
32d0: 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20  hronous.  ** is 
32e0: 61 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66  always on by def
32f0: 61 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20  ault regardless 
3300: 6f 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74  of the sign of t
3310: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
3320: 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74  .  ** size.  But
3330: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b   continue to tak
3340: 65 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  e the absolute v
3350: 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 61  alue of the defa
3360: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
3370: 69 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61  ize of historica
3380: 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e  l compatibility.
3390: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
33a0: 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41 43  gTyp_DEFAULT_CAC
33b0: 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  HE_SIZE: {.    s
33c0: 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
33d0: 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45  iLn = VDBE_OFFSE
33e0: 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20  T_LINENO(2);.   
33f0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
3400: 62 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68  beOpList getCach
3410: 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eSize[] = {.    
3420: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
3430: 6f 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20  on, 0, 0,       
3440: 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20   0},            
3450: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3460: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
3470: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20  ReadCookie,  0, 
3480: 31 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f  1,        BTREE_
3490: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
34a0: 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  ZE},  /* 1 */.  
34b0: 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20      { OP_IfPos, 
34c0: 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20        1, 8,     
34d0: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
34e0: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
34f0: 2c 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 2,        0},.
3500: 20 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72        { OP_Subtr
3510: 61 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20  act,    1, 2,   
3520: 20 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b       1},.      {
3530: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
3540: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
3550: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
3560: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20  eger,     0, 1, 
3570: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20         0},      
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20     /* 6 */.     
35a0: 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20   { OP_Noop,     
35b0: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
35c0: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52  0},.      { OP_R
35d0: 65 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31  esultRow,   1, 1
35e0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
35f0: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64 72   };.    int addr
3600: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3610: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
3620: 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  b);.    if( !zRi
3630: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
3640: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
3650: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
3660: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
3670: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
3680: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65  AME_NAME, "cache
3690: 5f 73 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53  _size", SQLITE_S
36a0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 50  TATIC);.      pP
36b0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b  arse->nMem += 2;
36c0: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
36d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
36e0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
36f0: 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67  getCacheSize), g
3700: 65 74 43 61 63 68 65 53 69 7a 65 2c 69 4c 6e 29  etCacheSize,iLn)
3710: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3720: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
3730: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
3740: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
3750: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
3760: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
3770: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
3780: 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49 54  v, addr+6, SQLIT
3790: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
37a0: 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65  SIZE);.    }else
37b0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
37c0: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
37d0: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
37e0: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
37f0: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
3800: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
3810: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
3820: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
3830: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
3840: 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20  , size, 1);.    
3850: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
3860: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
3870: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
3880: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
3890: 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73  ZE, 1);.      as
38a0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
38b0: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
38c0: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
38d0: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
38e0: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
38f0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
3900: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
3910: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
3920: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
3930: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  size);.    }.   
3940: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
3950: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
3960: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3970: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
3980: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
3990: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
39a0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
39b0: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
39c0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
39d0: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
39e0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
39f0: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
3a00: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
3a10: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
3a20: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
3a30: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
3a40: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
3a50: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
3a60: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3a70: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
3a80: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
3a90: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
3aa0: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
3ab0: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
3ac0: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
3ad0: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
3ae0: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
3af0: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
3b00: 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  ZE: {.    Btree 
3b10: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
3b20: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
3b30: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
3b40: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
3b50: 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59  int size = ALWAY
3b60: 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33  S(pBt) ? sqlite3
3b70: 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65  BtreeGetPageSize
3b80: 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20  (pBt) : 0;.     
3b90: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
3ba0: 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f 73  (pParse, "page_s
3bb0: 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20  ize", size);.   
3bc0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
3bd0: 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c   Malloc may fail
3be0: 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68   when setting th
3bf0: 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20  e page-size, as 
3c00: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
3c10: 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75  rnal.      ** bu
3c20: 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61  ffer that the pa
3c30: 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a  ger module resiz
3c40: 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  es using sqlite3
3c50: 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20  _realloc()..    
3c60: 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e    */.      db->n
3c70: 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71  extPagesize = sq
3c80: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
3c90: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c  );.      if( SQL
3ca0: 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74  ITE_NOMEM==sqlit
3cb0: 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69  e3BtreeSetPageSi
3cc0: 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74  ze(pBt, db->next
3cd0: 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29  Pagesize,-1,0) )
3ce0: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61  {.        db->ma
3cf0: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
3d00: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
3d10: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
3d20: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
3d30: 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72  [database.]secur
3d40: 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50  e_delete.  **  P
3d50: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
3d60: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f  ]secure_delete=O
3d70: 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20  N/OFF.  **.  ** 
3d80: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
3d90: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
3da0: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
3db0: 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64  he.  ** secure_d
3dc0: 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65  elete flag.  The
3dd0: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61   second form cha
3de0: 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65 5f  nges the secure_
3df0: 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67  delete.  ** flag
3e00: 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70   setting and rep
3e10: 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75  orts thenew valu
3e20: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
3e30: 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45  ragTyp_SECURE_DE
3e40: 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  LETE: {.    Btre
3e50: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
3e60: 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d  t;.    int b = -
3e70: 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
3e80: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
3e90: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
3ea0: 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42   b = sqlite3GetB
3eb0: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
3ec0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
3ed0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62   pId2->n==0 && b
3ee0: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  >=0 ){.      int
3ef0: 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   ii;.      for(i
3f00: 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
3f10: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
3f20: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75  sqlite3BtreeSecu
3f30: 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62  reDelete(db->aDb
3f40: 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20  [ii].pBt, b);.  
3f50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3f60: 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  b = sqlite3Btree
3f70: 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74  SecureDelete(pBt
3f80: 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , b);.    return
3f90: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
3fa0: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
3fb0: 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  ", b);.    break
3fc0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
3fd0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
3fe0: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
3ff0: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
4000: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
4010: 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a  age_count=N.  **
4020: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
4030: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
4040: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
4050: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   for the.  ** ma
4060: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
4070: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
4080: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
4090: 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f   .  ** second fo
40a0: 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63  rm attempts to c
40b0: 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69  hange this setti
40c0: 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66  ng.  Both.  ** f
40d0: 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20  orms return the 
40e0: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e  current setting.
40f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61  .  **.  ** The a
4100: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
4110: 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69   N is used.  Thi
4120: 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
4130: 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a  d and might.  **
4140: 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e   change.  The on
4150: 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f  ly purpose is to
4160: 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79   provide an easy
4170: 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a   way to test.  *
4180: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73  * the sqlite3Abs
4190: 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e  Int32() function
41a0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  **.  **  PRA
41b0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70  GMA [database.]p
41c0: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  age_count.  **. 
41d0: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
41e0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
41f0: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
4200: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
4210: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
4220: 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20  GE_COUNT: {.    
4230: 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71  int iReg;.    sq
4240: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
4250: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
4260: 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b  b);.    iReg = +
4270: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
4280: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f     if( sqlite3To
4290: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
42a0: 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71  ='p' ){.      sq
42b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
42c0: 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c  v, OP_Pagecount,
42d0: 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20   iDb, iReg);.   
42e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
42f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
4300: 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20  v, OP_MaxPgcnt, 
4310: 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20  iDb, iReg, .    
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4330: 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e      sqlite3AbsIn
4340: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
4350: 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d  zRight)));.    }
4360: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4370: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
4380: 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29  ultRow, iReg, 1)
4390: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
43a0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
43b0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
43c0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
43d0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
43e0: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
43f0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62  RANSIENT);.    b
4400: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
4410: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
4420: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f  tabase.]locking_
4430: 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  mode.  **  PRAGM
4440: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
4450: 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72  king_mode = (nor
4460: 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a 20  mal|exclusive). 
4470: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
4480: 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a  yp_LOCKING_MODE:
4490: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
44a0: 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61  r *zRet = "norma
44b0: 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  l";.    int eMod
44c0: 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f  e = getLockingMo
44d0: 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20  de(zRight);..   
44e0: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
44f0: 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  && eMode==PAGER_
4500: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52  LOCKINGMODE_QUER
4510: 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69  Y ){.      /* Si
4520: 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f 63  mple "PRAGMA loc
4530: 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74  king_mode;" stat
4540: 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 61  ement. This is a
4550: 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20 20   query for.     
4560: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
4570: 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20  default locking 
4580: 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79 20  mode (which may 
4590: 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f 0a  be different to.
45a0: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63        ** the loc
45b0: 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65  king-mode of the
45c0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29 2e   main database).
45d0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
45e0: 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74  eMode = db->dflt
45f0: 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65  LockMode;.    }e
4600: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
4610: 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20   *pPager;.      
4620: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29  if( pId2->n==0 )
4630: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69  {.        /* Thi
4640: 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  s indicates that
4650: 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d   no database nam
4660: 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20  e was specified 
4670: 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20 20  as part.        
4680: 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  ** of the PRAGMA
4690: 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69   command. In thi
46a0: 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b 69  s case the locki
46b0: 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a  ng-mode must be.
46c0: 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20 6f          ** set o
46d0: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
46e0: 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65 6c  atabases, as wel
46f0: 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 62  l as the main db
4700: 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a   file..        *
4710: 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73  *.        ** Als
4720: 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  o, the sqlite3.d
4730: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69  fltLockMode vari
4740: 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20 74  able is set so t
4750: 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  hat.        ** a
4760: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  ny subsequently 
4770: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
4780: 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65 20  es also use the 
4790: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
47a0: 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64    ** locking mod
47b0: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
47c0: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
47d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44 62        assert(pDb
47e0: 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a  ==&db->aDb[0]);.
47f0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 32          for(ii=2
4800: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
4810: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
4820: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
4830: 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
4840: 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20  b[ii].pBt);.    
4850: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
4860: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
4870: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
4880: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4890: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
48a0: 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20   = (u8)eMode;.  
48b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61 67      }.      pPag
48c0: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
48d0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
48e0: 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  ;.      eMode = 
48f0: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
4900: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
4910: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  eMode);.    }.. 
4920: 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65     assert( eMode
4930: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
4940: 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20  ODE_NORMAL.     
4950: 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d         || eMode=
4960: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
4970: 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b 0a  DE_EXCLUSIVE );.
4980: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
4990: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
49a0: 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20 20  _EXCLUSIVE ){.  
49b0: 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63 6c      zRet = "excl
49c0: 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20  usive";.    }.  
49d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
49e0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
49f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4a00: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
4a10: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f  OLNAME_NAME, "lo
4a20: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c  cking_mode", SQL
4a30: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
4a40: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
4a50: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
4a60: 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c  , 0, 1, 0, zRet,
4a70: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
4a80: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
4a90: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
4aa0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
4ab0: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
4ac0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
4ad0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
4ae0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
4af0: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ase.]journal_mod
4b00: 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  e =.  **        
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
4b20: 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66  elete|persist|of
4b30: 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72  f|truncate|memor
4b40: 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a  y|wal|off).  */.
4b50: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
4b60: 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20  OURNAL_MODE: {. 
4b70: 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20     int eMode;   
4b80: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
4b90: 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  he PAGER_JOURNAL
4ba0: 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73  MODE_XXX symbols
4bb0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20   */.    int ii; 
4bc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
4bd0: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20  p counter */..  
4be0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4bf0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
4c00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4c10: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
4c20: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f  OLNAME_NAME, "jo
4c30: 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c  urnal_mode", SQL
4c40: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20  ITE_STATIC);..  
4c50: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
4c60: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
4c70: 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44  here is no "=MOD
4c80: 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  E" part of the p
4c90: 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72  ragma, do a quer
4ca0: 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20  y for the.      
4cb0: 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20  ** current mode 
4cc0: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
4cd0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
4ce0: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65  DE_QUERY;.    }e
4cf0: 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  lse{.      const
4d00: 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20   char *zMode;.  
4d10: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69      int n = sqli
4d20: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
4d30: 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65  ht);.      for(e
4d40: 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d  Mode=0; (zMode =
4d50: 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d   sqlite3JournalM
4d60: 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21  odename(eMode))!
4d70: 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20  =0; eMode++){.  
4d80: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4d90: 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
4da0: 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29  , zMode, n)==0 )
4db0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
4dc0: 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65        if( !zMode
4dd0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
4de0: 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61  f the "=MODE" pa
4df0: 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rt does not matc
4e00: 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72  h any known jour
4e10: 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20  nal mode,.      
4e20: 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71    ** then do a q
4e30: 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20  uery */.        
4e40: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
4e50: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
4e60: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
4e70: 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41     if( eMode==PA
4e80: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4e90: 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e  QUERY && pId2->n
4ea0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
4eb0: 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20  Convert "PRAGMA 
4ec0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e  journal_mode" in
4ed0: 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e  to "PRAGMA main.
4ee0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f  journal_mode" */
4ef0: 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a  .      iDb = 0;.
4f00: 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20        pId2->n = 
4f10: 31 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20  1;.    }.#ifdef 
4f20: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
4f30: 41 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 0a 20  AL_SAFETYLEVEL. 
4f40: 20 20 20 69 66 28 20 21 20 53 51 4c 49 54 45 5f     if( ! SQLITE_
4f50: 44 62 53 61 66 65 74 79 4c 65 76 65 6c 49 73 46  DbSafetyLevelIsF
4f60: 69 78 65 64 28 70 44 62 2d 3e 73 61 66 65 74 79  ixed(pDb->safety
4f70: 5f 6c 65 76 65 6c 29 20 29 7b 0a 20 20 20 20 20  _level) ){.     
4f80: 20 69 66 28 20 65 4d 6f 64 65 20 3d 3d 20 50 41   if( eMode == PA
4f90: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4fa0: 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
4fb0: 2a 20 77 68 65 6e 20 65 6e 74 65 72 69 6e 67 20  * when entering 
4fc0: 77 61 6c 20 6d 6f 64 65 2c 20 69 6d 6d 65 64 69  wal mode, immedi
4fd0: 61 74 65 6c 79 20 73 77 69 74 63 68 20 74 68 65  ately switch the
4fe0: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a 20 20   safety_level.  
4ff0: 20 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74        ** so that
5000: 20 61 20 71 75 65 72 79 20 74 6f 20 70 72 61 67   a query to prag
5010: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 72  ma synchronous r
5020: 65 74 75 72 6e 73 20 74 68 65 20 63 6f 72 72 65  eturns the corre
5030: 63 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ct value */.    
5040: 20 20 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e    .        pDb->
5050: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 53  safety_level = S
5060: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
5070: 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 3b 0a 20  L_SAFETYLEVEL;. 
5080: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5090: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 75 73      /* If the us
50a0: 65 72 20 68 61 73 6e 27 74 20 6f 76 65 72 72 69  er hasn't overri
50b0: 64 64 65 6e 20 74 68 65 20 73 79 6e 63 68 72 6f  dden the synchro
50c0: 6e 6f 75 73 20 73 65 74 74 69 6e 67 2c 20 75 73  nous setting, us
50d0: 65 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 2a  e the .        *
50e0: 2a 20 64 65 66 61 75 6c 74 20 66 6f 72 20 6e 6f  * default for no
50f0: 6e 2d 77 61 6c 20 64 61 74 61 62 61 73 65 73 20  n-wal databases 
5100: 2a 2f 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e  */.        pDb->
5110: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33  safety_level = 3
5120: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5130: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
5140: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 41 46  _DEFAULT_WAL_SAF
5150: 45 54 59 4c 45 56 45 4c 20 2a 2f 0a 20 20 20 20  ETYLEVEL */.    
5160: 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31  for(ii=db->nDb-1
5170: 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a  ; ii>=0; ii--){.
5180: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
5190: 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69  b[ii].pBt && (ii
51a0: 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e  ==iDb || pId2->n
51b0: 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ==0) ){.        
51c0: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
51d0: 74 72 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20  tree(v, ii);.   
51e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
51f0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75  AddOp3(v, OP_Jou
5200: 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c  rnalMode, ii, 1,
5210: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d   eMode);.      }
5220: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
5230: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5240: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
5250: 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a   1);.    break;.
5260: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
5270: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
5280: 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c  .]journal_size_l
5290: 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d  imit.  **  PRAGM
52a0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75  A [database.]jou
52b0: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d  rnal_size_limit=
52c0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
52d0: 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20  or set the size 
52e0: 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63  limit on rollbac
52f0: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e  k journal files.
5300: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
5310: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a  gTyp_JOURNAL_SIZ
5320: 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50  E_LIMIT: {.    P
5330: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
5340: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
5350: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
5360: 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b  i64 iLimit = -2;
5370: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
5380: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
5390: 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52  DecOrHexToI64(zR
53a0: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a  ight, &iLimit);.
53b0: 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
53c0: 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d  <-1 ) iLimit = -
53d0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69  1;.    }.    iLi
53e0: 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67  mit = sqlite3Pag
53f0: 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d  erJournalSizeLim
5400: 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69  it(pPager, iLimi
5410: 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69  t);.    returnSi
5420: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
5430: 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  "journal_size_li
5440: 6d 69 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20  mit", iLimit);. 
5450: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
5460: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
5470: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
5480: 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  AS */..  /*.  **
5490: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
54a0: 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a  se.]auto_vacuum.
54b0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
54c0: 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63  tabase.]auto_vac
54d0: 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  uum=N.  **.  ** 
54e0: 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 76  Get or set the v
54f0: 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61  alue of the data
5500: 62 61 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75  base 'auto-vacuu
5510: 6d 27 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20  m' parameter..  
5520: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  ** The value is 
5530: 6f 6e 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20  one of:  0 NONE 
5540: 31 20 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45  1 FULL 2 INCREME
5550: 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65  NTAL.  */.#ifnde
5560: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
5570: 54 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20  TOVACUUM.  case 
5580: 50 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43  PragTyp_AUTO_VAC
5590: 55 55 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  UUM: {.    Btree
55a0: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
55b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
55c0: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
55d0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
55e0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
55f0: 28 70 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76  (pParse, "auto_v
5600: 61 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42  acuum", sqlite3B
5610: 74 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75  treeGetAutoVacuu
5620: 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c  m(pBt));.    }el
5630: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41  se{.      int eA
5640: 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63  uto = getAutoVac
5650: 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  uum(zRight);.   
5660: 20 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f     assert( eAuto
5670: 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20  >=0 && eAuto<=2 
5680: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78  );.      db->nex
5690: 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65  tAutovac = (u8)e
56a0: 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43  Auto;.      /* C
56b0: 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75  all SetAutoVacuu
56c0: 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69  m() to set initi
56d0: 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e  alize the intern
56e0: 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20  al auto and.    
56f0: 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d    ** incr-vacuum
5700: 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20   flags. This is 
5710: 72 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65  required in case
5720: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
5730: 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65  .      ** create
5740: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
5750: 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72  ile. It is impor
5760: 74 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20  tant that it is 
5770: 63 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a  created.      **
5780: 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75   as an auto-vacu
5790: 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20  um capable db.. 
57a0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63       */.      rc
57b0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
57c0: 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74  etAutoVacuum(pBt
57d0: 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20  , eAuto);.      
57e0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
57f0: 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c  K && (eAuto==1 |
5800: 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20  | eAuto==2) ){. 
5810: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73         /* When s
5820: 65 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f  etting the auto_
5830: 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65  vacuum mode to e
5840: 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20  ither "full" or 
5850: 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63  .        ** "inc
5860: 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65  remental", write
5870: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65   the value of me
5880: 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74  ta[6] in the dat
5890: 61 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a  abase.        **
58a0: 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72   file. Before wr
58b0: 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d  iting to meta[6]
58c0: 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74  , check that met
58d0: 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20  a[3] indicates. 
58e0: 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74         ** that t
58f0: 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e  his really is an
5900: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70   auto-vacuum cap
5910: 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20  able database.. 
5920: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
5930: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
5940: 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46  nt iLn = VDBE_OF
5950: 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a  FSET_LINENO(2);.
5960: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
5970: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
5980: 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20  setMeta6[] = {. 
5990: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72           { OP_Tr
59a0: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c  ansaction,    0,
59b0: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
59d0: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
59e0: 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
59f0: 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20  okie,     0,    
5a00: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
5a10: 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f  BTREE_LARGEST_RO
5a20: 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20  OT_PAGE},.      
5a30: 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20      { OP_If,    
5a40: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5a50: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20      0,          
5a60: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
5a70: 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   2 */.          
5a80: 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20  { OP_Halt,      
5a90: 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20       SQLITE_OK, 
5aa0: 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20  OE_Abort,       
5ab0: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a     0},    /* 3 *
5ac0: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
5ad0: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20  _Integer,       
5ae0: 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20   0,         1,  
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
5b00: 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20  },    /* 4 */.  
5b10: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74          { OP_Set
5b20: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
5b30: 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e          BTREE_IN
5b40: 43 52 5f 56 41 43 55 55 4d 2c 20 31 7d 2c 20 20  CR_VACUUM, 1},  
5b50: 20 20 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20    /* 5 */.      
5b60: 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74    };.        int
5b70: 20 69 41 64 64 72 3b 0a 20 20 20 20 20 20 20 20   iAddr;.        
5b80: 69 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56  iAddr = sqlite3V
5b90: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
5ba0: 41 72 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74  ArraySize(setMet
5bb0: 61 36 29 2c 20 73 65 74 4d 65 74 61 36 2c 20 69  a6), setMeta6, i
5bc0: 4c 6e 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Ln);.        sql
5bd0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
5be0: 28 76 2c 20 69 41 64 64 72 2c 20 69 44 62 29 3b  (v, iAddr, iDb);
5bf0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5c00: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5c10: 69 41 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20  iAddr+1, iDb);. 
5c20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5c30: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 69 41  beChangeP2(v, iA
5c40: 64 64 72 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b  ddr+2, iAddr+4);
5c50: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5c60: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5c70: 69 41 64 64 72 2b 34 2c 20 65 41 75 74 6f 2d 31  iAddr+4, eAuto-1
5c80: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5c90: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
5ca0: 2c 20 69 41 64 64 72 2b 35 2c 20 69 44 62 29 3b  , iAddr+5, iDb);
5cb0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5cc0: 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
5cd0: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20   iDb);.      }. 
5ce0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
5cf0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
5d00: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
5d10: 61 74 61 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65  atabase.]increme
5d20: 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20  ntal_vacuum(N). 
5d30: 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74   **.  ** Do N st
5d40: 65 70 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74  eps of increment
5d50: 61 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20  al vacuuming on 
5d60: 61 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  a database..  */
5d70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5d80: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
5d90: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
5da0: 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55  NCREMENTAL_VACUU
5db0: 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69  M: {.    int iLi
5dc0: 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69  mit, addr;.    i
5dd0: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20  f( zRight==0 || 
5de0: 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32  !sqlite3GetInt32
5df0: 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74  (zRight, &iLimit
5e00: 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29  ) || iLimit<=0 )
5e10: 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d  {.      iLimit =
5e20: 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20   0x7fffffff;.   
5e30: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65   }.    sqlite3Be
5e40: 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
5e50: 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62  n(pParse, 0, iDb
5e60: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5e70: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
5e80: 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20  nteger, iLimit, 
5e90: 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d 20 73  1);.    addr = s
5ea0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
5eb0: 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  (v, OP_IncrVacuu
5ec0: 6d 2c 20 69 44 62 29 3b 20 56 64 62 65 43 6f 76  m, iDb); VdbeCov
5ed0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71  erage(v);.    sq
5ee0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
5ef0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
5f00: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
5f10: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5f20: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
5f30: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5f40: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
5f50: 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 20 56 64  os, 1, addr); Vd
5f60: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
5f70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
5f80: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
5f90: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
5fa0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
5fb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
5fc0: 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  R_PRAGMAS.  /*. 
5fd0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
5fe0: 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a  abase.]cache_siz
5ff0: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
6000: 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f  database.]cache_
6010: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
6020: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
6030: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
6040: 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e  ent local settin
6050: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70  g for the.  ** p
6060: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20  age cache size. 
6070: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
6080: 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20  sets the local. 
6090: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
60a0: 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e  ize value.  If N
60b0: 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65   is positive the
60c0: 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20  n that is the.  
60d0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
60e0: 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e  es in the cache.
60f0: 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69    If N is negati
6100: 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  ve, then the.  *
6110: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
6120: 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f  s is adjusted so
6130: 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20   that the cache 
6140: 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65  uses -N kibibyte
6150: 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79  s.  ** of memory
6160: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
6170: 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45  agTyp_CACHE_SIZE
6180: 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  : {.    assert( 
6190: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
61a0: 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
61b0: 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  0) );.    if( !z
61c0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
61d0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
61e0: 50 61 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69  Parse, "cache_si
61f0: 7a 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  ze", pDb->pSchem
6200: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
6210: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6220: 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69   int size = sqli
6230: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b  te3Atoi(zRight);
6240: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68  .      pDb->pSch
6250: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20  ema->cache_size 
6260: 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71  = size;.      sq
6270: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
6280: 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c  heSize(pDb->pBt,
6290: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
62a0: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
62b0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
62c0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
62d0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d  GMA [database.]m
62e0: 6d 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a  map_size(N).  **
62f0: 0a 20 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65  .  ** Used to se
6300: 74 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c  t mapping size l
6310: 69 6d 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e  imit. The mappin
6320: 67 20 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a  g size limit is.
6330: 20 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d    ** used to lim
6340: 69 74 20 74 68 65 20 61 67 67 72 65 67 61 74 65  it the aggregate
6350: 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d   size of all mem
6360: 6f 72 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f  ory mapped regio
6370: 6e 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64  ns of the.  ** d
6380: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66  atabase file. If
6390: 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
63a0: 69 73 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20  is set to zero, 
63b0: 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70  then memory mapp
63c0: 69 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20  ing.  ** is not 
63d0: 75 73 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66  used at all.  If
63e0: 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20   N is negative, 
63f0: 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74  then the default
6400: 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a   memory map.  **
6410: 20 6c 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65   limit determine
6420: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e  d by sqlite3_con
6430: 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
6440: 47 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20  G_MMAP_SIZE) is 
6450: 73 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61  set..  ** The pa
6460: 72 61 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61  rameter N is mea
6470: 73 75 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a  sured in bytes..
6480: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76    **.  ** This v
6490: 61 6c 75 65 20 69 73 20 61 64 76 69 73 6f 72 79  alue is advisory
64a0: 2e 20 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e  .  The underlyin
64b0: 67 20 56 46 53 20 69 73 20 66 72 65 65 20 74 6f  g VFS is free to
64c0: 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a   memory map.  **
64d0: 20 61 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73   as little or as
64e0: 20 6d 75 63 68 20 61 73 20 69 74 20 77 61 6e 74   much as it want
64f0: 73 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e  s.  Except, if N
6500: 20 69 73 20 73 65 74 20 74 6f 20 30 20 74 68 65   is set to 0 the
6510: 6e 20 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72  n the.  ** upper
6520: 20 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76   layers will nev
6530: 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46  er invoke the xF
6540: 65 74 63 68 20 69 6e 74 65 72 66 61 63 65 73 20  etch interfaces 
6550: 74 6f 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f  to the VFS..  */
6560: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
6570: 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20  MMAP_SIZE: {.   
6580: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
6590: 7a 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  z;.#if SQLITE_MA
65a0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20  X_MMAP_SIZE>0.  
65b0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
65c0: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
65d0: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
65e0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
65f0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
6600: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 63        sqlite3Dec
6610: 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
6620: 74 2c 20 26 73 7a 29 3b 0a 20 20 20 20 20 20 69  t, &sz);.      i
6630: 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73  f( sz<0 ) sz = s
6640: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
6650: 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20  ig.szMmap;.     
6660: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
6670: 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73  ) db->szMmap = s
6680: 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d  z;.      for(ii=
6690: 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30  db->nDb-1; ii>=0
66a0: 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20  ; ii--){.       
66b0: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d   if( db->aDb[ii]
66c0: 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62  .pBt && (ii==iDb
66d0: 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20   || pId2->n==0) 
66e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
66f0: 69 74 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70  ite3BtreeSetMmap
6700: 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69  Limit(db->aDb[ii
6710: 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20  ].pBt, sz);.    
6720: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
6730: 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b    }.    sz = -1;
6740: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
6750: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
6760: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
6770: 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20  CNTL_MMAP_SIZE, 
6780: 26 73 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  &sz);.#else.    
6790: 73 7a 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  sz = 0;.    rc =
67a0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64   SQLITE_OK;.#end
67b0: 69 66 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  if.    if( rc==S
67c0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
67d0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
67e0: 74 28 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f  t(pParse, "mmap_
67f0: 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20  size", sz);.    
6800: 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51  }else if( rc!=SQ
6810: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b  LITE_NOTFOUND ){
6820: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
6830: 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61  Err++;.      pPa
6840: 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20  rse->rc = rc;.  
6850: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
6860: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
6870: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6880: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
6890: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65  temp_store = "de
68a0: 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c  fault"|"memory"|
68b0: 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  "file".  **.  **
68c0: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
68d0: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
68e0: 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65  f the temp_store
68f0: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
6900: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
6910: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
6920: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
6930: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
6940: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
6950: 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  * value will be 
6960: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
6970: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
6980: 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20  ase is opened.. 
6990: 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68   **.  ** Note th
69a0: 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  at it is possibl
69b0: 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72  e for the librar
69c0: 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  y compile-time o
69d0: 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f  ptions to.  ** o
69e0: 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65 74  verride this set
69f0: 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ting.  */.  case
6a00: 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54   PragTyp_TEMP_ST
6a10: 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORE: {.    if( !
6a20: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6a30: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
6a40: 70 50 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74  pParse, "temp_st
6a50: 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73  ore", db->temp_s
6a60: 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tore);.    }else
6a70: 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65  {.      changeTe
6a80: 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65  mpStorage(pParse
6a90: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d  , zRight);.    }
6aa0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6ab0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
6ac0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
6ad0: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
6ae0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6af0: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
6b00: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
6b10: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
6b20: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
6b30: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
6b40: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
6b50: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
6b60: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
6b70: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
6b80: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
6b90: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 65  o be used for te
6ba0: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20  mporary files.. 
6bb0: 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61   ** Setting to a
6bc0: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
6bd0: 65 72 74 73 20 74 6f 20 74 68 65 20 64 65 66 61  erts to the defa
6be0: 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69  ult temporary di
6bf0: 72 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a  rectory search..
6c00: 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72    ** If temporar
6c10: 79 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63  y directory is c
6c20: 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76  hanged, then inv
6c30: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
6c40: 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20  ge..  **.  */.  
6c50: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
6c60: 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52  P_STORE_DIRECTOR
6c70: 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  Y: {.    if( !zR
6c80: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
6c90: 28 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64  ( sqlite3_temp_d
6ca0: 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20  irectory ){.    
6cb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6cc0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
6cd0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
6ce0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
6cf0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
6d00: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
6d10: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
6d20: 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53  ctory", SQLITE_S
6d30: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
6d40: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
6d50: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
6d60: 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65   0, 1, 0, sqlite
6d70: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
6d80: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
6d90: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
6da0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
6db0: 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 1);.      }.
6dc0: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
6dd0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
6de0: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
6df0: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
6e00: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
6e10: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
6e20: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
6e30: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
6e40: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
6e50: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
6e60: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
6e70: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
6e80: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
6e90: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
6ea0: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
6eb0: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
6ec0: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
6ed0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
6ee0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
6ef0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45     if( SQLITE_TE
6f00: 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20  MP_STORE==0.    
6f10: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
6f20: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
6f30: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
6f40: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  ).       || (SQL
6f50: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
6f60: 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  2 && db->temp_st
6f70: 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b  ore==1).      ){
6f80: 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64  .        invalid
6f90: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70  ateTempStorage(p
6fa0: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
6fb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
6fc0: 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ee(sqlite3_temp_
6fd0: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
6fe0: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
6ff0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7000: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7010: 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
7020: 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74  ntf("%s", zRight
7030: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
7040: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
7050: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
7060: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   0;.      }.#end
7070: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
7080: 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20  T_WSD */.    }. 
7090: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
70a0: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
70b0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
70c0: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
70d0: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
70e0: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
70f0: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
7100: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
7110: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
7120: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
7130: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
7140: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
7150: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
7160: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
7170: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
7180: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
7190: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
71a0: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
71b0: 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63  t.  ** were spec
71c0: 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65 6c  ified with a rel
71d0: 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20  ative pathname. 
71e0: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
71f0: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
7200: 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65  s.  ** to the de
7210: 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 64  fault database d
7220: 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20  irectory, which 
7230: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
7240: 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69 74  es specified wit
7250: 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76  h.  ** a relativ
7260: 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62  e path will prob
7270: 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e  ably be based on
7280: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 72   the current dir
7290: 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20  ectory for the. 
72a0: 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61   ** process.  Da
72b0: 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65 63  tabase file spec
72c0: 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61 62  ified with an ab
72d0: 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65 20  solute path are 
72e0: 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a  not impacted.  *
72f0: 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69 6e  * by this settin
7300: 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  g, regardless of
7310: 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a   its value..  **
7320: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
7330: 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f  gTyp_DATA_STORE_
7340: 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20  DIRECTORY: {.   
7350: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7360: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
7370: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
7380: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
7390: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
73a0: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  s(v, 1);.       
73b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
73c0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
73d0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20  NAME_NAME, .    
73e0: 20 20 20 20 20 20 20 20 22 64 61 74 61 5f 73 74          "data_st
73f0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20  ore_directory", 
7400: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
7410: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
7420: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
7430: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
7440: 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  , sqlite3_data_d
7450: 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20  irectory, 0);.  
7460: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7470: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
7480: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
7490: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
74a0: 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  e{.#ifndef SQLIT
74b0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20  E_OMIT_WSD.     
74c0: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
74d0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65  {.        int re
74e0: 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  s;.        rc = 
74f0: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
7500: 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74  db->pVfs, zRight
7510: 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f  , SQLITE_ACCESS_
7520: 52 45 41 44 57 52 49 54 45 2c 20 26 72 65 73 29  READWRITE, &res)
7530: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
7540: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  !=SQLITE_OK || r
7550: 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
7560: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
7570: 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20  sg(pParse, "not 
7580: 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63  a writable direc
7590: 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20  tory");.        
75a0: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
75b0: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
75c0: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
75d0: 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f  e3_free(sqlite3_
75e0: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b  data_directory);
75f0: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
7600: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
7610: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
7620: 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33  ectory = sqlite3
7630: 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a  _mprintf("%s", z
7640: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65  Right);.      }e
7650: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
7660: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
7670: 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ory = 0;.      }
7680: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7690: 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20  E_OMIT_WSD */.  
76a0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
76b0: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53   }.#endif..#if S
76c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
76d0: 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a  KING_STYLE.  /*.
76e0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
76f0: 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72  atabase.]lock_pr
7700: 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20  oxy_file.  **   
7710: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
7720: 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  .]lock_proxy_fil
7730: 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f  e = ":auto:"|"lo
7740: 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20  ck_file_path".  
7750: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
7760: 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  r set the value 
7770: 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78  of the lock_prox
7780: 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68  y_file flag.  Ch
7790: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
77a0: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
77b0: 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65  cific file to be
77c0: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
77d0: 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e  se access locks.
77e0: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
77f0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
7800: 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20  ROXY_FILE: {.   
7810: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7820: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
7830: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
7840: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
7850: 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70  );.      char *p
7860: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d  roxy_file_path =
7870: 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c   NULL;.      sql
7880: 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65  ite3_file *pFile
7890: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
78a0: 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20  ile(pPager);.   
78b0: 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65     sqlite3OsFile
78c0: 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c  ControlHint(pFil
78d0: 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f  e, SQLITE_GET_LO
78e0: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7900: 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f           &proxy_
7910: 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20  file_path);.    
7920: 20 20 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f    .      if( pro
7930: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a  xy_file_path ){.
7940: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
7950: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
7960: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
7970: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
7980: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
7990: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 20 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78        "lock_prox
79c0: 79 5f 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f  y_file", SQLITE_
79d0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
79e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
79f0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
7a00: 2c 20 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79  , 0, 1, 0, proxy
7a10: 5f 66 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a  _file_path, 0);.
7a20: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
7a30: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
7a40: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
7a50: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
7a60: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7a70: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
7a80: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
7a90: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71  ->pBt);.      sq
7aa0: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
7ab0: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
7ac0: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
7ad0: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
7ae0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7af0: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d   ){.        res=
7b00: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7b10: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7b20: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7b30: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69 67              zRig
7b60: 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  ht);.      } els
7b70: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d  e {.        res=
7b80: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7b90: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7ba0: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7bb0: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
7be0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
7bf0: 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45   if( res!=SQLITE
7c00: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73  _OK ){.        s
7c10: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7c20: 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74  Parse, "failed t
7c30: 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79  o set lock proxy
7c40: 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20   file");.       
7c50: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
7c60: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
7c70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
7c80: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7c90: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
7ca0: 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20  TYLE */      .  
7cb0: 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50    .  /*.  **   P
7cc0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
7cd0: 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a  ]synchronous.  *
7ce0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
7cf0: 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75  base.]synchronou
7d00: 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c  s=OFF|ON|NORMAL|
7d10: 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  FULL.  **.  ** R
7d20: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
7d30: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
7d40: 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  the synchronous 
7d50: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
7d60: 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76    ** the local v
7d70: 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61  alue does not ma
7d80: 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ke changes to th
7d90: 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20  e disk file and 
7da0: 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74  the.  ** default
7db0: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72   value will be r
7dc0: 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74  estored the next
7dd0: 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61   time the databa
7de0: 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65  se is.  ** opene
7df0: 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  d..  */.  case P
7e00: 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f  ragTyp_SYNCHRONO
7e10: 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  US: {.    if( !z
7e20: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
7e30: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
7e40: 50 61 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e  Parse, "synchron
7e50: 6f 75 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20  ous", .         
7e60: 20 20 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65     SQLITE_DbSafe
7e70: 74 79 4c 65 76 65 6c 56 61 6c 75 65 28 70 44 62  tyLevelValue(pDb
7e80: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 2d  ->safety_level)-
7e90: 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  1);.    }else{. 
7ea0: 20 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75       if( !db->au
7eb0: 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
7ec0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
7ed0: 4d 73 67 28 70 50 61 72 73 65 2c 20 0a 20 20 20  Msg(pParse, .   
7ee0: 20 20 20 20 20 20 20 20 20 22 53 61 66 65 74 79           "Safety
7ef0: 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62   level may not b
7f00: 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65  e changed inside
7f10: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29   a transaction")
7f20: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
7f30: 20 20 20 20 20 20 20 69 6e 74 20 69 4c 65 76 65         int iLeve
7f40: 6c 20 3d 20 28 67 65 74 53 61 66 65 74 79 4c 65  l = (getSafetyLe
7f50: 76 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31 29 2b  vel(zRight,0,1)+
7f60: 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1).             
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49 54           | SQLIT
7f90: 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46 49  E_SAFETYLEVEL_FI
7fa0: 58 45 44 3b 0a 20 20 20 20 20 20 20 20 69 4c 65  XED;.        iLe
7fb0: 76 65 6c 20 26 3d 20 50 41 47 45 52 5f 53 59 4e  vel &= PAGER_SYN
7fc0: 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 3b 0a 20  CHRONOUS_MASK;. 
7fd0: 20 20 20 20 20 20 20 69 66 28 20 69 4c 65 76 65         if( iLeve
7fe0: 6c 3d 3d 30 20 29 20 69 4c 65 76 65 6c 20 3d 20  l==0 ) iLevel = 
7ff0: 31 3b 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e  1;.        pDb->
8000: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 69  safety_level = i
8010: 4c 65 76 65 6c 3b 0a 20 20 20 20 20 20 20 20 73  Level;.        s
8020: 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28  etAllPagerFlags(
8030: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
8040: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
8050: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
8060: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
8070: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
8080: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
8090: 41 47 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73  AG_PRAGMAS.  cas
80a0: 65 20 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20  e PragTyp_FLAG: 
80b0: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
80c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ==0 ){.      ret
80d0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
80e0: 72 73 65 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e  rse, pPragma->zN
80f0: 61 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20  ame, (db->flags 
8100: 26 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 29  & pPragma->iArg)
8110: 21 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  !=0 );.    }else
8120: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b  {.      int mask
8130: 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67   = pPragma->iArg
8140: 3b 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20  ;    /* Mask of 
8150: 62 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63  bits to set or c
8160: 6c 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69  lear. */.      i
8170: 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
8180: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
8190: 2f 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73  /* Foreign key s
81a0: 75 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62  upport may not b
81b0: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
81c0: 61 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a  abled while not.
81d0: 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75          ** in au
81e0: 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20  to-commit mode. 
81f0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b   */.        mask
8200: 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72   &= ~(SQLITE_For
8210: 65 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20  eignKeys);.     
8220: 20 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53   }.#if SQLITE_US
8230: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
8240: 4e 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  N.      if( db->
8250: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d  auth.authLevel==
8260: 55 41 55 54 48 5f 55 73 65 72 20 29 7b 0a 20 20  UAUTH_User ){.  
8270: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
8280: 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20  allow non-admin 
8290: 75 73 65 72 73 20 74 6f 20 6d 6f 64 69 66 79 20  users to modify 
82a0: 74 68 65 20 73 63 68 65 6d 61 20 61 72 62 69 74  the schema arbit
82b0: 72 61 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20  rarily */.      
82c0: 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49    mask &= ~(SQLI
82d0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3b  TE_WriteSchema);
82e0: 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  .      }.#endif.
82f0: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
8300: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
8310: 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20  ght, 0) ){.     
8320: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
8330: 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  mask;.      }els
8340: 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  e{.        db->f
8350: 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20  lags &= ~mask;. 
8360: 20 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d         if( mask=
8370: 3d 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73  =SQLITE_DeferFKs
8380: 20 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   ) db->nDeferred
8390: 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20  ImmCons = 0;.   
83a0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d     }..      /* M
83b0: 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d  any of the flag-
83c0: 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74  pragmas modify t
83d0: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65  he code generate
83e0: 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20  d by the SQL .  
83f0: 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20      ** compiler 
8400: 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67  (eg. count_chang
8410: 65 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f  es). So add an o
8420: 70 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20  pcode to expire 
8430: 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d  all.      ** com
8440: 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d  piled SQL statem
8450: 65 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66  ents after modif
8460: 79 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61  ying a pragma va
8470: 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  lue..      */.  
8480: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8490: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70 69  ddOp2(v, OP_Expi
84a0: 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  re, 0, 0);.     
84b0: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
84c0: 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20  s(db);.    }.   
84d0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
84e0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
84f0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a  T_FLAG_PRAGMAS *
8500: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
8510: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
8520: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
8530: 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69    PRAGMA table_i
8540: 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a  nfo(<table>).  *
8550: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20  *.  ** Return a 
8560: 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65  single row for e
8570: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
8580: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54  e named table. T
8590: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20  he columns of.  
85a0: 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  ** the returned 
85b0: 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20  data set are:.  
85c0: 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20  **.  ** cid:    
85d0: 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e      Column id (n
85e0: 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66  umbered from lef
85f0: 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72  t to right, star
8600: 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20  ting at 0).  ** 
8610: 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75  name:       Colu
8620: 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70  mn name.  ** typ
8630: 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  e:       Column 
8640: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
8650: 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20  ..  ** notnull: 
8660: 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20     True if 'NOT 
8670: 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66  NULL' is part of
8680: 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   column declarat
8690: 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61  ion.  ** dflt_va
86a0: 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74  lue: The default
86b0: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63   value for the c
86c0: 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20  olumn, if any.. 
86d0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
86e0: 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69  yp_TABLE_INFO: i
86f0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
8700: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
8710: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
8720: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
8730: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
8740: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
8750: 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20    int i, k;.    
8760: 20 20 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20    int nHidden = 
8770: 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  0;.      Column 
8780: 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64  *pCol;.      Ind
8790: 65 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74 65  ex *pPk = sqlite
87a0: 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
87b0: 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 73 71  (pTab);.      sq
87c0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
87d0: 6f 6c 73 28 76 2c 20 36 29 3b 0a 20 20 20 20 20  ols(v, 6);.     
87e0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
87f0: 36 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  6;.      sqlite3
8800: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
8810: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
8820: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8830: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
8840: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
8850: 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  cid", SQLITE_STA
8860: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
8870: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
8880: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
8890: 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51  NAME, "name", SQ
88a0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
88b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
88c0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
88d0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
88e0: 79 70 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ype", SQLITE_STA
88f0: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
8900: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
8910: 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 3, COLNAME_
8920: 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c  NAME, "notnull",
8930: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
8940: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8950: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
8960: 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  4, COLNAME_NAME,
8970: 20 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20 53   "dflt_value", S
8980: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8990: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
89a0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c  SetColName(v, 5,
89b0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
89c0: 70 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  pk", SQLITE_STAT
89d0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
89e0: 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
89f0: 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54 61  ames(pParse, pTa
8a00: 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  b);.      for(i=
8a10: 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43  0, pCol=pTab->aC
8a20: 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c  ol; i<pTab->nCol
8a30: 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a  ; i++, pCol++){.
8a40: 20 20 20 20 20 20 20 20 69 66 28 20 49 73 48 69          if( IsHi
8a50: 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29  ddenColumn(pCol)
8a60: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 48   ){.          nH
8a70: 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  idden++;.       
8a80: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
8a90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
8aa0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
8ab0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
8ac0: 69 2d 6e 48 69 64 64 65 6e 2c 20 31 29 3b 0a 20  i-nHidden, 1);. 
8ad0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
8ae0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
8af0: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
8b00: 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pCol->zName, 0)
8b10: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
8b20: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
8b30: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
8b40: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70   0,.           p
8b50: 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f  Col->zType ? pCo
8b60: 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20 30  l->zType : "", 0
8b70: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8b80: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8b90: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 28 70 43 6f  OP_Integer, (pCo
8ba0: 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a  l->notNull ? 1 :
8bb0: 20 30 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20   0), 4);.       
8bc0: 20 69 66 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74   if( pCol->zDflt
8bd0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
8be0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
8bf0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
8c00: 2c 20 35 2c 20 30 2c 20 28 63 68 61 72 2a 29 70  , 5, 0, (char*)p
8c10: 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b 0a  Col->zDflt, 0);.
8c20: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
8c30: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
8c40: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8c50: 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20 20  _Null, 0, 5);.  
8c60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8c70: 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c  if( (pCol->colFl
8c80: 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52  ags & COLFLAG_PR
8c90: 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20  IMKEY)==0 ){.   
8ca0: 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20         k = 0;.  
8cb0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
8cc0: 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  pPk==0 ){.      
8cd0: 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20      k = 1;.     
8ce0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8cf0: 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 6b 3c 3d      for(k=1; k<=
8d00: 70 54 61 62 2d 3e 6e 43 6f 6c 20 26 26 20 70 50  pTab->nCol && pP
8d10: 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d  k->aiColumn[k-1]
8d20: 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20  !=i; k++){}.    
8d30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
8d40: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8d50: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6b  v, OP_Integer, k
8d60: 2c 20 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 6);.        sq
8d70: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8d80: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
8d90: 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 6);.      }.
8da0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
8db0: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
8dc0: 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20  yp_STATS: {.    
8dd0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
8de0: 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20   HashElem *i;.  
8df0: 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74    v = sqlite3Get
8e00: 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20  Vdbe(pParse);.  
8e10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8e20: 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20  NumCols(v, 4);. 
8e30: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
8e40: 3d 20 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 4;.    sqlite3
8e50: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
8e60: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
8e70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8e80: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
8e90: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61  OLNAME_NAME, "ta
8ea0: 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ble", SQLITE_STA
8eb0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
8ec0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
8ed0: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
8ee0: 4d 45 2c 20 22 69 6e 64 65 78 22 2c 20 53 51 4c  ME, "index", SQL
8ef0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8f00: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
8f10: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
8f20: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 77 69 64 74  NAME_NAME, "widt
8f30: 68 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  h", SQLITE_STATI
8f40: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
8f50: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
8f60: 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   3, COLNAME_NAME
8f70: 2c 20 22 68 65 69 67 68 74 22 2c 20 53 51 4c 49  , "height", SQLI
8f80: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8f90: 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68  for(i=sqliteHash
8fa0: 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68  First(&pDb->pSch
8fb0: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69  ema->tblHash); i
8fc0: 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; i=sqliteHashNe
8fd0: 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61  xt(i)){.      Ta
8fe0: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
8ff0: 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20  teHashData(i);. 
9000: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9010: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
9020: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70  ing8, 0, 1, 0, p
9030: 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  Tab->zName, 0);.
9040: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9050: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75  eAddOp2(v, OP_Nu
9060: 6c 6c 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20  ll, 0, 2);.     
9070: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9080: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
9090: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
90b0: 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  t)sqlite3LogEstT
90c0: 6f 49 6e 74 28 70 54 61 62 2d 3e 73 7a 54 61 62  oInt(pTab->szTab
90d0: 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20  Row), 3);.      
90e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
90f0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
9100: 20 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 74   .          (int
9110: 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f  )sqlite3LogEstTo
9120: 49 6e 74 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f  Int(pTab->nRowLo
9130: 67 45 73 74 29 2c 20 34 29 3b 0a 20 20 20 20 20  gEst), 4);.     
9140: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9150: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
9160: 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20  ow, 1, 4);.     
9170: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
9180: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
9190: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b  dx=pIdx->pNext){
91a0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
91b0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
91c0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
91d0: 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  0, pIdx->zName, 
91e0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
91f0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9200: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20   OP_Integer,.   
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9220: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
9230: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
9240: 74 28 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77  t(pIdx->szIdxRow
9250: 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73  ), 3);.        s
9260: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9270: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
9280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e  .            (in
9290: 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  t)sqlite3LogEstT
92a0: 6f 49 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f 77  oInt(pIdx->aiRow
92b0: 4c 6f 67 45 73 74 5b 30 5d 29 2c 20 34 29 3b 0a  LogEst[0]), 4);.
92c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
92d0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
92e0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29  ResultRow, 1, 4)
92f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
9300: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
9310: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44  case PragTyp_IND
9320: 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69  EX_INFO: if( zRi
9330: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
9340: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
9350: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64  e *pTab;.    pId
9360: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
9370: 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c  ndex(db, zRight,
9380: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
9390: 49 64 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  Idx ){.      int
93a0: 20 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78   i;.      int mx
93b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 72 61  ;.      if( pPra
93c0: 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20  gma->iArg ){.   
93d0: 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69       /* PRAGMA i
93e0: 6e 64 65 78 5f 78 69 6e 66 6f 20 28 6e 65 77 65  ndex_xinfo (newe
93f0: 72 20 76 65 72 73 69 6f 6e 20 77 69 74 68 20 6d  r version with m
9400: 6f 72 65 20 72 6f 77 73 20 61 6e 64 20 63 6f 6c  ore rows and col
9410: 75 6d 6e 73 29 20 2a 2f 0a 20 20 20 20 20 20 20  umns) */.       
9420: 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c   mx = pIdx->nCol
9430: 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20 70 50 61  umn;.        pPa
9440: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
9450: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
9460: 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e      /* PRAGMA in
9470: 64 65 78 5f 69 6e 66 6f 20 28 6c 65 67 61 63 79  dex_info (legacy
9480: 20 76 65 72 73 69 6f 6e 29 20 2a 2f 0a 20 20 20   version) */.   
9490: 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e       mx = pIdx->
94a0: 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20 20 20  nKeyCol;.       
94b0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
94c0: 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  3;.      }.     
94d0: 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54   pTab = pIdx->pT
94e0: 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  able;.      sqli
94f0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
9500: 73 28 76 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65  s(v, pParse->nMe
9510: 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  m);.      sqlite
9520: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
9530: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
9540: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9550: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
9560: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
9570: 22 73 65 71 6e 6f 22 2c 20 53 51 4c 49 54 45 5f  "seqno", SQLITE_
9580: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
9590: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
95a0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
95b0: 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20  ME_NAME, "cid", 
95c0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
95d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
95e0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
95f0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
9600: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
9610: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 69 66  TATIC);.      if
9620: 28 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20  ( pPragma->iArg 
9630: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
9640: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
9650: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
9660: 41 4d 45 2c 20 22 64 65 73 63 22 2c 20 53 51 4c  AME, "desc", SQL
9670: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9680: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9690: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c  SetColName(v, 4,
96a0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
96b0: 63 6f 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54  coll", SQLITE_ST
96c0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
96d0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
96e0: 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41  Name(v, 5, COLNA
96f0: 4d 45 5f 4e 41 4d 45 2c 20 22 6b 65 79 22 2c 20  ME_NAME, "key", 
9700: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9710: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f        }.      fo
9720: 72 28 69 3d 30 3b 20 69 3c 6d 78 3b 20 69 2b 2b  r(i=0; i<mx; i++
9730: 29 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20 63  ){.        i16 c
9740: 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f  num = pIdx->aiCo
9750: 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20  lumn[i];.       
9760: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9770: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
9780: 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , i, 1);.       
9790: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
97a0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
97b0: 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20  , cnum, 2);.    
97c0: 20 20 20 20 69 66 28 20 63 6e 75 6d 3c 30 20 29      if( cnum<0 )
97d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
97e0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
97f0: 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 33 29 3b   OP_Null, 0, 3);
9800: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
9810: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9820: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
9830: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
9840: 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63   0, pTab->aCol[c
9850: 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  num].zName, 0);.
9860: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9870: 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69    if( pPragma->i
9880: 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Arg ){.         
9890: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
98a0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
98b0: 2c 20 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64  , pIdx->aSortOrd
98c0: 65 72 5b 69 5d 2c 20 34 29 3b 0a 20 20 20 20 20  er[i], 4);.     
98d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
98e0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
98f0: 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20 70  ing8, 0, 5, 0, p
9900: 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d 2c 20  Idx->azColl[i], 
9910: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  0);.          sq
9920: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9930: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
9940: 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 2c 20  <pIdx->nKeyCol, 
9950: 36 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  6);.        }.  
9960: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9970: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
9980: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 70 50 61 72  sultRow, 1, pPar
9990: 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20  se->nMem);.     
99a0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
99b0: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
99c0: 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54  agTyp_INDEX_LIST
99d0: 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
99e0: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
99f0: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
9a00: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
9a10: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46   pTab = sqlite3F
9a20: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69  indTable(db, zRi
9a30: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
9a40: 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20  f( pTab ){.     
9a50: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
9a60: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
9a70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9a80: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 35 29 3b 0a  tNumCols(v, 5);.
9a90: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
9aa0: 65 6d 20 3d 20 35 3b 0a 20 20 20 20 20 20 73 71  em = 5;.      sq
9ab0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
9ac0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
9ad0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
9ae0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9af0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
9b00: 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54  ME, "seq", SQLIT
9b10: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
9b20: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9b30: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
9b40: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
9b50: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9b60: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9b70: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9b80: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
9b90: 45 2c 20 22 75 6e 69 71 75 65 22 2c 20 53 51 4c  E, "unique", SQL
9ba0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9bb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9bc0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
9bd0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 72  OLNAME_NAME, "or
9be0: 69 67 69 6e 22 2c 20 53 51 4c 49 54 45 5f 53 54  igin", SQLITE_ST
9bf0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
9c00: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
9c10: 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45  me(v, 4, COLNAME
9c20: 5f 4e 41 4d 45 2c 20 22 70 61 72 74 69 61 6c 22  _NAME, "partial"
9c30: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9c40: 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78  ;.      for(pIdx
9c50: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69  =pTab->pIndex, i
9c60: 3d 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  =0; pIdx; pIdx=p
9c70: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29  Idx->pNext, i++)
9c80: 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
9c90: 63 68 61 72 20 2a 61 7a 4f 72 69 67 69 6e 5b 5d  char *azOrigin[]
9ca0: 20 3d 20 7b 20 22 63 22 2c 20 22 75 22 2c 20 22   = { "c", "u", "
9cb0: 70 6b 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 73  pk" };.        s
9cc0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9cd0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
9ce0: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  i, 1);.        s
9cf0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
9d00: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
9d10: 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a  0, 2, 0, pIdx->z
9d20: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
9d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9d40: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
9d50: 72 2c 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  r, IsUniqueIndex
9d60: 28 70 49 64 78 29 2c 20 33 29 3b 0a 20 20 20 20  (pIdx), 3);.    
9d70: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9d80: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
9d90: 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 20 61 7a  ng8, 0, 4, 0, az
9da0: 4f 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78  Origin[pIdx->idx
9db0: 54 79 70 65 5d 2c 20 30 29 3b 0a 20 20 20 20 20  Type], 0);.     
9dc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9dd0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
9de0: 65 72 2c 20 70 49 64 78 2d 3e 70 50 61 72 74 49  er, pIdx->pPartI
9df0: 64 78 57 68 65 72 65 21 3d 30 2c 20 35 29 3b 0a  dxWhere!=0, 5);.
9e00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9e10: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9e20: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 35 29  ResultRow, 1, 5)
9e30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
9e40: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
9e50: 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 41 54  case PragTyp_DAT
9e60: 41 42 41 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20  ABASE_LIST: {.  
9e70: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c    int i;.    sql
9e80: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
9e90: 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50  ls(v, 3);.    pP
9ea0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
9eb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9ec0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
9ed0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
9ee0: 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  eq", SQLITE_STAT
9ef0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
9f00: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9f10: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
9f20: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
9f30: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
9f40: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
9f50: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
9f60: 4d 45 5f 4e 41 4d 45 2c 20 22 66 69 6c 65 22 2c  ME_NAME, "file",
9f70: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9f80: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
9f90: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
9fa0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
9fb0: 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e  [i].pBt==0 ) con
9fc0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73  tinue;.      ass
9fd0: 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  ert( db->aDb[i].
9fe0: 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20  zName!=0 );.    
9ff0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a000: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
a010: 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20  r, i, 1);.      
a020: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a030: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
a040: 20 30 2c 20 32 2c 20 30 2c 20 64 62 2d 3e 61 44   0, 2, 0, db->aD
a050: 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  b[i].zName, 0);.
a060: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a070: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
a080: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a  ring8, 0, 3, 0,.
a090: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
a0a0: 65 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61  e3BtreeGetFilena
a0b0: 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  me(db->aDb[i].pB
a0c0: 74 29 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  t), 0);.      sq
a0d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
a0e0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
a0f0: 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20   1, 3);.    }.  
a100: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
a110: 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41  se PragTyp_COLLA
a120: 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20  TION_LIST: {.   
a130: 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
a140: 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20  HashElem *p;.   
a150: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
a160: 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20  umCols(v, 2);.  
a170: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
a180: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   2;.    sqlite3V
a190: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
a1a0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
a1b0: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
a1c0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
a1d0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a1e0: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
a1f0: 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53  _NAME, "name", S
a200: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
a210: 20 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 48     for(p=sqliteH
a220: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43  ashFirst(&db->aC
a230: 6f 6c 6c 53 65 71 29 3b 20 70 3b 20 70 3d 73 71  ollSeq); p; p=sq
a240: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70 29 29  liteHashNext(p))
a250: 7b 0a 20 20 20 20 20 20 43 6f 6c 6c 53 65 71 20  {.      CollSeq 
a260: 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65  *pColl = (CollSe
a270: 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  q *)sqliteHashDa
a280: 74 61 28 70 29 3b 0a 20 20 20 20 20 20 73 71 6c  ta(p);.      sql
a290: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
a2a0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2b  , OP_Integer, i+
a2b0: 2b 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  +, 1);.      sql
a2c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
a2d0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
a2e0: 20 32 2c 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e   2, 0, pColl->zN
a2f0: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ame, 0);.      s
a300: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
a310: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
a320: 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 2);.    }. 
a330: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
a340: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
a350: 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53  T_SCHEMA_PRAGMAS
a360: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
a370: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
a380: 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72 61 67  _KEY.  case Prag
a390: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
a3a0: 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74  LIST: if( zRight
a3b0: 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46   ){.    FKey *pF
a3c0: 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  K;.    Table *pT
a3d0: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
a3e0: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
a3f0: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
a400: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
a410: 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69  {.      v = sqli
a420: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
a430: 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20  e);.      pFK = 
a440: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20  pTab->pFKey;.   
a450: 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20     if( pFK ){.  
a460: 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b        int i = 0;
a470: 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65   .        sqlite
a480: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
a490: 76 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 70  v, 8);.        p
a4a0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b  Parse->nMem = 8;
a4b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a4c0: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
a4d0: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
a4e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a4f0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
a500: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
a510: 20 22 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54   "id", SQLITE_ST
a520: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
a530: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
a540: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
a550: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
a560: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
a570: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a580: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
a590: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
a5a0: 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54  , "table", SQLIT
a5b0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
a5c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a5d0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
a5e0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 72  OLNAME_NAME, "fr
a5f0: 6f 6d 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  om", SQLITE_STAT
a600: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
a610: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a620: 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45  me(v, 4, COLNAME
a630: 5f 4e 41 4d 45 2c 20 22 74 6f 22 2c 20 53 51 4c  _NAME, "to", SQL
a640: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
a650: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a660: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c  SetColName(v, 5,
a670: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
a680: 6f 6e 5f 75 70 64 61 74 65 22 2c 20 53 51 4c 49  on_update", SQLI
a690: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
a6a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
a6b0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c 20  etColName(v, 6, 
a6c0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f  COLNAME_NAME, "o
a6d0: 6e 5f 64 65 6c 65 74 65 22 2c 20 53 51 4c 49 54  n_delete", SQLIT
a6e0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
a6f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a700: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 37 2c 20 43  tColName(v, 7, C
a710: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d 61  OLNAME_NAME, "ma
a720: 74 63 68 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  tch", SQLITE_STA
a730: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 77 68  TIC);.        wh
a740: 69 6c 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20  ile(pFK){.      
a750: 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
a760: 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
a770: 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b  pFK->nCol; j++){
a780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61  .            cha
a790: 72 20 2a 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e 61  r *zCol = pFK->a
a7a0: 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20 20  Col[j].zCol;.   
a7b0: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
a7c0: 4f 6e 44 65 6c 65 74 65 20 3d 20 28 63 68 61 72  OnDelete = (char
a7d0: 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46   *)actionName(pF
a7e0: 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 3b 0a  K->aAction[0]);.
a7f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72              char
a800: 20 2a 7a 4f 6e 55 70 64 61 74 65 20 3d 20 28 63   *zOnUpdate = (c
a810: 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65  har *)actionName
a820: 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d  (pFK->aAction[1]
a830: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
a840: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
a850: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
a860: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  i, 1);.         
a870: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a880: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
a890: 65 72 2c 20 6a 2c 20 32 29 3b 0a 20 20 20 20 20  er, j, 2);.     
a8a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a8b0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
a8c0: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
a8d0: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20   pFK->zTo, 0);. 
a8e0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
a8f0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
a900: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34  OP_String8, 0, 4
a910: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
a920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a930: 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46     pTab->aCol[pF
a940: 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d  K->aCol[j].iFrom
a950: 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ].zName, 0);.   
a960: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a970: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 7a 43  VdbeAddOp4(v, zC
a980: 6f 6c 20 3f 20 4f 50 5f 53 74 72 69 6e 67 38 20  ol ? OP_String8 
a990: 3a 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 2c  : OP_Null, 0, 5,
a9a0: 20 30 2c 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20   0, zCol, 0);.  
a9b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a9c0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
a9d0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 36 2c  P_String8, 0, 6,
a9e0: 20 30 2c 20 7a 4f 6e 55 70 64 61 74 65 2c 20 30   0, zOnUpdate, 0
a9f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
aa00: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
aa10: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
aa20: 30 2c 20 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c 65  0, 7, 0, zOnDele
aa30: 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  te, 0);.        
aa40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
aa50: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
aa60: 6e 67 38 2c 20 30 2c 20 38 2c 20 30 2c 20 22 4e  ng8, 0, 8, 0, "N
aa70: 4f 4e 45 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  ONE", 0);.      
aa80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
aa90: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
aaa0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a  sultRow, 1, 8);.
aab0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
aac0: 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20        ++i;.     
aad0: 20 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e       pFK = pFK->
aae0: 70 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20  pNextFrom;.     
aaf0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
ab00: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
ab10: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
ab20: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
ab30: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a  OREIGN_KEY) */..
ab40: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
ab50: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
ab60: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
ab70: 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 63 61  MIT_TRIGGER.  ca
ab80: 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49  se PragTyp_FOREI
ab90: 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a  GN_KEY_CHECK: {.
aba0: 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20      FKey *pFK;  
abb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
abc0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
abd0: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61  traint */.    Ta
abe0: 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
abf0: 20 20 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61       /* Child ta
ac00: 62 6c 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46  ble contain "REF
ac10: 45 52 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64  ERENCES" keyword
ac20: 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
ac30: 50 61 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f  Parent;        /
ac40: 2a 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74  * Parent table t
ac50: 68 61 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73  hat child points
ac60: 20 74 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78   to */.    Index
ac70: 20 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20 20   *pIdx;         
ac80: 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68    /* Index in th
ac90: 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a  e parent table *
aca0: 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20  /.    int i;    
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
acc0: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
acd0: 6f 72 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65  oreign key numbe
ace0: 72 20 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20  r for pTab */.  
acf0: 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
ad00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
ad10: 20 63 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64   counter:  Field
ad20: 20 6f 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20   of the foreign 
ad30: 6b 65 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45  key */.    HashE
ad40: 6c 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20  lem *k;         
ad50: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
ad60: 72 3a 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69  r:  Next table i
ad70: 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20  n schema */.    
ad80: 69 6e 74 20 78 3b 20 20 20 20 20 20 20 20 20 20  int x;          
ad90: 20 20 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74         /* result
ada0: 20 76 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20   variable */.   
adb0: 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
adc0: 20 20 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67          /* 3 reg
add0: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
ade0: 20 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20   result row */. 
adf0: 20 20 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20     int regKey;  
ae00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
ae10: 69 73 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65  ister to hold ke
ae20: 79 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74  y for checking t
ae30: 68 65 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74  he FK */.    int
ae40: 20 72 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20   regRow;        
ae50: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
ae60: 20 74 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66   to hold a row f
ae70: 72 6f 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20  rom pTab */.    
ae80: 69 6e 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20  int addrTop;    
ae90: 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66         /* Top of
aea0: 20 61 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67   a loop checking
aeb0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f   foreign keys */
aec0: 0a 20 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b  .    int addrOk;
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a              /* J
aee0: 75 6d 70 20 68 65 72 65 20 69 66 20 74 68 65 20  ump here if the 
aef0: 6b 65 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20  key is OK */.   
af00: 20 69 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20   int *aiCols;   
af10: 20 20 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64          /* child
af20: 20 74 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d   to parent colum
af30: 6e 20 6d 61 70 70 69 6e 67 20 2a 2f 0a 0a 20 20  n mapping */..  
af40: 20 20 72 65 67 52 65 73 75 6c 74 20 3d 20 70 50    regResult = pP
af50: 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20  arse->nMem+1;.  
af60: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b    pParse->nMem +
af70: 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b 65 79 20  = 4;.    regKey 
af80: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
af90: 3b 0a 20 20 20 20 72 65 67 52 6f 77 20 3d 20 2b  ;.    regRow = +
afa0: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
afb0: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
afc0: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
afd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
afe0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a  tNumCols(v, 4);.
aff0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
b000: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
b010: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
b020: 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  able", SQLITE_ST
b030: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
b040: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
b050: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
b060: 41 4d 45 2c 20 22 72 6f 77 69 64 22 2c 20 53 51  AME, "rowid", SQ
b070: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
b080: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
b090: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
b0a0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 61 72  LNAME_NAME, "par
b0b0: 65 6e 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ent", SQLITE_STA
b0c0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
b0d0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
b0e0: 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 3, COLNAME_NA
b0f0: 4d 45 2c 20 22 66 6b 69 64 22 2c 20 53 51 4c 49  ME, "fkid", SQLI
b100: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
b110: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
b120: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
b130: 69 44 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71  iDb);.    k = sq
b140: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
b150: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68  b->aDb[iDb].pSch
b160: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20  ema->tblHash);. 
b170: 20 20 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20     while( k ){. 
b180: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20       if( zRight 
b190: 29 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  ){.        pTab 
b1a0: 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54  = sqlite3LocateT
b1b0: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20  able(pParse, 0, 
b1c0: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
b1d0: 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20        k = 0;.   
b1e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b1f0: 20 20 70 54 61 62 20 3d 20 28 54 61 62 6c 65 2a    pTab = (Table*
b200: 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28  )sqliteHashData(
b210: 6b 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20  k);.        k = 
b220: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 6b  sqliteHashNext(k
b230: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
b240: 20 69 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20   if( pTab==0 || 
b250: 70 54 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29  pTab->pFKey==0 )
b260: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
b270: 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
b280: 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70  k(pParse, iDb, p
b290: 54 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54  Tab->tnum, 0, pT
b2a0: 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  ab->zName);.    
b2b0: 20 20 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c    if( pTab->nCol
b2c0: 2b 72 65 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e  +regRow>pParse->
b2d0: 6e 4d 65 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e  nMem ) pParse->n
b2e0: 4d 65 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c  Mem = pTab->nCol
b2f0: 20 2b 20 72 65 67 52 6f 77 3b 0a 20 20 20 20 20   + regRow;.     
b300: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
b310: 65 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62  e(pParse, 0, iDb
b320: 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52  , pTab, OP_OpenR
b330: 65 61 64 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ead);.      sqli
b340: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
b350: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
b360: 72 65 67 52 65 73 75 6c 74 2c 20 30 2c 20 70 54  regResult, 0, pT
b370: 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ab->zName,.     
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29     P4_TRANSIENT)
b3a0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c  ;.      for(i=1,
b3b0: 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79   pFK=pTab->pFKey
b3c0: 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d  ; pFK; i++, pFK=
b3d0: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b  pFK->pNextFrom){
b3e0: 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74  .        pParent
b3f0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
b400: 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f  ble(db, pFK->zTo
b410: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , zDb);.        
b420: 69 66 28 20 70 50 61 72 65 6e 74 3d 3d 30 20 29  if( pParent==0 )
b430: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
b440: 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20     pIdx = 0;.   
b450: 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c       sqlite3Tabl
b460: 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44  eLock(pParse, iD
b470: 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e 75 6d  b, pParent->tnum
b480: 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e 7a 4e  , 0, pParent->zN
b490: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 78 20  ame);.        x 
b4a0: 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  = sqlite3FkLocat
b4b0: 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70  eIndex(pParse, p
b4c0: 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49  Parent, pFK, &pI
b4d0: 64 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  dx, 0);.        
b4e0: 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20 20 20  if( x==0 ){.    
b4f0: 20 20 20 20 20 20 69 66 28 20 70 49 64 78 3d 3d        if( pIdx==
b500: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
b510: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
b520: 65 28 70 50 61 72 73 65 2c 20 69 2c 20 69 44 62  e(pParse, i, iDb
b530: 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f 4f 70  , pParent, OP_Op
b540: 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20  enRead);.       
b550: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b560: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b570: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4f 70  eAddOp3(v, OP_Op
b580: 65 6e 52 65 61 64 2c 20 69 2c 20 70 49 64 78 2d  enRead, i, pIdx-
b590: 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20  >tnum, iDb);.   
b5a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b5b0: 56 64 62 65 53 65 74 50 34 4b 65 79 49 6e 66 6f  VdbeSetP4KeyInfo
b5c0: 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a  (pParse, pIdx);.
b5d0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
b5e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b5f0: 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20       k = 0;.    
b600: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b610: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
b620: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61       assert( pPa
b630: 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20 70  rse->nErr>0 || p
b640: 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  FK==0 );.      i
b650: 66 28 20 70 46 4b 20 29 20 62 72 65 61 6b 3b 0a  f( pFK ) break;.
b660: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 73 65        if( pParse
b670: 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50 61 72 73  ->nTab<i ) pPars
b680: 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20 20  e->nTab = i;.   
b690: 20 20 20 61 64 64 72 54 6f 70 20 3d 20 73 71 6c     addrTop = sql
b6a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
b6b0: 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29 3b  , OP_Rewind, 0);
b6c0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
b6d0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c  ;.      for(i=1,
b6e0: 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79   pFK=pTab->pFKey
b6f0: 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d  ; pFK; i++, pFK=
b700: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b  pFK->pNextFrom){
b710: 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74  .        pParent
b720: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
b730: 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f  ble(db, pFK->zTo
b740: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , zDb);.        
b750: 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  pIdx = 0;.      
b760: 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20    aiCols = 0;.  
b770: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
b780: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78  t ){.          x
b790: 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61   = sqlite3FkLoca
b7a0: 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20  teIndex(pParse, 
b7b0: 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70  pParent, pFK, &p
b7c0: 49 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20  Idx, &aiCols);. 
b7d0: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
b7e0: 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20   x==0 );.       
b7f0: 20 7d 0a 20 20 20 20 20 20 20 20 61 64 64 72 4f   }.        addrO
b800: 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  k = sqlite3VdbeM
b810: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
b820: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
b830: 20 26 26 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20   && pIdx==0 ){. 
b840: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 4b 65           int iKe
b850: 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d  y = pFK->aCol[0]
b860: 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  .iFrom;.        
b870: 20 20 61 73 73 65 72 74 28 20 69 4b 65 79 3e 3d    assert( iKey>=
b880: 30 20 26 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e  0 && iKey<pTab->
b890: 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  nCol );.        
b8a0: 20 20 69 66 28 20 69 4b 65 79 21 3d 70 54 61 62    if( iKey!=pTab
b8b0: 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20 20 20  ->iPKey ){.     
b8c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b8d0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
b8e0: 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20  olumn, 0, iKey, 
b8f0: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
b900: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c 75       sqlite3Colu
b910: 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20 70 54 61  mnDefault(v, pTa
b920: 62 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29  b, iKey, regRow)
b930: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
b940: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
b950: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65  v, OP_IsNull, re
b960: 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b 20 56  gRow, addrOk); V
b970: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
b980: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b990: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
b9a0: 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c 20 72   OP_MustBeInt, r
b9b0: 65 67 52 6f 77 2c 20 0a 20 20 20 20 20 20 20 20  egRow, .        
b9c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b9d0: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
b9e0: 2b 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +3); VdbeCoverag
b9f0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
ba00: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
ba10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ba20: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64  dOp2(v, OP_Rowid
ba30: 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  , 0, regRow);.  
ba40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ba50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ba60: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f 74 45  ddOp3(v, OP_NotE
ba70: 78 69 73 74 73 2c 20 69 2c 20 30 2c 20 72 65 67  xists, i, 0, reg
ba80: 52 6f 77 29 3b 20 56 64 62 65 43 6f 76 65 72 61  Row); VdbeCovera
ba90: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
baa0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bab0: 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30  p2(v, OP_Goto, 0
bac0: 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20  , addrOk);.     
bad0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bae0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c 69  JumpHere(v, sqli
baf0: 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64  te3VdbeCurrentAd
bb00: 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20 20  dr(v)-2);.      
bb10: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
bb20: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46     for(j=0; j<pF
bb30: 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  K->nCol; j++){. 
bb40: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
bb50: 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
bb60: 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54  umnOfTable(v, pT
bb70: 61 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20  ab, 0,.         
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb90: 20 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f     aiCols ? aiCo
bba0: 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f  ls[j] : pFK->aCo
bbb0: 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52  l[j].iFrom, regR
bbc0: 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 20  ow+j);.         
bbd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bbe0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
bbf0: 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64  l, regRow+j, add
bc00: 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61  rOk); VdbeCovera
bc10: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
bc20: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
bc30: 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20   pParent ){.    
bc40: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bc50: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
bc60: 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67 52  MakeRecord, regR
bc70: 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72  ow, pFK->nCol, r
bc80: 65 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20  egKey,.         
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65       sqlite3Inde
bcb0: 78 41 66 66 69 6e 69 74 79 53 74 72 28 76 2c 70  xAffinityStr(v,p
bcc0: 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29  Idx), pFK->nCol)
bcd0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
bce0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49  lite3VdbeAddOp4I
bcf0: 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20  nt(v, OP_Found, 
bd00: 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65  i, addrOk, regKe
bd10: 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  y, 0);.         
bd20: 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28     VdbeCoverage(
bd30: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  v);.          }.
bd40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
bd50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
bd60: 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c  Op2(v, OP_Rowid,
bd70: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 31 29   0, regResult+1)
bd80: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
bd90: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
bda0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65  P_String8, 0, re
bdb0: 67 52 65 73 75 6c 74 2b 32 2c 20 30 2c 20 0a 20  gResult+2, 0, . 
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 20 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54           pFK->zT
bde0: 6f 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29  o, P4_TRANSIENT)
bdf0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
be00: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
be10: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 31 2c 20  P_Integer, i-1, 
be20: 72 65 67 52 65 73 75 6c 74 2b 33 29 3b 0a 20 20  regResult+3);.  
be30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
be40: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
be50: 73 75 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75  sultRow, regResu
be60: 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  lt, 4);.        
be70: 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c  sqlite3VdbeResol
be80: 76 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f  veLabel(v, addrO
be90: 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  k);.        sqli
bea0: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 69  te3DbFree(db, ai
beb0: 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Cols);.      }. 
bec0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bed0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78  AddOp2(v, OP_Nex
bee0: 74 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29  t, 0, addrTop+1)
bef0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
bf00: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
bf10: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
bf20: 61 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a  addrTop);.    }.
bf30: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
bf40: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
bf50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
bf60: 47 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  GER) */.#endif /
bf70: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
bf80: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
bf90: 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  EY) */..#ifndef 
bfa0: 4e 44 45 42 55 47 0a 20 20 63 61 73 65 20 50 72  NDEBUG.  case Pr
bfb0: 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41  agTyp_PARSER_TRA
bfc0: 43 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  CE: {.    if( zR
bfd0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
bfe0: 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  ( sqlite3GetBool
bff0: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29  ean(zRight, 0) )
c000: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
c010: 33 50 61 72 73 65 72 54 72 61 63 65 28 73 74 64  3ParserTrace(std
c020: 65 72 72 2c 20 22 70 61 72 73 65 72 3a 20 22 29  err, "parser: ")
c030: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
c040: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
c050: 72 73 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b  rserTrace(0, 0);
c060: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
c070: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
c080: 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61  if..  /* Reinsta
c090: 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64 20  ll the LIKE and 
c0a0: 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20  GLOB functions. 
c0b0: 20 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66 20   The variant of 
c0c0: 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20 77  LIKE.  ** used w
c0d0: 69 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e 73  ill be case sens
c0e0: 69 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65 70  itive or not dep
c0f0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52 48  ending on the RH
c100: 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  S..  */.  case P
c110: 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53  ragTyp_CASE_SENS
c120: 49 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20  ITIVE_LIKE: {.  
c130: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
c140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 67        sqlite3Reg
c150: 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
c160: 6e 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65  ns(db, sqlite3Ge
c170: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
c180: 20 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   0));.    }.  }.
c190: 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65    break;..#ifnde
c1a0: 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  f SQLITE_INTEGRI
c1b0: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
c1c0: 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  AX.# define SQLI
c1d0: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
c1e0: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30  CK_ERROR_MAX 100
c1f0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
c200: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
c210: 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f  EGRITY_CHECK.  /
c220: 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f  * Pragma "quick_
c230: 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63 65  check" is reduce
c240: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20  d version of .  
c250: 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  ** integrity_che
c260: 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64  ck designed to d
c270: 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62  etect most datab
c280: 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20  ase corruption. 
c290: 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74   ** without most
c2a0: 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61 64   of the overhead
c2b0: 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67   of a full integ
c2c0: 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f  rity-check..  */
c2d0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
c2e0: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a  INTEGRITY_CHECK:
c2f0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c   {.    int i, j,
c300: 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20   addr, mxErr;.. 
c310: 20 20 20 2f 2a 20 43 6f 64 65 20 74 68 61 74 20     /* Code that 
c320: 61 70 70 65 61 72 73 20 61 74 20 74 68 65 20 65  appears at the e
c330: 6e 64 20 6f 66 20 74 68 65 20 69 6e 74 65 67 72  nd of the integr
c340: 69 74 79 20 63 68 65 63 6b 2e 20 20 49 66 20 6e  ity check.  If n
c350: 6f 20 65 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d  o error.    ** m
c360: 65 73 73 61 67 65 73 20 68 61 76 65 20 62 65 65  essages have bee
c370: 6e 20 67 65 6e 65 72 61 74 65 64 2c 20 6f 75 74  n generated, out
c380: 70 75 74 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69  put OK.  Otherwi
c390: 73 65 20 6f 75 74 70 75 74 20 74 68 65 0a 20 20  se output the.  
c3a0: 20 20 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73 61    ** error messa
c3b0: 67 65 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 74  ge.    */.    st
c3c0: 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69  atic const int i
c3d0: 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54  Ln = VDBE_OFFSET
c3e0: 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20  _LINENO(2);.    
c3f0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
c400: 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b  eOpList endCode[
c410: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50  ] = {.      { OP
c420: 5f 49 66 4e 65 67 2c 20 20 20 20 20 20 20 31 2c  _IfNeg,       1,
c430: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   0,        0},  
c440: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
c450: 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20  { OP_String8,   
c460: 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30    0, 3,        0
c470: 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
c480: 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52      { OP_ResultR
c490: 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20 20  ow,   3, 1,     
c4a0: 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20     0},.    };.. 
c4b0: 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d     int isQuick =
c4c0: 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72   (sqlite3Tolower
c4d0: 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29  (zLeft[0])=='q')
c4e0: 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
c4f0: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20   PRAGMA command 
c500: 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  was of the form 
c510: 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74  "PRAGMA <db>.int
c520: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20  egrity_check",. 
c530: 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69     ** then iDb i
c540: 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64  s set to the ind
c550: 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
c560: 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  se identified by
c570: 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e   <db>..    ** In
c580: 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
c590: 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61 74  integrity of dat
c5a0: 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69  abase iDb only i
c5b0: 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20 20  s verified by.  
c5c0: 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72    ** the VDBE cr
c5d0: 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20  eated below..   
c5e0: 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72   **.    ** Other
c5f0: 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d  wise, if the com
c600: 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20  mand was simply 
c610: 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  "PRAGMA integrit
c620: 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20  y_check" (or.   
c630: 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63   ** "PRAGMA quic
c640: 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20  k_check"), then 
c650: 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e  iDb is set to 0.
c660: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73   In this case, s
c670: 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f  et iDb.    ** to
c680: 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64   -1 here, to ind
c690: 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20 56  icate that the V
c6a0: 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66  DBE should verif
c6b0: 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a  y the integrity.
c6c0: 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74      ** of all at
c6d0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
c6e0: 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  .  */.    assert
c6f0: 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ( iDb>=0 );.    
c700: 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c  assert( iDb==0 |
c710: 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20  | pId2->z );.   
c720: 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20   if( pId2->z==0 
c730: 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20  ) iDb = -1;..   
c740: 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74   /* Initialize t
c750: 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20  he VDBE program 
c760: 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  */.    pParse->n
c770: 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71 6c  Mem = 6;.    sql
c780: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
c790: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71  ls(v, 1);.    sq
c7a0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c7b0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
c7c0: 45 5f 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72 69  E_NAME, "integri
c7d0: 74 79 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49 54  ty_check", SQLIT
c7e0: 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20  E_STATIC);..    
c7f0: 2f 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d  /* Set the maxim
c800: 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a  um error count *
c810: 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51  /.    mxErr = SQ
c820: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
c830: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a  HECK_ERROR_MAX;.
c840: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
c850: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  {.      sqlite3G
c860: 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20  etInt32(zRight, 
c870: 26 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69  &mxErr);.      i
c880: 66 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20  f( mxErr<=0 ){. 
c890: 20 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53         mxErr = S
c8a0: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
c8b0: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b  CHECK_ERROR_MAX;
c8c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
c8d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c8e0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c8f0: 65 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20  er, mxErr, 1);  
c900: 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20  /* reg[1] holds 
c910: 65 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a  errors left */..
c920: 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74      /* Do an int
c930: 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20  egrity check on 
c940: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  each database fi
c950: 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d  le */.    for(i=
c960: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
c970: 2b 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c  +){.      HashEl
c980: 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73  em *x;.      Has
c990: 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20  h *pTbls;.      
c9a0: 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20  int cnt = 0;..  
c9b0: 20 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d      if( OMIT_TEM
c9c0: 50 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f  PDB && i==1 ) co
c9d0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66  ntinue;.      if
c9e0: 28 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69  ( iDb>=0 && i!=i
c9f0: 44 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a  Db ) continue;..
ca00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
ca10: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
ca20: 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20  arse, i);.      
ca30: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
ca40: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
ca50: 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c  fPos, 1); /* Hal
ca60: 74 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f  t if out of erro
ca70: 72 73 20 2a 2f 0a 20 20 20 20 20 20 56 64 62 65  rs */.      Vdbe
ca80: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ca90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
caa0: 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
cab0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71   0, 0);.      sq
cac0: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
cad0: 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20  e(v, addr);..   
cae0: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
caf0: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74  grity check of t
cb00: 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20  he B-Tree.      
cb10: 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67 69  **.      ** Begi
cb20: 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65 67  n by filling reg
cb30: 69 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e  isters 2, 3, ...
cb40: 20 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20 70   with the root p
cb50: 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20  ages numbers.   
cb60: 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61     ** for all ta
cb70: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
cb80: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
cb90: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
cba0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
cbb0: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
cbc0: 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20  db, i, 0) );.   
cbd0: 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e     pTbls = &db->
cbe0: 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[i].pSchema->
cbf0: 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66  tblHash;.      f
cc00: 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46  or(x=sqliteHashF
cc10: 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20  irst(pTbls); x; 
cc20: 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  x=sqliteHashNext
cc30: 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61  (x)){.        Ta
cc40: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
cc50: 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20  teHashData(x);. 
cc60: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
cc70: 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  dx;.        if( 
cc80: 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
cc90: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
cca0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ccb0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61   OP_Integer, pTa
ccc0: 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b  b->tnum, 2+cnt);
ccd0: 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43  .          VdbeC
cce0: 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c  omment((v, "%s",
ccf0: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a   pTab->zName));.
cd00: 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b            cnt++;
cd10: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
cd20: 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62     for(pIdx=pTab
cd30: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
cd40: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
cd50: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
cd60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
cd70: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49  , OP_Integer, pI
cd80: 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29  dx->tnum, 2+cnt)
cd90: 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65  ;.          Vdbe
cda0: 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22  Comment((v, "%s"
cdb0: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b  , pIdx->zName));
cdc0: 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  .          cnt++
cdd0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
cde0: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61    }..      /* Ma
cdf0: 6b 65 20 73 75 72 65 20 73 75 66 66 69 63 69 65  ke sure sufficie
ce00: 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67  nt number of reg
ce10: 69 73 74 65 72 73 20 68 61 76 65 20 62 65 65 6e  isters have been
ce20: 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
ce30: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
ce40: 20 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e   = MAX( pParse->
ce50: 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a  nMem, cnt+8 );..
ce60: 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65 20        /* Do the 
ce70: 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74 79  b-tree integrity
ce80: 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20   checks */.     
ce90: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cea0: 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69  p3(v, OP_Integri
ceb0: 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29  tyCk, 2, cnt, 1)
cec0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
ced0: 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28  dbeChangeP5(v, (
cee0: 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64  u8)i);.      add
cef0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
cf00: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp1(v, OP_IsNu
cf10: 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76 65  ll, 2); VdbeCove
cf20: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
cf30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
cf40: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
cf50: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
cf60: 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66    sqlite3MPrintf
cf70: 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74  (db, "*** in dat
cf80: 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c  abase %s ***\n",
cf90: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
cfa0: 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f  e),.         P4_
cfb0: 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20  DYNAMIC);.      
cfc0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cfd0: 33 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c  3(v, OP_Move, 2,
cfe0: 20 34 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71   4, 1);.      sq
cff0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
d000: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c  v, OP_Concat, 4,
d010: 20 33 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71   3, 2);.      sq
d020: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d030: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
d040: 20 32 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71   2, 1);.      sq
d050: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
d060: 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20  e(v, addr);..   
d070: 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
d080: 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73 20  all the indices 
d090: 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20  are constructed 
d0a0: 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20 20  correctly..     
d0b0: 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d   */.      for(x=
d0c0: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
d0d0: 70 54 62 6c 73 29 3b 20 78 20 26 26 20 21 69 73  pTbls); x && !is
d0e0: 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48  Quick; x=sqliteH
d0f0: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
d100: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
d110: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
d120: 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e  a(x);.        In
d130: 64 65 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b  dex *pIdx, *pPk;
d140: 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
d150: 70 50 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20  pPrior = 0;.    
d160: 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b      int loopTop;
d170: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 44 61  .        int iDa
d180: 74 61 43 75 72 2c 20 69 49 64 78 43 75 72 3b 0a  taCur, iIdxCur;.
d190: 20 20 20 20 20 20 20 20 69 6e 74 20 72 31 20 3d          int r1 =
d1a0: 20 2d 31 3b 0a 0a 20 20 20 20 20 20 20 20 69 66   -1;..        if
d1b0: 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d  ( pTab->pIndex==
d1c0: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
d1d0: 20 20 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52        pPk = HasR
d1e0: 6f 77 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a  owid(pTab) ? 0 :
d1f0: 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b   sqlite3PrimaryK
d200: 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20  eyIndex(pTab);. 
d210: 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
d220: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
d230: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
d240: 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74    /* Stop if out
d250: 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20   of errors */.  
d260: 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
d270: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73  ge(v);.        s
d280: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d290: 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
d2a0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
d2b0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
d2c0: 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20  v, addr);.      
d2d0: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63    sqlite3ExprCac
d2e0: 68 65 43 6c 65 61 72 28 70 50 61 72 73 65 29 3b  heClear(pParse);
d2f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d300: 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
d310: 63 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62  ces(pParse, pTab
d320: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 0a 20  , OP_OpenRead,. 
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d350: 20 20 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75    1, 0, &iDataCu
d360: 72 2c 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20  r, &iIdxCur);.  
d370: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d380: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
d390: 74 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20  teger, 0, 7);.  
d3a0: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
d3b0: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
d3c0: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
d3d0: 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
d3e0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d3f0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d400: 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b  P_Integer, 0, 8+
d410: 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74  j); /* index ent
d420: 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  ries counter */.
d430: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
d440: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
d450: 20 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65   MAX(pParse->nMe
d460: 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20 20  m, 8+j);.       
d470: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d480: 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c  p2(v, OP_Rewind,
d490: 20 69 44 61 74 61 43 75 72 2c 20 30 29 3b 20 56   iDataCur, 0); V
d4a0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
d4b0: 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20          loopTop 
d4c0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
d4d0: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
d4e0: 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 7, 1);.       
d4f0: 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20   /* Verify that 
d500: 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c  all NOT NULL col
d510: 75 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72 65 20  umns really are 
d520: 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  NOT NULL */.    
d530: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70      for(j=0; j<p
d540: 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b  Tab->nCol; j++){
d550: 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20  .          char 
d560: 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20 20  *zErr;.         
d570: 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b   int jmp2, jmp3;
d580: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6a  .          if( j
d590: 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 20  ==pTab->iPKey ) 
d5a0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
d5b0: 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43      if( pTab->aC
d5c0: 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30  ol[j].notNull==0
d5d0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
d5e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
d5f0: 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
d600: 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20  fTable(v, pTab, 
d610: 69 44 61 74 61 43 75 72 2c 20 6a 2c 20 33 29 3b  iDataCur, j, 3);
d620: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d630: 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76  e3VdbeChangeP5(v
d640: 2c 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  , OPFLAG_TYPEOFA
d650: 52 47 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a  RG);.          j
d660: 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp2 = sqlite3Vdb
d670: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 6f  eAddOp1(v, OP_No
d680: 74 4e 75 6c 6c 2c 20 33 29 3b 20 56 64 62 65 43  tNull, 3); VdbeC
d690: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
d6a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d6b0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
d6c0: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a  dImm, 1, -1); /*
d6d0: 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72   Decrement error
d6e0: 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20   limit */.      
d6f0: 20 20 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74      zErr = sqlit
d700: 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 4e  e3MPrintf(db, "N
d710: 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 25 73 2e  ULL value in %s.
d720: 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  %s", pTab->zName
d730: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e  pTab->aCol[j].zN
d760: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ame);.          
d770: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d780: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
d790: 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c 20   0, 3, 0, zErr, 
d7a0: 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20  P4_DYNAMIC);.   
d7b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d7c0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
d7d0: 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b  esultRow, 3, 1);
d7e0: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 33 20  .          jmp3 
d7f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
d800: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
d810: 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   1); VdbeCoverag
d820: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
d830: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d840: 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20  0(v, OP_Halt);. 
d850: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d860: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
d870: 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp2);.         
d880: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
d890: 48 65 72 65 28 76 2c 20 6a 6d 70 33 29 3b 0a 20  Here(v, jmp3);. 
d8a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
d8b0: 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 69 6e 64   /* Validate ind
d8c0: 65 78 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74  ex entries for t
d8d0: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 2a  he current row *
d8e0: 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  /.        for(j=
d8f0: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
d900: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
d910: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
d920: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  +){.          in
d930: 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d  t jmp2, jmp3, jm
d940: 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20 20  p4, jmp5;.      
d950: 20 20 20 20 69 6e 74 20 63 6b 55 6e 69 71 20 3d      int ckUniq =
d960: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
d970: 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
d980: 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64      if( pPk==pId
d990: 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  x ) continue;.  
d9a0: 20 20 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c          r1 = sql
d9b0: 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
d9c0: 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49 64  xKey(pParse, pId
d9d0: 78 2c 20 69 44 61 74 61 43 75 72 2c 20 30 2c 20  x, iDataCur, 0, 
d9e0: 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20 20  0, &jmp3,.      
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da10: 20 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20 20   pPrior, r1);.  
da20: 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 20 3d          pPrior =
da30: 20 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 20   pIdx;.         
da40: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
da50: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
da60: 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69 6e   8+j, 1);  /* in
da70: 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f  crement entry co
da80: 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  unt */.         
da90: 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20   /* Verify that 
daa0: 61 6e 20 69 6e 64 65 78 20 65 6e 74 72 79 20 65  an index entry e
dab0: 78 69 73 74 73 20 66 6f 72 20 74 68 65 20 63 75  xists for the cu
dac0: 72 72 65 6e 74 20 74 61 62 6c 65 20 72 6f 77 20  rrent table row 
dad0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  */.          jmp
dae0: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  2 = sqlite3VdbeA
daf0: 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46  ddOp4Int(v, OP_F
db00: 6f 75 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a 2c  ound, iIdxCur+j,
db10: 20 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20 20   ckUniq, r1,.   
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db40: 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e     pIdx->nColumn
db50: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
db60: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
db70: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
db80: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
db90: 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65   -1); /* Decreme
dba0: 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a  nt error limit *
dbb0: 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  /.          sqli
dbc0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
dbd0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
dbe0: 33 2c 20 30 2c 20 22 72 6f 77 20 22 2c 20 50 34  3, 0, "row ", P4
dbf0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
dc00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
dc10: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
dc20: 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20  at, 7, 3, 3);.  
dc30: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
dc40: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
dc50: 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30  String8, 0, 4, 0
dc60: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
dc80: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
dc90: 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43  dex ", P4_STATIC
dca0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
dcb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
dcc0: 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20  , OP_Concat, 4, 
dcd0: 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 3);.         
dce0: 20 6a 6d 70 35 20 3d 20 73 71 6c 69 74 65 33 56   jmp5 = sqlite3V
dcf0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
dd00: 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30  String8, 0, 4, 0
dd10: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd30: 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65       pIdx->zName
dd40: 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b  , P4_TRANSIENT);
dd50: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
dd60: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
dd70: 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c  OP_Concat, 4, 3,
dd80: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
dd90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
dda0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
ddb0: 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 3, 1);.       
ddc0: 20 20 20 6a 6d 70 34 20 3d 20 73 71 6c 69 74 65     jmp4 = sqlite
ddd0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
dde0: 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62  P_IfPos, 1); Vdb
ddf0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
de00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
de10: 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f  dbeAddOp0(v, OP_
de20: 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20  Halt);.         
de30: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
de40: 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20  Here(v, jmp2);. 
de50: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
de60: 55 4e 49 51 55 45 20 69 6e 64 65 78 65 73 2c 20  UNIQUE indexes, 
de70: 76 65 72 69 66 79 20 74 68 61 74 20 6f 6e 6c 79  verify that only
de80: 20 6f 6e 65 20 65 6e 74 72 79 20 65 78 69 73 74   one entry exist
de90: 73 20 77 69 74 68 20 74 68 65 0a 20 20 20 20 20  s with the.     
dea0: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20       ** current 
deb0: 6b 65 79 2e 20 20 54 68 65 20 65 6e 74 72 79 20  key.  The entry 
dec0: 69 73 20 75 6e 69 71 75 65 20 69 66 20 28 31 29  is unique if (1)
ded0: 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 69 73 20 4e   any column is N
dee0: 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a  ULL.          **
def0: 20 6f 72 20 28 32 29 20 74 68 65 20 6e 65 78 74   or (2) the next
df00: 20 65 6e 74 72 79 20 68 61 73 20 61 20 64 69 66   entry has a dif
df10: 66 65 72 65 6e 74 20 6b 65 79 20 2a 2f 0a 20 20  ferent key */.  
df20: 20 20 20 20 20 20 20 20 69 66 28 20 49 73 55 6e          if( IsUn
df30: 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 20  iqueIndex(pIdx) 
df40: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
df50: 6e 74 20 75 6e 69 71 4f 6b 20 3d 20 73 71 6c 69  nt uniqOk = sqli
df60: 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
df70: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
df80: 20 69 6e 74 20 6a 6d 70 36 3b 0a 20 20 20 20 20   int jmp6;.     
df90: 20 20 20 20 20 20 20 69 6e 74 20 6b 6b 3b 0a 20         int kk;. 
dfa0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b             for(k
dfb0: 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b  k=0; kk<pIdx->nK
dfc0: 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20  eyCol; kk++){.  
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
dfe0: 69 43 6f 6c 20 3d 20 70 49 64 78 2d 3e 61 69 43  iCol = pIdx->aiC
dff0: 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20 20  olumn[kk];.     
e000: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
e010: 20 69 43 6f 6c 3e 3d 30 20 26 26 20 69 43 6f 6c   iCol>=0 && iCol
e020: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20  <pTab->nCol );. 
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
e040: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c   pTab->aCol[iCol
e050: 5d 2e 6e 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e 74  ].notNull ) cont
e060: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
e070: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e080: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
e090: 6c 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f  ll, r1+kk, uniqO
e0a0: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  k);.            
e0b0: 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
e0c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
e0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6a 6d 70  .            jmp
e0e0: 36 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  6 = sqlite3VdbeA
e0f0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp1(v, OP_Next
e100: 2c 20 69 49 64 78 43 75 72 2b 6a 29 3b 20 56 64  , iIdxCur+j); Vd
e110: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
e120: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e130: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e140: 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 75 6e 69 71  OP_Goto, 0, uniq
e150: 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Ok);.           
e160: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
e170: 48 65 72 65 28 76 2c 20 6a 6d 70 36 29 3b 0a 20  Here(v, jmp6);. 
e180: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e190: 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28  e3VdbeAddOp4Int(
e1a0: 76 2c 20 4f 50 5f 49 64 78 47 54 2c 20 69 49 64  v, OP_IdxGT, iId
e1b0: 78 43 75 72 2b 6a 2c 20 75 6e 69 71 4f 6b 2c 20  xCur+j, uniqOk, 
e1c0: 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r1,.            
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 20 20 20 20 20 70 49 64 78 2d 3e 6e 4b 65 79 43       pIdx->nKeyC
e1f0: 6f 6c 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  ol); VdbeCoverag
e200: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
e210: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e220: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
e230: 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63  , 1, -1); /* Dec
e240: 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d  rement error lim
e250: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
e260: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e270: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
e280: 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20  8, 0, 3, 0,.    
e290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2a0: 20 20 20 20 20 20 20 20 20 20 22 6e 6f 6e 2d 75            "non-u
e2b0: 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69  nique entry in i
e2c0: 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49  ndex ", P4_STATI
e2d0: 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  C);.            
e2e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e2f0: 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c  2(v, OP_Goto, 0,
e300: 20 6a 6d 70 35 29 3b 0a 20 20 20 20 20 20 20 20   jmp5);.        
e310: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
e320: 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 75  esolveLabel(v, u
e330: 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  niqOk);.        
e340: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71    }.          sq
e350: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
e360: 65 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20 20 20  e(v, jmp4);.    
e370: 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
e380: 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
e390: 28 70 50 61 72 73 65 2c 20 6a 6d 70 33 29 3b 0a  (pParse, jmp3);.
e3a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e3b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e3c0: 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20  Op2(v, OP_Next, 
e3d0: 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70 54 6f  iDataCur, loopTo
e3e0: 70 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  p); VdbeCoverage
e3f0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  (v);.        sql
e400: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
e410: 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a  (v, loopTop-1);.
e420: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e430: 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20  MIT_BTREECOUNT. 
e440: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e450: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
e460: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
e470: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
e480: 20 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23 20         "wrong # 
e490: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
e4a0: 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43  dex ", P4_STATIC
e4b0: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
e4c0: 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
e4d0: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
e4e0: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
e4f0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
e500: 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63  f( pPk==pIdx ) c
e510: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
e520: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
e530: 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72  3VdbeCurrentAddr
e540: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
e550: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
e560: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c  (v, OP_IfPos, 1,
e570: 20 61 64 64 72 2b 32 29 3b 20 56 64 62 65 43 6f   addr+2); VdbeCo
e580: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
e590: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e5a0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
e5b0: 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
e5c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e5d0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e  ddOp2(v, OP_Coun
e5e0: 74 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 33 29  t, iIdxCur+j, 3)
e5f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e600: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
e610: 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c 20 61 64 64   OP_Eq, 8+j, add
e620: 72 2b 38 2c 20 33 29 3b 20 56 64 62 65 43 6f 76  r+8, 3); VdbeCov
e630: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
e640: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
e650: 68 61 6e 67 65 50 35 28 76 2c 20 53 51 4c 49 54  hangeP5(v, SQLIT
e660: 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a 20 20 20 20  E_NOTNULL);.    
e670: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e680: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
e690: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20  dImm, 1, -1);.  
e6a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e6b0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
e6c0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
e6d0: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50  , pIdx->zName, P
e6e0: 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  4_TRANSIENT);.  
e6f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e700: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
e710: 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37 29  Concat, 3, 2, 7)
e720: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e730: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e740: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 37   OP_ResultRow, 7
e750: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 1);.        }.
e760: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
e770: 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
e780: 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20 20   */.      } .   
e790: 20 7d 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71   }.    addr = sq
e7a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
e7b0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
e7c0: 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64  endCode), endCod
e7d0: 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 73 71 6c  e, iLn);.    sql
e7e0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 33  ite3VdbeChangeP3
e7f0: 28 76 2c 20 61 64 64 72 2c 20 2d 6d 78 45 72 72  (v, addr, -mxErr
e800: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
e810: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
e820: 64 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  dr);.    sqlite3
e830: 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20  VdbeChangeP4(v, 
e840: 61 64 64 72 2b 31 2c 20 22 6f 6b 22 2c 20 50 34  addr+1, "ok", P4
e850: 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 0a 20 20  _STATIC);.  }.  
e860: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
e870: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
e880: 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
e890: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e8a0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a  OMIT_UTF16.  /*.
e8b0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
e8c0: 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52  coding.  **   PR
e8d0: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
e8e0: 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22  "utf-8"|"utf-16"
e8f0: 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66  |"utf-16le"|"utf
e900: 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  -16be".  **.  **
e910: 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f   In its first fo
e920: 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20  rm, this pragma 
e930: 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f  returns the enco
e940: 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e  ding of the main
e950: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  .  ** database. 
e960: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
e970: 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  is not initializ
e980: 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61  ed, it is initia
e990: 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a  lized now..  **.
e9a0: 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
e9b0: 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61  form of this pra
e9c0: 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  gma is a no-op i
e9d0: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
e9e0: 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61  ase file.  ** ha
e9f0: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65  s not already be
ea00: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  en initialized. 
ea10: 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20  In this case it 
ea20: 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74  sets the default
ea30: 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74  .  ** encoding t
ea40: 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64  hat will be used
ea50: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
ea60: 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 61  tabase file if a
ea70: 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69   new file.  ** i
ea80: 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e  s created. If an
ea90: 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64   existing main d
eaa0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
eab0: 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  opened, then the
eac0: 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65  .  ** default te
ead0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  xt encoding for 
eae0: 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74  the existing dat
eaf0: 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20  abase is used.. 
eb00: 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c   ** .  ** In all
eb10: 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61 62   cases new datab
eb20: 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73 69  ases created usi
eb30: 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63 6f  ng the ATTACH co
eb40: 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63  mmand are.  ** c
eb50: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
eb60: 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74  e same default t
eb70: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20  ext encoding as 
eb80: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
eb90: 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d  e. If.  ** the m
eba0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61 73  ain database has
ebb0: 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61   not been initia
ebc0: 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65  lized and/or cre
ebd0: 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43 48  ated when ATTACH
ebe0: 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65  .  ** is execute
ebf0: 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  d, this is done 
ec00: 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41 43  before the ATTAC
ec10: 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a  H operation..  *
ec20: 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65  *.  ** In the se
ec30: 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70  cond form this p
ec40: 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20 74  ragma sets the t
ec50: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20  ext encoding to 
ec60: 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20  be used in.  ** 
ec70: 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  new database fil
ec80: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
ec90: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 68   this database h
eca0: 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c  andle. It is onl
ecb0: 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66  y.  ** useful if
ecc0: 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61   invoked immedia
ecd0: 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d  tely after the m
ece0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20  ain database i. 
ecf0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
ed00: 79 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20  yp_ENCODING: {. 
ed10: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
ed20: 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b  struct EncName {
ed30: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  .      char *zNa
ed40: 6d 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63  me;.      u8 enc
ed50: 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73  ;.    } encnames
ed60: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22  [] = {.      { "
ed70: 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54  UTF8",     SQLIT
ed80: 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
ed90: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22  .      { "UTF-8"
eda0: 2c 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38  ,    SQLITE_UTF8
edb0: 20 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d          },  /* M
edc0: 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
edd0: 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  1] */.      { "U
ede0: 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45  TF-16le", SQLITE
edf0: 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20  _UTF16LE     }, 
ee00: 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
ee10: 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20  ent [2] */.     
ee20: 20 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53   { "UTF-16be", S
ee30: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20  QLITE_UTF16BE   
ee40: 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
ee50: 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a   element [3] */.
ee60: 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65        { "UTF16le
ee70: 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
ee80: 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  LE     },.      
ee90: 7b 20 22 55 54 46 31 36 62 65 22 2c 20 20 53 51  { "UTF16be",  SQ
eea0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20  LITE_UTF16BE    
eeb0: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
eec0: 2d 31 36 22 2c 20 20 20 30 20 20 20 20 20 20 20  -16",   0       
eed0: 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a             }, /*
eee0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
eef0: 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  IVE */.      { "
ef00: 55 54 46 31 36 22 2c 20 20 20 20 30 20 20 20 20  UTF16",    0    
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
ef20: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   /* SQLITE_UTF16
ef30: 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20  NATIVE */.      
ef40: 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a  { 0, 0 }.    };.
ef50: 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74      const struct
ef60: 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a   EncName *pEnc;.
ef70: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
ef80: 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41  ){    /* "PRAGMA
ef90: 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20   encoding" */.  
efa0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
efb0: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
efc0: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
efd0: 6f 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  out;.      sqlit
efe0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
eff0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
f000: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
f010: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
f020: 45 5f 4e 41 4d 45 2c 20 22 65 6e 63 6f 64 69 6e  E_NAME, "encodin
f030: 67 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  g", SQLITE_STATI
f040: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
f050: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
f060: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 29  P_String8, 0, 1)
f070: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
f080: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
f090: 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  UTF8].enc==SQLIT
f0a0: 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20  E_UTF8 );.      
f0b0: 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
f0c0: 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d  [SQLITE_UTF16LE]
f0d0: 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
f0e0: 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73  16LE );.      as
f0f0: 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
f100: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65  QLITE_UTF16BE].e
f110: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
f120: 42 45 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  BE );.      sqli
f130: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28  te3VdbeChangeP4(
f140: 76 2c 20 2d 31 2c 20 65 6e 63 6e 61 6d 65 73 5b  v, -1, encnames[
f150: 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d  ENC(pParse->db)]
f160: 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49  .zName, P4_STATI
f170: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
f180: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
f190: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
f1a0: 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20  1);.    }else{  
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1c0: 20 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41        /* "PRAGMA
f1d0: 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22   encoding = XXX"
f1e0: 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   */.      /* Onl
f1f0: 79 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c  y change the val
f200: 75 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63  ue of sqlite.enc
f210: 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
f220: 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20   handle is not. 
f230: 20 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69       ** initiali
f240: 7a 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e  zed. If the main
f250: 20 64 61 74 61 62 61 73 65 20 65 78 69 73 74 73   database exists
f260: 2c 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65  , the new sqlite
f270: 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20  .enc value.     
f280: 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72   ** will be over
f290: 77 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65  written when the
f2a0: 20 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20   schema is next 
f2b0: 6c 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f  loaded. If it do
f2c0: 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  es not.      ** 
f2d0: 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20  already exists, 
f2e0: 69 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74  it will be creat
f2f0: 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
f300: 77 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65  w encoding value
f310: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f320: 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 21 28   if( .        !(
f330: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
f340: 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  , 0, DB_SchemaLo
f350: 61 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20  aded)) || .     
f360: 20 20 20 44 62 48 61 73 50 72 6f 70 65 72 74 79     DbHasProperty
f370: 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79  (db, 0, DB_Empty
f380: 29 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  ) .      ){.    
f390: 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e      for(pEnc=&en
f3a0: 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d  cnames[0]; pEnc-
f3b0: 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b  >zName; pEnc++){
f3c0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 30  .          if( 0
f3d0: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
f3e0: 28 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a  (zRight, pEnc->z
f3f0: 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20  Name) ){.       
f400: 20 20 20 20 20 53 43 48 45 4d 41 5f 45 4e 43 28       SCHEMA_ENC(
f410: 64 62 29 20 3d 20 45 4e 43 28 64 62 29 20 3d 0a  db) = ENC(db) =.
f420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f430: 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63  pEnc->enc ? pEnc
f440: 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55  ->enc : SQLITE_U
f450: 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20  TF16NATIVE;.    
f460: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
f470: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
f480: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
f490: 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b   !pEnc->zName ){
f4a0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
f4b0: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
f4c0: 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20  e, "unsupported 
f4d0: 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a  encoding: %s", z
f4e0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20  Right);.        
f4f0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
f500: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
f510: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
f520: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66  IT_UTF16 */..#if
f530: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
f540: 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f  _SCHEMA_VERSION_
f550: 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a  PRAGMAS.  /*.  *
f560: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
f570: 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72  base.]schema_ver
f580: 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47  sion.  **   PRAG
f590: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63  MA [database.]sc
f5a0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c  hema_version = <
f5b0: 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
f5c0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
f5d0: 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73  abase.]user_vers
f5e0: 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
f5f0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65  A [database.]use
f600: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  r_version = <int
f610: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
f620: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
f630: 73 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75  se.]freelist_cou
f640: 6e 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  nt = <integer>. 
f650: 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
f660: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70  A [database.]app
f670: 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a  lication_id.  **
f680: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
f690: 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ase.]application
f6a0: 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  _id = <integer>.
f6b0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72    **.  ** The pr
f6c0: 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76 65  agma's schema_ve
f6d0: 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76  rsion and user_v
f6e0: 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64 20  ersion are used 
f6f0: 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20 20  to set or get.  
f700: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
f710: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
f720: 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72 73  on and user-vers
f730: 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
f740: 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65  y. Both.  ** the
f750: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
f760: 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65 72  and the user-ver
f770: 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74 20  sion are 32-bit 
f780: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 0a  signed integers.
f790: 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
f7a0: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
f7b0: 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er..  **.  ** Th
f7c0: 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
f7d0: 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20  is usually only 
f7e0: 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74 65  manipulated inte
f7f0: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
f800: 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63  . It.  ** is inc
f810: 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c 69  remented by SQLi
f820: 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  te whenever the 
f830: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
f840: 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79 0a  is modified (by.
f850: 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f 72    ** creating or
f860: 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62 6c   dropping a tabl
f870: 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68 65  e or index). The
f880: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
f890: 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  is used by.  ** 
f8a0: 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d 65  SQLite each time
f8b0: 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63   a query is exec
f8c0: 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  uted to ensure t
f8d0: 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  hat the internal
f8e0: 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74   cache.  ** of t
f8f0: 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20 77  he schema used w
f900: 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68  hen compiling th
f910: 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63  e SQL query matc
f920: 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f  hes the schema o
f930: 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
f940: 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63  ase against whic
f950: 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  h the compiled q
f960: 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79  uery is actually
f970: 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20   executed..  ** 
f980: 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73 20  Subverting this 
f990: 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73 69  mechanism by usi
f9a0: 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d  ng "PRAGMA schem
f9b0: 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f  a_version" to mo
f9c0: 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73 63  dify.  ** the sc
f9d0: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73 20  hema-version is 
f9e0: 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67  potentially dang
f9f0: 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c 65  erous and may le
fa00: 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20  ad to program.  
fa10: 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64 61  ** crashes or da
fa20: 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
fa30: 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75 74  n. Use with caut
fa40: 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ion!.  **.  ** T
fa50: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
fa60: 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
fa70: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
fa80: 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65 64  . It may be used
fa90: 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61   by.  ** applica
faa0: 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70 75  tions for any pu
fab0: 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  rpose..  */.  ca
fac0: 73 65 20 50 72 61 67 54 79 70 5f 48 45 41 44 45  se PragTyp_HEADE
fad0: 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69  R_VALUE: {.    i
fae0: 6e 74 20 69 43 6f 6f 6b 69 65 20 3d 20 70 50 72  nt iCookie = pPr
faf0: 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 2f 2a 20  agma->iArg;  /* 
fb00: 57 68 69 63 68 20 63 6f 6f 6b 69 65 20 74 6f 20  Which cookie to 
fb10: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
fb20: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
fb30: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
fb40: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
fb50: 74 20 26 26 20 28 70 50 72 61 67 6d 61 2d 3e 6d  t && (pPragma->m
fb60: 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67 46  PragFlag & PragF
fb70: 6c 61 67 5f 52 65 61 64 4f 6e 6c 79 29 3d 3d 30  lag_ReadOnly)==0
fb80: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69   ){.      /* Wri
fb90: 74 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  te the specified
fba0: 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f   cookie value */
fbb0: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
fbc0: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73  nst VdbeOpList s
fbd0: 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20  etCookie[] = {. 
fbe0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
fbf0: 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20  saction,    0,  
fc00: 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20  1,  0},    /* 0 
fc10: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
fc20: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20 20  Integer,        
fc30: 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  1,  0},    /
fc40: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 1 */.        {
fc50: 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20   OP_SetCookie,  
fc60: 20 20 20 20 30 2c 20 20 30 2c 20 20 31 7d 2c 20      0,  0,  1}, 
fc70: 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20     /* 2 */.     
fc80: 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64   };.      int ad
fc90: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
fca0: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
fcb0: 61 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65  aySize(setCookie
fcc0: 29 2c 20 73 65 74 43 6f 6f 6b 69 65 2c 20 30 29  ), setCookie, 0)
fcd0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
fce0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
fcf0: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
fd00: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
fd10: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
fd20: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
fd30: 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ht));.      sqli
fd40: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
fd50: 76 2c 20 61 64 64 72 2b 32 2c 20 69 44 62 29 3b  v, addr+2, iDb);
fd60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
fd70: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64  beChangeP2(v, ad
fd80: 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a  dr+2, iCookie);.
fd90: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
fda0: 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70 65   /* Read the spe
fdb0: 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61  cified cookie va
fdc0: 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  lue */.      sta
fdd0: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
fde0: 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b  List readCookie[
fdf0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20  ] = {.        { 
fe00: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
fe10: 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20      0,  0,  0}, 
fe20: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
fe30: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
fe40: 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20  ie,      0,  1, 
fe50: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
fe60: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73          { OP_Res
fe70: 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c  ultRow,       1,
fe80: 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d    1,  0}.      }
fe90: 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64 72  ;.      int addr
fea0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
feb0: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
fec0: 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29  Size(readCookie)
fed0: 2c 20 72 65 61 64 43 6f 6f 6b 69 65 2c 20 30 29  , readCookie, 0)
fee0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
fef0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
ff00: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
ff10: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
ff20: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
ff30: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
ff40: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 33 28  te3VdbeChangeP3(
ff50: 76 2c 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f 6b  v, addr+1, iCook
ff60: 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ie);.      sqlit
ff70: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
ff80: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
ff90: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
ffa0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
ffb0: 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53  E_NAME, zLeft, S
ffc0: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
ffd0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
ffe0: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
fff0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
10000 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
10010 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
10020 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
10030 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20  EOPTION_DIAGS.  
10040 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
10050 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73   compile_options
10060 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
10070 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61  n the names of a
10080 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ll compile-time 
10090 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20  options used in 
100a0 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a  this build,.  **
100b0 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20   one option per 
100c0 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  row..  */.  case
100d0 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45   PragTyp_COMPILE
100e0 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20  _OPTIONS: {.    
100f0 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63  int i = 0;.    c
10100 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b  onst char *zOpt;
10110 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10120 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
10130 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
10140 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69  em = 1;.    sqli
10150 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
10160 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
10170 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f  NAME, "compile_o
10180 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f 53  ption", SQLITE_S
10190 54 41 54 49 43 29 3b 0a 20 20 20 20 77 68 69 6c  TATIC);.    whil
101a0 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74  e( (zOpt = sqlit
101b0 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
101c0 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b  _get(i++))!=0 ){
101d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
101e0 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
101f0 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
10200 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20 20   zOpt, 0);.     
10210 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10220 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
10230 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d  ow, 1, 1);.    }
10240 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
10250 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
10260 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
10270 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e  N_DIAGS */..#ifn
10280 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10290 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WAL.  /*.  **   
102a0 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
102b0 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74  .]wal_checkpoint
102c0 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c   = passive|full|
102d0 72 65 73 74 61 72 74 7c 74 72 75 6e 63 61 74 65  restart|truncate
102e0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b  .  **.  ** Check
102f0 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62 61  point the databa
10300 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  se..  */.  case 
10310 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43  PragTyp_WAL_CHEC
10320 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 6e  KPOINT: {.    in
10330 74 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a  t iBt = (pId2->z
10340 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f  ?iDb:SQLITE_MAX_
10350 41 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69  ATTACHED);.    i
10360 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54  nt eMode = SQLIT
10370 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
10380 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52  SIVE;.    if( zR
10390 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
103a0 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
103b0 28 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29  (zRight, "full")
103c0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65  ==0 ){.        e
103d0 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
103e0 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20  ECKPOINT_FULL;. 
103f0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
10400 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52  qlite3StrICmp(zR
10410 69 67 68 74 2c 20 22 72 65 73 74 61 72 74 22 29  ight, "restart")
10420 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65  ==0 ){.        e
10430 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
10440 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54  ECKPOINT_RESTART
10450 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
10460 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
10470 28 7a 52 69 67 68 74 2c 20 22 74 72 75 6e 63 61  (zRight, "trunca
10480 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  te")==0 ){.     
10490 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54     eMode = SQLIT
104a0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55  E_CHECKPOINT_TRU
104b0 4e 43 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a 20  NCATE;.      }. 
104c0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
104d0 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
104e0 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 3);.    pParse
104f0 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
10500 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
10510 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
10520 41 4d 45 5f 4e 41 4d 45 2c 20 22 62 75 73 79 22  AME_NAME, "busy"
10530 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
10540 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
10550 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
10560 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
10570 22 6c 6f 67 22 2c 20 53 51 4c 49 54 45 5f 53 54  "log", SQLITE_ST
10580 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
10590 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
105a0 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
105b0 41 4d 45 2c 20 22 63 68 65 63 6b 70 6f 69 6e 74  AME, "checkpoint
105c0 65 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ed", SQLITE_STAT
105d0 49 43 29 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65  IC);..    sqlite
105e0 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
105f0 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42  P_Checkpoint, iB
10600 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20  t, eMode, 1);.  
10610 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10620 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
10630 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a  Row, 1, 3);.  }.
10640 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20    break;..  /*. 
10650 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c   **   PRAGMA wal
10660 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a  _autocheckpoint.
10670 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61    **   PRAGMA wa
10680 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
10690 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
106a0 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74 61 62  onfigure a datab
106b0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ase connection t
106c0 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically 
106d0 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74  checkpoint a dat
106e0 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72  abase.  ** after
106f0 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20   accumulating N 
10700 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f  frames in the lo
10710 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20  g. Or query for 
10720 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
10730 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a  e.  ** of N..  *
10740 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
10750 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f  _WAL_AUTOCHECKPO
10760 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  INT: {.    if( z
10770 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
10780 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63  qlite3_wal_autoc
10790 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71  heckpoint(db, sq
107a0 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
107b0 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ));.    }.    re
107c0 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
107d0 61 72 73 65 2c 20 22 77 61 6c 5f 61 75 74 6f 63  arse, "wal_autoc
107e0 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20  heckpoint", .   
107f0 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c      db->xWalCall
10800 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c  back==sqlite3Wal
10810 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20  DefaultHook ? . 
10820 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
10830 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e  _PTR_TO_INT(db->
10840 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20  pWalArg) : 0);. 
10850 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
10860 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  if..  /*.  **  P
10870 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d  RAGMA shrink_mem
10880 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d  ory.  **.  ** IM
10890 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
108a0 20 52 2d 32 33 34 34 35 2d 34 36 31 30 39 20 54   R-23445-46109 T
108b0 68 69 73 20 70 72 61 67 6d 61 20 63 61 75 73 65  his pragma cause
108c0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  s the database. 
108d0 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f   ** connection o
108e0 6e 20 77 68 69 63 68 20 69 74 20 69 73 20 69 6e  n which it is in
108f0 76 6f 6b 65 64 20 74 6f 20 66 72 65 65 20 75 70  voked to free up
10900 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20   as much memory 
10910 61 73 20 69 74 0a 20 20 2a 2a 20 63 61 6e 2c 20  as it.  ** can, 
10920 62 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  by calling sqlit
10930 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
10940 6d 6f 72 79 28 29 2e 0a 20 20 2a 2f 0a 20 20 63  mory()..  */.  c
10950 61 73 65 20 50 72 61 67 54 79 70 5f 53 48 52 49  ase PragTyp_SHRI
10960 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20  NK_MEMORY: {.   
10970 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65   sqlite3_db_rele
10980 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a  ase_memory(db);.
10990 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
109a0 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
109b0 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a  MA busy_timeout.
109c0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75    **   PRAGMA bu
109d0 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20  sy_timeout = N. 
109e0 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71   **.  ** Call sq
109f0 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
10a00 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75  ut(db, N).  Retu
10a10 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  rn the current t
10a20 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a  imeout value.  *
10a30 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e  * if one is set.
10a40 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e    If no busy han
10a50 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66 65 72  dler or a differ
10a60 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ent busy handler
10a70 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65   is set.  ** the
10a80 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e  n 0 is returned.
10a90 20 20 53 65 74 74 69 6e 67 20 74 68 65 20 62 75    Setting the bu
10aa0 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20  sy_timeout to 0 
10ab0 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a  or negative.  **
10ac0 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 74 69   disables the ti
10ad0 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a  meout..  */.  /*
10ae0 63 61 73 65 20 50 72 61 67 54 79 70 5f 42 55 53  case PragTyp_BUS
10af0 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61  Y_TIMEOUT*/ defa
10b00 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72  ult: {.    asser
10b10 74 28 20 70 50 72 61 67 6d 61 2d 3e 65 50 72 61  t( pPragma->ePra
10b20 67 54 79 70 3d 3d 50 72 61 67 54 79 70 5f 42 55  gTyp==PragTyp_BU
10b30 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b 0a 20 20  SY_TIMEOUT );.  
10b40 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
10b50 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75        sqlite3_bu
10b60 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 73  sy_timeout(db, s
10b70 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
10b80 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  t));.    }.    r
10b90 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
10ba0 50 61 72 73 65 2c 20 22 74 69 6d 65 6f 75 74 22  Parse, "timeout"
10bb0 2c 20 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f  ,  db->busyTimeo
10bc0 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
10bd0 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
10be0 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61   PRAGMA soft_hea
10bf0 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 20 50  p_limit.  **   P
10c00 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f  RAGMA soft_heap_
10c10 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  limit = N.  **. 
10c20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
10c30 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33 34 33 2d 34  ON-OF: R-26343-4
10c40 35 39 33 30 20 54 68 69 73 20 70 72 61 67 6d 61  5930 This pragma
10c50 20 69 6e 76 6f 6b 65 73 20 74 68 65 0a 20 20 2a   invokes the.  *
10c60 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68  * sqlite3_soft_h
10c70 65 61 70 5f 6c 69 6d 69 74 36 34 28 29 20 69 6e  eap_limit64() in
10c80 74 65 72 66 61 63 65 20 77 69 74 68 20 74 68 65  terface with the
10c90 20 61 72 67 75 6d 65 6e 74 20 4e 2c 20 69 66 20   argument N, if 
10ca0 4e 20 69 73 0a 20 20 2a 2a 20 73 70 65 63 69 66  N is.  ** specif
10cb0 69 65 64 20 61 6e 64 20 69 73 20 61 20 6e 6f 6e  ied and is a non
10cc0 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
10cd0 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  r..  ** IMPLEMEN
10ce0 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 36 34 34  TATION-OF: R-644
10cf0 35 31 2d 30 37 31 36 33 20 54 68 65 20 73 6f 66  51-07163 The sof
10d00 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 70 72 61  t_heap_limit pra
10d10 67 6d 61 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20  gma always.  ** 
10d20 72 65 74 75 72 6e 73 20 74 68 65 20 73 61 6d 65  returns the same
10d30 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 77 6f   integer that wo
10d40 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20  uld be returned 
10d50 62 79 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  by the.  ** sqli
10d60 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
10d70 6d 69 74 36 34 28 2d 31 29 20 43 2d 6c 61 6e 67  mit64(-1) C-lang
10d80 75 61 67 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  uage function.. 
10d90 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
10da0 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d  yp_SOFT_HEAP_LIM
10db0 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  IT: {.    sqlite
10dc0 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69  3_int64 N;.    i
10dd0 66 28 20 7a 52 69 67 68 74 20 26 26 20 73 71 6c  f( zRight && sql
10de0 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
10df0 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53  4(zRight, &N)==S
10e00 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
10e10 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
10e20 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a  eap_limit64(N);.
10e30 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
10e40 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
10e50 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  , "soft_heap_lim
10e60 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f  it",  sqlite3_so
10e70 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
10e80 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
10e90 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
10ea0 20 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73    PRAGMA threads
10eb0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
10ec0 68 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a  hreads = N.  **.
10ed0 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74    ** Configure t
10ee0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
10ef0 72 20 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65  r of worker thre
10f00 61 64 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65  ads.  Return the
10f10 20 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75   new.  ** maximu
10f20 6d 2c 20 77 68 69 63 68 20 6d 69 67 68 74 20 62  m, which might b
10f30 65 20 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75  e less than requ
10f40 65 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  ested..  */.  ca
10f50 73 65 20 50 72 61 67 54 79 70 5f 54 48 52 45 41  se PragTyp_THREA
10f60 44 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  DS: {.    sqlite
10f70 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69  3_int64 N;.    i
10f80 66 28 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26  f( zRight.     &
10f90 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  & sqlite3DecOrHe
10fa0 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26  xToI64(zRight, &
10fb0 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  N)==SQLITE_OK.  
10fc0 20 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29     && N>=0.    )
10fd0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
10fe0 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45  limit(db, SQLITE
10ff0 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
11000 52 45 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30  READS, (int)(N&0
11010 78 37 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20  x7fffffff));.   
11020 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
11030 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
11040 74 68 72 65 61 64 73 22 2c 0a 20 20 20 20 20 20  threads",.      
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
11060 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20  lite3_limit(db, 
11070 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
11080 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 2d 31 29  KER_THREADS, -1)
11090 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
110a0 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  }..#if defined(S
110b0 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
110c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
110d0 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52  EST).  /*.  ** R
110e0 65 70 6f 72 74 20 74 68 65 20 63 75 72 72 65 6e  eport the curren
110f0 74 20 73 74 61 74 65 20 6f 66 20 66 69 6c 65 20  t state of file 
11100 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64 61 74  logs for all dat
11110 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63 61  abases.  */.  ca
11120 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f  se PragTyp_LOCK_
11130 53 54 41 54 55 53 3a 20 7b 0a 20 20 20 20 73 74  STATUS: {.    st
11140 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
11150 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d  *const azLockNam
11160 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22 75  e[] = {.      "u
11170 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61 72 65  nlocked", "share
11180 64 22 2c 20 22 72 65 73 65 72 76 65 64 22 2c 20  d", "reserved", 
11190 22 70 65 6e 64 69 6e 67 22 2c 20 22 65 78 63 6c  "pending", "excl
111a0 75 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20 20  usive".    };.  
111b0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c    int i;.    sql
111c0 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
111d0 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50  ls(v, 2);.    pP
111e0 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
111f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
11200 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
11210 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64  COLNAME_NAME, "d
11220 61 74 61 62 61 73 65 22 2c 20 53 51 4c 49 54 45  atabase", SQLITE
11230 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
11240 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
11250 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
11260 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75 73 22  E_NAME, "status"
11270 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
11280 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
11290 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
112a0 20 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74        Btree *pBt
112b0 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  ;.      const ch
112c0 61 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e  ar *zState = "un
112d0 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e  known";.      in
112e0 74 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64  t j;.      if( d
112f0 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d  b->aDb[i].zName=
11300 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
11310 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11320 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
11330 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 64  ing8, 0, 1, 0, d
11340 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
11350 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
11360 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62     pBt = db->aDb
11370 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69  [i].pBt;.      i
11380 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c  f( pBt==0 || sql
11390 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
113a0 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Bt)==0 ){.      
113b0 20 20 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73    zState = "clos
113c0 65 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ed";.      }else
113d0 20 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c   if( sqlite3_fil
113e0 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20  e_control(db, i 
113f0 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ? db->aDb[i].zNa
11400 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20  me : 0, .       
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
11430 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53  LITE_FCNTL_LOCKS
11440 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54  TATE, &j)==SQLIT
11450 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
11460 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b   zState = azLock
11470 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d  Name[j];.      }
11480 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11490 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
114a0 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
114b0 20 7a 53 74 61 74 65 2c 20 50 34 5f 53 54 41 54   zState, P4_STAT
114c0 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
114d0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
114e0 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
114f0 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62   2);.    }.    b
11500 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
11510 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
11520 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65  HAS_CODEC.  case
11530 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a   PragTyp_KEY: {.
11540 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
11550 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28   sqlite3_key_v2(
11560 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c  db, zDb, zRight,
11570 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
11580 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62  (zRight));.    b
11590 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65  reak;.  }.  case
115a0 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20   PragTyp_REKEY: 
115b0 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
115c0 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79   ) sqlite3_rekey
115d0 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69  _v2(db, zDb, zRi
115e0 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  ght, sqlite3Strl
115f0 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20  en30(zRight));. 
11600 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
11610 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58  case PragTyp_HEX
11620 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
11630 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75  Right ){.      u
11640 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69  8 iByte;.      i
11650 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72  nt i;.      char
11660 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20   zKey[40];.     
11670 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d   for(i=0, iByte=
11680 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79  0; i<sizeof(zKey
11690 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73  )*2 && sqlite3Is
116a0 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d  xdigit(zRight[i]
116b0 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ); i++){.       
116c0 20 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c   iByte = (iByte<
116d0 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78  <4) + sqlite3Hex
116e0 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29  ToInt(zRight[i])
116f0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69  ;.        if( (i
11700 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f  &1)!=0 ) zKey[i/
11710 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20  2] = iByte;.    
11720 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a    }.      if( (z
11730 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d  Left[3] & 0xf)==
11740 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73  0xb ){.        s
11750 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62  qlite3_key_v2(db
11760 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
11770 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
11780 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
11790 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
117a0 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20  , zKey, i/2);.  
117b0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
117c0 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
117d0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
117e0 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20  LITE_HAS_CODEC) 
117f0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
11800 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a  E_ENABLE_CEROD).
11810 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41    case PragTyp_A
11820 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f  CTIVATE_EXTENSIO
11830 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  NS: if( zRight )
11840 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
11850 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66  HAS_CODEC.    if
11860 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
11870 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22  p(zRight, "see-"
11880 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  , 4)==0 ){.     
11890 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74   sqlite3_activat
118a0 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d  e_see(&zRight[4]
118b0 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
118c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
118d0 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69  ABLE_CEROD.    i
118e0 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
118f0 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f  mp(zRight, "cero
11900 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20  d-", 6)==0 ){.  
11910 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69      sqlite3_acti
11920 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67  vate_cerod(&zRig
11930 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[6]);.    }.#e
11940 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
11950 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a  ;.#endif..  } /*
11960 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47   End of the PRAG
11970 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72  MA switch */..pr
11980 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69  agma_out:.  sqli
11990 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c  te3DbFree(db, zL
119a0 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  eft);.  sqlite3D
119b0 62 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74  bFree(db, zRight
119c0 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  );.}..#endif /* 
119d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
119e0 4d 41 20 2a 2f 0a                                MA */.