/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 5d84bdb3798dddb4828a3e4925f53840ff06bb82:


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 6e 4d 65 6d 20 3d 20 2b 2b 70 50 61 72  nt nMem = ++pPar
1550: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20  se->nMem;.  i64 
1560: 2a 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44  *pI64 = sqlite3D
1570: 62 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73  bMallocRaw(pPars
1580: 65 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61  e->db, sizeof(va
1590: 6c 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36  lue));.  if( pI6
15a0: 34 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  4 ){.    memcpy(
15b0: 70 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69  pI64, &value, si
15c0: 7a 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20  zeof(value));.  
15d0: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41  }.  sqlite3VdbeA
15e0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36  ddOp4(v, OP_Int6
15f0: 34 2c 20 30 2c 20 6e 4d 65 6d 2c 20 30 2c 20 28  4, 0, nMem, 0, (
1600: 63 68 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49  char*)pI64, P4_I
1610: 4e 54 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33  NT64);.  sqlite3
1620: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
1630: 2c 20 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  , 1);.  sqlite3V
1640: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
1650: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
1660: 2c 20 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45  , zLabel, SQLITE
1670: 5f 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69  _STATIC);.  sqli
1680: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
1690: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6e   OP_ResultRow, n
16a0: 4d 65 6d 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a  Mem, 1);.}.../*.
16b0: 2a 2a 20 53 65 74 20 74 68 65 20 73 61 66 65 74  ** Set the safet
16c0: 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70 61 67 65  y_level and page
16d0: 72 20 66 6c 61 67 73 20 66 6f 72 20 70 61 67 65  r flags for page
16e0: 72 20 69 44 62 2e 20 20 4f 72 20 69 66 20 69 44  r iDb.  Or if iD
16f0: 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68 65 73 65  b<0.** set these
1700: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
1710: 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  pagers..*/.#ifnd
1720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
1730: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 73 74 61  AGER_PRAGMAS.sta
1740: 74 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 50  tic void setAllP
1750: 61 67 65 72 46 6c 61 67 73 28 73 71 6c 69 74 65  agerFlags(sqlite
1760: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
1770: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1780: 20 20 20 20 44 62 20 2a 70 44 62 20 3d 20 64 62      Db *pDb = db
1790: 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e  ->aDb;.    int n
17a0: 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20   = db->nDb;.    
17b0: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 46  assert( SQLITE_F
17c0: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
17d0: 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20  FULLFSYNC );.   
17e0: 20 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f   assert( SQLITE_
17f0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  CkptFullFSync==P
1800: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
1810: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
1820: 74 28 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  t( SQLITE_CacheS
1830: 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48  pill==PAGER_CACH
1840: 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73  ESPILL );.    as
1850: 73 65 72 74 28 20 28 50 41 47 45 52 5f 46 55 4c  sert( (PAGER_FUL
1860: 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43  LFSYNC | PAGER_C
1870: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20  KPT_FULLFSYNC | 
1880: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
1890: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3d  ).             =
18a0: 3d 20 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d  =  PAGER_FLAGS_M
18b0: 41 53 4b 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ASK );.    asser
18c0: 74 28 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f  t( (pDb->safety_
18d0: 6c 65 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59  level & PAGER_SY
18e0: 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d  NCHRONOUS_MASK)=
18f0: 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  =pDb->safety_lev
1900: 65 6c 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  el );.    while(
1910: 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20   (n--) > 0 ){.  
1920: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
1930: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1940: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 72  te3BtreeSetPager
1950: 46 6c 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a  Flags(pDb->pBt,.
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1970: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
1980: 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20  el | (db->flags 
1990: 26 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41  & PAGER_FLAGS_MA
19a0: 53 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  SK) );.      }. 
19b0: 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20       pDb++;.    
19c0: 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20  }.  }.}.#else.# 
19d0: 64 65 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67  define setAllPag
19e0: 65 72 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e  erFlags(X)  /* n
19f0: 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  o-op */.#endif..
1a00: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
1a10: 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e  human-readable n
1a20: 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72  ame for a constr
1a30: 61 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  aint resolution 
1a40: 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  action..*/.#ifnd
1a50: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1a60: 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69  OREIGN_KEY.stati
1a70: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63  c const char *ac
1a80: 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69  tionName(u8 acti
1a90: 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  on){.  const cha
1aa0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74  r *zName;.  swit
1ab0: 63 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ch( action ){.  
1ac0: 20 20 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c    case OE_SetNul
1ad0: 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54  l:  zName = "SET
1ae0: 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62   NULL";        b
1af0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1b00: 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d  E_SetDflt:  zNam
1b10: 65 20 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54  e = "SET DEFAULT
1b20: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
1b30: 20 20 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64    case OE_Cascad
1b40: 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53  e:  zName = "CAS
1b50: 43 41 44 45 22 3b 20 20 20 20 20 20 20 20 20 62  CADE";         b
1b60: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1b70: 45 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d  E_Restrict: zNam
1b80: 65 20 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20  e = "RESTRICT"; 
1b90: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1ba0: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
1bb0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20      zName = "NO 
1bc0: 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20  ACTION";  .     
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be0: 20 61 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d   assert( action=
1bf0: 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61  =OE_None ); brea
1c00: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1c10: 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a  zName;.}.#endif.
1c20: 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ../*.** Paramete
1c30: 72 20 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20  r eMode must be 
1c40: 6f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52  one of the PAGER
1c50: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
1c60: 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1c70: 66 69 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68  fined in pager.h
1c80: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
1c90: 72 65 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f  returns the asso
1ca0: 63 69 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65  ciated lowercase
1cb0: 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  .** journal-mode
1cc0: 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20   name..*/.const 
1cd0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
1ce0: 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
1cf0: 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69   eMode){.  stati
1d00: 63 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  c char * const a
1d10: 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zModeName[] = {.
1d20: 20 20 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70      "delete", "p
1d30: 65 72 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20  ersist", "off", 
1d40: 22 74 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d  "truncate", "mem
1d50: 6f 72 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c  ory".#ifndef SQL
1d60: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20  ITE_OMIT_WAL.   
1d70: 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66    , "wal".#endif
1d80: 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20  .  };.  assert( 
1d90: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
1da0: 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20  E_DELETE==0 );. 
1db0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
1dc0: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
1dd0: 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  ST==1 );.  asser
1de0: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
1df0: 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20  MODE_OFF==2 );. 
1e00: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
1e10: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
1e20: 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65  ATE==3 );.  asse
1e30: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
1e40: 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20  LMODE_MEMORY==4 
1e50: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
1e60: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
1e70: 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72  AL==5 );.  asser
1e80: 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65  t( eMode>=0 && e
1e90: 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28  Mode<=ArraySize(
1ea0: 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a  azModeName) );..
1eb0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72    if( eMode==Arr
1ec0: 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d  aySize(azModeNam
1ed0: 65 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  e) ) return 0;. 
1ee0: 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61   return azModeNa
1ef0: 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a  me[eMode];.}../*
1f00: 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72  .** Process a pr
1f10: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
1f20: 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20   .**.** Pragmas 
1f30: 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  are of this form
1f40: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41  :.**.**      PRA
1f50: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69  GMA [database.]i
1f60: 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a  d [= value].**.*
1f70: 2a 20 54 68 65 20 69 64 65 6e 74 69 66 69 65 72  * The identifier
1f80: 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61   might also be a
1f90: 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61   string.  The va
1fa0: 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
1fb0: 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69   and.** identifi
1fc0: 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e  er, or a number.
1fd0: 20 20 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69    If minusFlag i
1fe0: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
1ff0: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e   value is.** a n
2000: 75 6d 62 65 72 20 74 68 61 74 20 77 61 73 20 70  umber that was p
2010: 72 65 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e  receded by a min
2020: 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49  us sign..**.** I
2030: 66 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20  f the left side 
2040: 69 73 20 22 64 61 74 61 62 61 73 65 2e 69 64 22  is "database.id"
2050: 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68   then pId1 is th
2060: 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a  e database name.
2070: 2a 2a 20 61 6e 64 20 70 49 64 32 20 69 73 20 74  ** and pId2 is t
2080: 68 65 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c  he id.  If the l
2090: 65 66 74 20 73 69 64 65 20 69 73 20 6a 75 73 74  eft side is just
20a0: 20 22 69 64 22 20 74 68 65 6e 20 70 49 64 31 20   "id" then pId1 
20b0: 69 73 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64  is the.** id and
20c0: 20 70 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70   pId2 is any emp
20d0: 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f  ty string..*/.vo
20e0: 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
20f0: 28 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  (.  Parse *pPars
2100: 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64  e, .  Token *pId
2110: 31 2c 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72  1,        /* Fir
2120: 73 74 20 70 61 72 74 20 6f 66 20 5b 64 61 74 61  st part of [data
2130: 62 61 73 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a  base.]id field *
2140: 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c  /.  Token *pId2,
2150: 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e          /* Secon
2160: 64 20 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62  d part of [datab
2170: 61 73 65 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f  ase.]id field, o
2180: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65  r NULL */.  Toke
2190: 6e 20 2a 70 56 61 6c 75 65 2c 20 20 20 20 20 20  n *pValue,      
21a0: 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61  /* Token for <va
21b0: 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  lue>, or NULL */
21c0: 0a 20 20 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67  .  int minusFlag
21d0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
21e0: 66 20 61 20 27 2d 27 20 73 69 67 6e 20 70 72 65  f a '-' sign pre
21f0: 63 65 64 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f  ceded <value> */
2200: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66  .){.  char *zLef
2210: 74 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20  t = 0;       /* 
2220: 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55  Nul-terminated U
2230: 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 69 64 3e  TF-8 string <id>
2240: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 69 67   */.  char *zRig
2250: 68 74 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ht = 0;      /* 
2260: 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55  Nul-terminated U
2270: 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 76 61 6c  TF-8 string <val
2280: 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  ue>, or NULL */.
2290: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
22a0: 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54 68 65 20  b = 0;   /* The 
22b0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f  database name */
22c0: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20  .  Token *pId;  
22d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
22e0: 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b  nter to <id> tok
22f0: 65 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46  en */.  char *aF
2300: 63 6e 74 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f  cntl[4];       /
2310: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 53 51  * Argument to SQ
2320: 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d  LITE_FCNTL_PRAGM
2330: 41 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  A */.  int iDb; 
2340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2350: 20 44 61 74 61 62 61 73 65 20 69 6e 64 65 78 20   Database index 
2360: 66 6f 72 20 3c 64 61 74 61 62 61 73 65 3e 20 2a  for <database> *
2370: 2f 0a 20 20 69 6e 74 20 6c 77 72 2c 20 75 70 72  /.  int lwr, upr
2380: 2c 20 6d 69 64 20 3d 20 30 3b 20 20 20 20 20 20  , mid = 0;      
2390: 20 2f 2a 20 42 69 6e 61 72 79 20 73 65 61 72 63   /* Binary searc
23a0: 68 20 62 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e  h bounds */.  in
23b0: 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
23c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65             /* re
23d0: 74 75 72 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20  turn value form 
23e0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
23f0: 47 4d 41 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  GMA */.  sqlite3
2400: 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64   *db = pParse->d
2410: 62 3b 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  b;    /* The dat
2420: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2430: 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 20 20   */.  Db *pDb;  
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2450: 20 20 20 2f 2a 20 54 68 65 20 73 70 65 63 69 66     /* The specif
2460: 69 63 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  ic database bein
2470: 67 20 70 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20  g pragmaed */.  
2480: 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69 74 65  Vdbe *v = sqlite
2490: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
24a0: 3b 20 20 2f 2a 20 50 72 65 70 61 72 65 64 20 73  ;  /* Prepared s
24b0: 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f  tatement */.  co
24c0: 6e 73 74 20 73 74 72 75 63 74 20 73 50 72 61 67  nst struct sPrag
24d0: 6d 61 4e 61 6d 65 73 20 2a 70 50 72 61 67 6d 61  maNames *pPragma
24e0: 3b 0a 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20  ;..  if( v==0 ) 
24f0: 72 65 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65  return;.  sqlite
2500: 33 56 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65  3VdbeRunOnlyOnce
2510: 28 76 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e  (v);.  pParse->n
2520: 4d 65 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49  Mem = 2;..  /* I
2530: 6e 74 65 72 70 72 65 74 20 74 68 65 20 5b 64 61  nterpret the [da
2540: 74 61 62 61 73 65 2e 5d 20 70 61 72 74 20 6f 66  tabase.] part of
2550: 20 74 68 65 20 70 72 61 67 6d 61 20 73 74 61 74   the pragma stat
2560: 65 6d 65 6e 74 2e 20 69 44 62 20 69 73 20 74 68  ement. iDb is th
2570: 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20  e.  ** index of 
2580: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68 69  the database thi
2590: 73 20 70 72 61 67 6d 61 20 69 73 20 62 65 69 6e  s pragma is bein
25a0: 67 20 61 70 70 6c 69 65 64 20 74 6f 20 69 6e 20  g applied to in 
25b0: 64 62 2e 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69  db.aDb[]. */.  i
25c0: 44 62 20 3d 20 73 71 6c 69 74 65 33 54 77 6f 50  Db = sqlite3TwoP
25d0: 61 72 74 4e 61 6d 65 28 70 50 61 72 73 65 2c 20  artName(pParse, 
25e0: 70 49 64 31 2c 20 70 49 64 32 2c 20 26 70 49 64  pId1, pId2, &pId
25f0: 29 3b 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29  );.  if( iDb<0 )
2600: 20 72 65 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d   return;.  pDb =
2610: 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
2620: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 74 65 6d  .  /* If the tem
2630: 70 20 64 61 74 61 62 61 73 65 20 68 61 73 20 62  p database has b
2640: 65 65 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 6e  een explicitly n
2650: 61 6d 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  amed as part of 
2660: 74 68 65 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61  the .  ** pragma
2670: 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69  , make sure it i
2680: 73 20 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20  s open. .  */.  
2690: 69 66 28 20 69 44 62 3d 3d 31 20 26 26 20 73 71  if( iDb==1 && sq
26a0: 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
26b0: 61 62 61 73 65 28 70 50 61 72 73 65 29 20 29 7b  abase(pParse) ){
26c0: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
26d0: 0a 0a 20 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69  ..  zLeft = sqli
26e0: 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
26f0: 28 64 62 2c 20 70 49 64 29 3b 0a 20 20 69 66 28  (db, pId);.  if(
2700: 20 21 7a 4c 65 66 74 20 29 20 72 65 74 75 72 6e   !zLeft ) return
2710: 3b 0a 20 20 69 66 28 20 6d 69 6e 75 73 46 6c 61  ;.  if( minusFla
2720: 67 20 29 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  g ){.    zRight 
2730: 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
2740: 28 64 62 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c  (db, "-%T", pVal
2750: 75 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ue);.  }else{.  
2760: 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74    zRight = sqlit
2770: 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
2780: 64 62 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d  db, pValue);.  }
2790: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 49 64 32  ..  assert( pId2
27a0: 20 29 3b 0a 20 20 7a 44 62 20 3d 20 70 49 64 32   );.  zDb = pId2
27b0: 2d 3e 6e 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61  ->n>0 ? pDb->zNa
27c0: 6d 65 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71  me : 0;.  if( sq
27d0: 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 70  lite3AuthCheck(p
27e0: 50 61 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52  Parse, SQLITE_PR
27f0: 41 47 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69  AGMA, zLeft, zRi
2800: 67 68 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20  ght, zDb) ){.   
2810: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
2820: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64  ;.  }..  /* Send
2830: 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c   an SQLITE_FCNTL
2840: 5f 50 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e  _PRAGMA file-con
2850: 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65  trol to the unde
2860: 72 6c 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20  rlying VFS.  ** 
2870: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20  connection.  If 
2880: 69 74 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  it returns SQLIT
2890: 45 5f 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d  E_OK, then assum
28a0: 65 20 74 68 61 74 20 74 68 65 20 56 46 53 0a 20  e that the VFS. 
28b0: 20 2a 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20   ** handled the 
28c0: 70 72 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72  pragma and gener
28d0: 61 74 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70  ate a no-op prep
28e0: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
28f0: 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d    **.  ** IMPLEM
2900: 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 31  ENTATION-OF: R-1
2910: 32 32 33 38 2d 35 35 31 32 30 20 57 68 65 6e 65  2238-55120 Whene
2920: 76 65 72 20 61 20 50 52 41 47 4d 41 20 73 74 61  ver a PRAGMA sta
2930: 74 65 6d 65 6e 74 20 69 73 20 70 61 72 73 65 64  tement is parsed
2940: 2c 0a 20 20 2a 2a 20 61 6e 20 53 51 4c 49 54 45  ,.  ** an SQLITE
2950: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69  _FCNTL_PRAGMA fi
2960: 6c 65 20 63 6f 6e 74 72 6f 6c 20 69 73 20 73 65  le control is se
2970: 6e 74 20 74 6f 20 74 68 65 20 6f 70 65 6e 20 73  nt to the open s
2980: 71 6c 69 74 65 33 5f 66 69 6c 65 0a 20 20 2a 2a  qlite3_file.  **
2990: 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f   object correspo
29a0: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 64 61 74  nding to the dat
29b0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 77 68  abase file to wh
29c0: 69 63 68 20 74 68 65 20 70 72 61 67 6d 61 0a 20  ich the pragma. 
29d0: 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 72 65   ** statement re
29e0: 66 65 72 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  fers..  **.  ** 
29f0: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
2a00: 46 3a 20 52 2d 32 39 38 37 35 2d 33 31 36 37 38  F: R-29875-31678
2a10: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   The argument to
2a20: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54   the SQLITE_FCNT
2a30: 4c 5f 50 52 41 47 4d 41 0a 20 20 2a 2a 20 66 69  L_PRAGMA.  ** fi
2a40: 6c 65 20 63 6f 6e 74 72 6f 6c 20 69 73 20 61 6e  le control is an
2a50: 20 61 72 72 61 79 20 6f 66 20 70 6f 69 6e 74 65   array of pointe
2a60: 72 73 20 74 6f 20 73 74 72 69 6e 67 73 20 28 63  rs to strings (c
2a70: 68 61 72 2a 2a 29 20 69 6e 20 77 68 69 63 68 20  har**) in which 
2a80: 74 68 65 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20  the.  ** second 
2a90: 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
2aa0: 72 72 61 79 20 69 73 20 74 68 65 20 6e 61 6d 65  rray is the name
2ab0: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 61   of the pragma a
2ac0: 6e 64 20 74 68 65 20 74 68 69 72 64 0a 20 20 2a  nd the third.  *
2ad0: 2a 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  * element is the
2ae0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2af0: 20 70 72 61 67 6d 61 20 6f 72 20 4e 55 4c 4c 20   pragma or NULL 
2b00: 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 68 61  if the pragma ha
2b10: 73 20 6e 6f 0a 20 20 2a 2a 20 61 72 67 75 6d 65  s no.  ** argume
2b20: 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74  nt..  */.  aFcnt
2b30: 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e  l[0] = 0;.  aFcn
2b40: 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20  tl[1] = zLeft;. 
2b50: 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69   aFcntl[2] = zRi
2b60: 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d  ght;.  aFcntl[3]
2b70: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
2b80: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
2b90: 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
2ba0: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
2bb0: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
2bc0: 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f  CNTL_PRAGMA, (vo
2bd0: 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69  id*)aFcntl);.  i
2be0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2bf0: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e   ){.    if( aFcn
2c00: 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 69  tl[0] ){.      i
2c10: 6e 74 20 6e 4d 65 6d 20 3d 20 2b 2b 70 50 61 72  nt nMem = ++pPar
2c20: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20 20  se->nMem;.      
2c30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
2c40: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
2c50: 20 30 2c 20 6e 4d 65 6d 2c 20 30 2c 20 61 46 63   0, nMem, 0, aFc
2c60: 6e 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20  ntl[0], 0);.    
2c70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
2c80: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
2c90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2ca0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
2cb0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
2cc0: 72 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f  result", SQLITE_
2cd0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
2ce0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
2cf0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
2d00: 2c 20 6e 4d 65 6d 2c 20 31 29 3b 0a 20 20 20 20  , nMem, 1);.    
2d10: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
2d20: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
2d30: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
2d40: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _out;.  }.  if( 
2d50: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
2d60: 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61  UND ){.    if( a
2d70: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
2d80: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
2d90: 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20  g(pParse, "%s", 
2da0: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
2db0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
2dc0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
2dd0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72  .    pParse->nEr
2de0: 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  r++;.    pParse-
2df0: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f  >rc = rc;.    go
2e00: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2e10: 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20   }..  /* Locate 
2e20: 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68  the pragma in th
2e30: 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a  e lookup table *
2e40: 2f 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75  /.  lwr = 0;.  u
2e50: 70 72 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61  pr = ArraySize(a
2e60: 50 72 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a  PragmaNames)-1;.
2e70: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
2e80: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
2e90: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
2ea0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72  rc = sqlite3_str
2eb0: 69 63 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61  icmp(zLeft, aPra
2ec0: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e  gmaNames[mid].zN
2ed0: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ame);.    if( rc
2ee0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
2ef0: 20 69 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20   if( rc<0 ){.   
2f00: 20 20 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31     upr = mid - 1
2f10: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2f20: 20 20 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31     lwr = mid + 1
2f30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
2f40: 28 20 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f  ( lwr>upr ) goto
2f50: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 70   pragma_out;.  p
2f60: 50 72 61 67 6d 61 20 3d 20 26 61 50 72 61 67 6d  Pragma = &aPragm
2f70: 61 4e 61 6d 65 73 5b 6d 69 64 5d 3b 0a 0a 20 20  aNames[mid];..  
2f80: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
2f90: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
2fa0: 20 69 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68   is loaded if th
2fb0: 65 20 70 72 61 67 6d 61 20 72 65 71 75 69 72 65  e pragma require
2fc0: 73 20 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20  s that */.  if( 
2fd0: 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46  (pPragma->mPragF
2fe0: 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 4e  lag & PragFlag_N
2ff0: 65 65 64 53 63 68 65 6d 61 29 21 3d 30 20 29 7b  eedSchema)!=0 ){
3000: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
3010: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
3020: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
3030: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
3040: 4a 75 6d 70 20 74 6f 20 74 68 65 20 61 70 70 72  Jump to the appr
3050: 6f 70 72 69 61 74 65 20 70 72 61 67 6d 61 20 68  opriate pragma h
3060: 61 6e 64 6c 65 72 20 2a 2f 0a 20 20 73 77 69 74  andler */.  swit
3070: 63 68 28 20 70 50 72 61 67 6d 61 2d 3e 65 50 72  ch( pPragma->ePr
3080: 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69 66 20  agTyp ){.  .#if 
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 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
30b0: 41 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  AS) && !defined(
30c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
30d0: 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20 2a  ECATED).  /*.  *
30e0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
30f0: 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63  ase.]default_cac
3100: 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  he_size.  **  PR
3110: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
3120: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
3130: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
3140: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
3150: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
3160: 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65 74  t persistent set
3170: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
3180: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
3190: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65  e.  The value re
31a0: 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61  turned is the ma
31b0: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a  ximum number of.
31c0: 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68    ** pages in th
31d0: 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20 54  e page cache.  T
31e0: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
31f0: 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75 72  ets both the cur
3200: 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20 63  rent.  ** page c
3210: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20  ache size value 
3220: 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74 65  and the persiste
3230: 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69  nt page cache si
3240: 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74  ze value.  ** st
3250: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
3260: 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a  base file..  **.
3270: 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69    ** Older versi
3280: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f  ons of SQLite wo
3290: 75 6c 64 20 73 65 74 20 74 68 65 20 64 65 66 61  uld set the defa
32a0: 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20 74  ult cache size t
32b0: 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69 76  o a.  ** negativ
32c0: 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64 69  e number to indi
32d0: 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73  cate synchronous
32e0: 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61 79  =OFF.  These day
32f0: 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20  s, synchronous. 
3300: 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f 6e   ** is always on
3310: 20 62 79 20 64 65 66 61 75 6c 74 20 72 65 67 61   by default rega
3320: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73 69  rdless of the si
3330: 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  gn of the defaul
3340: 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a  t cache.  ** siz
3350: 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75 65  e.  But continue
3360: 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62 73   to take the abs
3370: 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74  olute value of t
3380: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
3390: 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68 69  .  ** size of hi
33a0: 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69  storical compati
33b0: 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20 63  bility..  */.  c
33c0: 61 73 65 20 50 72 61 67 54 79 70 5f 44 45 46 41  ase PragTyp_DEFA
33d0: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  ULT_CACHE_SIZE: 
33e0: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
33f0: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
3400: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
3410: 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63  2);.    static c
3420: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
3430: 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d  getCacheSize[] =
3440: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54 72   {.      { OP_Tr
3450: 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c  ansaction, 0, 0,
3460: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20          0},     
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
3490: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
34a0: 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20  e,  0, 1,       
34b0: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
34c0: 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20  ACHE_SIZE},  /* 
34d0: 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  1 */.      { OP_
34e0: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
34f0: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
3500: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
3510: 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20 20  ,     0, 2,     
3520: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
3530: 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20 31  P_Subtract,    1
3540: 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a  , 2,        1},.
3550: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73        { OP_IfPos
3560: 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20  ,       1, 8,   
3570: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
3580: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
3590: 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   0, 1,        0}
35a0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
35b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20 2a            /* 6 *
35c0: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f  /.      { OP_Noo
35d0: 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20  p,        0, 0, 
35e0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
35f0: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
3600: 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20     1, 1,        
3610: 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69  0},.    };.    i
3620: 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73 71 6c  nt addr;.    sql
3630: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
3640: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
3650: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
3660: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
3670: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
3680: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3690: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
36a0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
36b0: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53   "cache_size", S
36c0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
36d0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
36e0: 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64  m += 2;.      ad
36f0: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
3700: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
3710: 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53  aySize(getCacheS
3720: 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69  ize), getCacheSi
3730: 7a 65 2c 69 4c 6e 29 3b 0a 20 20 20 20 20 20 73  ze,iLn);.      s
3740: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
3750: 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
3760: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3770: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
3780: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
3790: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
37a0: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 36  angeP1(v, addr+6
37b0: 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  , SQLITE_DEFAULT
37c0: 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a 20 20  _CACHE_SIZE);.  
37d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
37e0: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
37f0: 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65  3AbsInt32(sqlite
3800: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
3810: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67        sqlite3Beg
3820: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
3830: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29  (pParse, 0, iDb)
3840: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3850: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
3860: 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 31  Integer, size, 1
3870: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3880: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
3890: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c  _SetCookie, iDb,
38a0: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
38b0: 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b 0a 20  ACHE_SIZE, 1);. 
38c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
38d0: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
38e0: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
38f0: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53  );.      pDb->pS
3900: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
3910: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
3920: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
3930: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
3940: 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t, pDb->pSchema-
3950: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
3960: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
3970: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51   }.#endif /* !SQ
3980: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
3990: 50 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c 49  PRAGMAS && !SQLI
39a0: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
39b0: 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  ED */..#if !defi
39c0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
39d0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
39e0: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
39f0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65   [database.]page
3a00: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
3a10: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61  MA [database.]pa
3a20: 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  ge_size=N.  **. 
3a30: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
3a40: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
3a50: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66  urrent setting f
3a60: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  or the.  ** data
3a70: 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 69  base page size i
3a80: 6e 20 62 79 74 65 73 2e 20 20 54 68 65 20 73 65  n bytes.  The se
3a90: 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74  cond form sets t
3aa0: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
3ab0: 20 70 61 67 65 20 73 69 7a 65 20 76 61 6c 75 65   page size value
3ac0: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e  .  The value can
3ad0: 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 0a   only be set if.
3ae0: 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
3af0: 65 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62 65  e has not yet be
3b00: 65 6e 20 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f  en created..  */
3b10: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
3b20: 50 41 47 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20  PAGE_SIZE: {.   
3b30: 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44   Btree *pBt = pD
3b40: 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65  b->pBt;.    asse
3b50: 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20  rt( pBt!=0 );.  
3b60: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
3b70: 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20  .      int size 
3b80: 3d 20 41 4c 57 41 59 53 28 70 42 74 29 20 3f 20  = ALWAYS(pBt) ? 
3b90: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 50  sqlite3BtreeGetP
3ba0: 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a 20 30  ageSize(pBt) : 0
3bb0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  ;.      returnSi
3bc0: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
3bd0: 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73 69 7a  "page_size", siz
3be0: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
3bf0: 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d       /* Malloc m
3c00: 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73 65 74  ay fail when set
3c10: 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d 73 69  ting the page-si
3c20: 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69 73 20  ze, as there is 
3c30: 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20 20 20  an internal.    
3c40: 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74    ** buffer that
3c50: 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64 75 6c   the pager modul
3c60: 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e 67 20  e resizes using 
3c70: 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28  sqlite3_realloc(
3c80: 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
3c90: 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69    db->nextPagesi
3ca0: 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69  ze = sqlite3Atoi
3cb0: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
3cc0: 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  if( SQLITE_NOMEM
3cd0: 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  ==sqlite3BtreeSe
3ce0: 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c 20 64  tPageSize(pBt, d
3cf0: 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 2c  b->nextPagesize,
3d00: 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20 20 20  -1,0) ){.       
3d10: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
3d20: 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  d = 1;.      }. 
3d30: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
3d40: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
3d50: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
3d60: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  .]secure_delete.
3d70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
3d80: 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64  tabase.]secure_d
3d90: 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a  elete=ON/OFF.  *
3da0: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
3db0: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
3dc0: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
3dd0: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  g for the.  ** s
3de0: 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61  ecure_delete fla
3df0: 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  g.  The second f
3e00: 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20  orm changes the 
3e10: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20  secure_delete.  
3e20: 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20  ** flag setting 
3e30: 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e  and reports then
3e40: 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20  ew value..  */. 
3e50: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45   case PragTyp_SE
3e60: 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20  CURE_DELETE: {. 
3e70: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
3e80: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e  pDb->pBt;.    in
3e90: 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73  t b = -1;.    as
3ea0: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
3eb0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
3ec0: 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69  {.      b = sqli
3ed0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
3ee0: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  ight, 0);.    }.
3ef0: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
3f00: 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20  =0 && b>=0 ){.  
3f10: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
3f20: 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
3f30: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
3f40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
3f50: 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28  reeSecureDelete(
3f60: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
3f70: 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   b);.      }.   
3f80: 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74   }.    b = sqlit
3f90: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
3fa0: 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20  ete(pBt, b);.   
3fb0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
3fc0: 28 70 50 61 72 73 65 2c 20 22 73 65 63 75 72 65  (pParse, "secure
3fd0: 5f 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20  _delete", b);.  
3fe0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
3ff0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  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 0a 20 20 2a 2a 20 20  age_count.  **  
4020: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
4030: 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74  .]max_page_count
4040: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
4050: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
4060: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
4070: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
4080: 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d    ** maximum num
4090: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
40a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
40b0: 65 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65  e.  The .  ** se
40c0: 63 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70  cond form attemp
40d0: 74 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69  ts to change thi
40e0: 73 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68  s setting.  Both
40f0: 0a 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75  .  ** forms retu
4100: 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  rn the current s
4110: 65 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  etting..  **.  *
4120: 2a 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76  * The absolute v
4130: 61 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65  alue of N is use
4140: 64 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f  d.  This is undo
4150: 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67  cumented and mig
4160: 68 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20  ht.  ** change. 
4170: 20 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73   The only purpos
4180: 65 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20  e is to provide 
4190: 61 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74  an easy way to t
41a0: 65 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c  est.  ** the sql
41b0: 69 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66  ite3AbsInt32() f
41c0: 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20  unction..  **.  
41d0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
41e0: 62 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75 6e 74  base.]page_count
41f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
4200: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
4210: 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 70 65  pages in the spe
4220: 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 2e  cified database.
4230: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
4240: 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e 54 3a  gTyp_PAGE_COUNT:
4250: 20 7b 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b   {.    int iReg;
4260: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65  .    sqlite3Code
4270: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
4280: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  rse, iDb);.    i
4290: 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Reg = ++pParse->
42a0: 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20 73 71  nMem;.    if( sq
42b0: 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65  lite3Tolower(zLe
42c0: 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b 0a 20  ft[0])=='p' ){. 
42d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
42e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50 61 67  AddOp2(v, OP_Pag
42f0: 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69 52 65  ecount, iDb, iRe
4300: 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  g);.    }else{. 
4310: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4320: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 78  AddOp3(v, OP_Max
4330: 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52 65 67  Pgcnt, iDb, iReg
4340: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
4350: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
4360: 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74  e3AbsInt32(sqlit
4370: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 29  e3Atoi(zRight)))
4380: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
4390: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
43a0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 69   OP_ResultRow, i
43b0: 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Reg, 1);.    sql
43c0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
43d0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71  ls(v, 1);.    sq
43e0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
43f0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
4400: 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53  E_NAME, zLeft, S
4410: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
4420: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
4430: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
4440: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
4450: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a  ocking_mode.  **
4460: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
4470: 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  se.]locking_mode
4480: 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75   = (normal|exclu
4490: 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73  sive).  */.  cas
44a0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  e PragTyp_LOCKIN
44b0: 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f  G_MODE: {.    co
44c0: 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d  nst char *zRet =
44d0: 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69   "normal";.    i
44e0: 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f  nt eMode = getLo
44f0: 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74  ckingMode(zRight
4500: 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32  );..    if( pId2
4510: 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d  ->n==0 && eMode=
4520: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
4530: 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20  DE_QUERY ){.    
4540: 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41    /* Simple "PRA
4550: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
4560: 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  ;" statement. Th
4570: 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f  is is a query fo
4580: 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  r.      ** the c
4590: 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c  urrent default l
45a0: 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69  ocking mode (whi
45b0: 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ch may be differ
45c0: 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  ent to.      ** 
45d0: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
45e0: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
45f0: 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f  abase)..      */
4600: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64  .      eMode = d
4610: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  b->dfltLockMode;
4620: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4630: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
4640: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d  .      if( pId2-
4650: 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  >n==0 ){.       
4660: 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74   /* This indicat
4670: 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62  es that no datab
4680: 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65  ase name was spe
4690: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20  cified as part. 
46a0: 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
46b0: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e   PRAGMA command.
46c0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
46d0: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d  e locking-mode m
46e0: 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a  ust be.        *
46f0: 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74  * set on all att
4700: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c  ached databases,
4710: 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20   as well as the 
4720: 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20  main db file..  
4730: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20        **.       
4740: 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71   ** Also, the sq
4750: 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f  lite3.dfltLockMo
4760: 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  de variable is s
4770: 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20  et so that.     
4780: 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71     ** any subseq
4790: 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20  uently attached 
47a0: 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75  databases also u
47b0: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  se the specified
47c0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b  .        ** lock
47d0: 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20  ing mode..      
47e0: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74    */.        int
47f0: 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73   ii;.        ass
4800: 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44  ert(pDb==&db->aD
4810: 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66  b[0]);.        f
4820: 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e  or(ii=2; ii<db->
4830: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
4840: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
4850: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
4860: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
4870: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
4880: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
4890: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
48a0: 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  de);.        }. 
48b0: 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c         db->dfltL
48c0: 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d  ockMode = (u8)eM
48d0: 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ode;.      }.   
48e0: 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69     pPager = sqli
48f0: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
4900: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65  b->pBt);.      e
4910: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61  Mode = sqlite3Pa
4920: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
4930: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
4940: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
4950: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
4960: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41  OCKINGMODE_NORMA
4970: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  L.            ||
4980: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4990: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
49a0: 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65  IVE );.    if( e
49b0: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
49c0: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
49d0: 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20  E ){.      zRet 
49e0: 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20  = "exclusive";. 
49f0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
4a00: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
4a10: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
4a20: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
4a30: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
4a40: 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ME, "locking_mod
4a50: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
4a60: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
4a70: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
4a80: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
4a90: 2c 20 7a 52 65 74 2c 20 30 29 3b 0a 20 20 20 20  , zRet, 0);.    
4aa0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4ab0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
4ac0: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72  w, 1, 1);.    br
4ad0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
4ae0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
4af0: 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d  abase.]journal_m
4b00: 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ode.  **  PRAGMA
4b10: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72   [database.]jour
4b20: 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20  nal_mode =.  ** 
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b40: 20 20 20 20 20 28 64 65 6c 65 74 65 7c 70 65 72       (delete|per
4b50: 73 69 73 74 7c 6f 66 66 7c 74 72 75 6e 63 61 74  sist|off|truncat
4b60: 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66  e|memory|wal|off
4b70: 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ).  */.  case Pr
4b80: 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f  agTyp_JOURNAL_MO
4b90: 44 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 65 4d  DE: {.    int eM
4ba0: 6f 64 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  ode;        /* O
4bb0: 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f  ne of the PAGER_
4bc0: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
4bd0: 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20 20 69  symbols */.    i
4be0: 6e 74 20 69 69 3b 20 20 20 20 20 20 20 20 20 20  nt ii;          
4bf0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
4c00: 20 2a 2f 0a 0a 20 20 20 20 73 71 6c 69 74 65 33   */..    sqlite3
4c10: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
4c20: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
4c30: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
4c40: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
4c50: 4d 45 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ME, "journal_mod
4c60: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
4c70: 43 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a 52 69  C);..    if( zRi
4c80: 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ght==0 ){.      
4c90: 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
4ca0: 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f  o "=MODE" part o
4cb0: 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f  f the pragma, do
4cc0: 20 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65   a query for the
4cd0: 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  .      ** curren
4ce0: 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20  t mode */.      
4cf0: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
4d00: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
4d10: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4d20: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
4d30: 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ode;.      int n
4d40: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
4d50: 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  30(zRight);.    
4d60: 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28    for(eMode=0; (
4d70: 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a  zMode = sqlite3J
4d80: 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
4d90: 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65  Mode))!=0; eMode
4da0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
4db0: 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
4dc0: 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20  (zRight, zMode, 
4dd0: 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  n)==0 ) break;. 
4de0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
4df0: 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20   !zMode ){.     
4e00: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d     /* If the "=M
4e10: 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e  ODE" part does n
4e20: 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f  ot match any kno
4e30: 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c  wn journal mode,
4e40: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
4e50: 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20   do a query */. 
4e60: 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50         eMode = P
4e70: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
4e80: 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a  _QUERY;.      }.
4e90: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d      }.    if( eM
4ea0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  ode==PAGER_JOURN
4eb0: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20  ALMODE_QUERY && 
4ec0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20  pId2->n==0 ){.  
4ed0: 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22      /* Convert "
4ee0: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
4ef0: 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d  ode" into "PRAGM
4f00: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
4f10: 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44  ode" */.      iD
4f20: 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64  b = 0;.      pId
4f30: 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  2->n = 1;.    }.
4f40: 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e      for(ii=db->n
4f50: 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d  Db-1; ii>=0; ii-
4f60: 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  -){.      if( db
4f70: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26  ->aDb[ii].pBt &&
4f80: 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64   (ii==iDb || pId
4f90: 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20  2->n==0) ){.    
4fa0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
4fb0: 73 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b  sesBtree(v, ii);
4fc0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4fd0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
4fe0: 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69  _JournalMode, ii
4ff0: 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  , 1, eMode);.   
5000: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
5010: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
5020: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
5030: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65  , 1, 1);.    bre
5040: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
5050: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
5060: 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69  base.]journal_si
5070: 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50  ze_limit.  **  P
5080: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
5090: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
50a0: 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  mit=N.  **.  ** 
50b0: 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 73  Get or set the s
50c0: 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c  ize limit on rol
50d0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
50e0: 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  les..  */.  case
50f0: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
5100: 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _SIZE_LIMIT: {. 
5110: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
5120: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
5130: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
5140: 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d      i64 iLimit =
5150: 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69   -2;.    if( zRi
5160: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
5170: 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
5180: 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69  4(zRight, &iLimi
5190: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c  t);.      if( iL
51a0: 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74  imit<-1 ) iLimit
51b0: 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20   = -1;.    }.   
51c0: 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65   iLimit = sqlite
51d0: 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a  3PagerJournalSiz
51e0: 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69  eLimit(pPager, i
51f0: 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75  Limit);.    retu
5200: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
5210: 73 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a  se, "journal_siz
5220: 65 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d 69 74  e_limit", iLimit
5230: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
5240: 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
5250: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
5260: 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a  RAGMAS */..  /*.
5270: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
5280: 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63  tabase.]auto_vac
5290: 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  uum.  **  PRAGMA
52a0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f   [database.]auto
52b0: 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20  _vacuum=N.  **. 
52c0: 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74   ** Get or set t
52d0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
52e0: 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d 76  database 'auto-v
52f0: 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65 72  acuum' parameter
5300: 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75 65  ..  ** The value
5310: 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20 4e   is one of:  0 N
5320: 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e 43  ONE 1 FULL 2 INC
5330: 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69  REMENTAL.  */.#i
5340: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
5350: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63  T_AUTOVACUUM.  c
5360: 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54 4f  ase PragTyp_AUTO
5370: 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 42  _VACUUM: {.    B
5380: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
5390: 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  >pBt;.    assert
53a0: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
53b0: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
53c0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
53d0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 61 75  eInt(pParse, "au
53e0: 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69  to_vacuum", sqli
53f0: 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56  te3BtreeGetAutoV
5400: 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20  acuum(pBt));.   
5410: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
5420: 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74  t eAuto = getAut
5430: 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b  oVacuum(zRight);
5440: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
5450: 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f  Auto>=0 && eAuto
5460: 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  <=2 );.      db-
5470: 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28  >nextAutovac = (
5480: 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20  u8)eAuto;.      
5490: 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56  /* Call SetAutoV
54a0: 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69  acuum() to set i
54b0: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e  nitialize the in
54c0: 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a  ternal auto and.
54d0: 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61        ** incr-va
54e0: 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73  cuum flags. This
54f0: 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
5500: 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63  case this connec
5510: 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72  tion.      ** cr
5520: 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61  eates the databa
5530: 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69  se file. It is i
5540: 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74  mportant that it
5550: 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20   is created.    
5560: 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d    ** as an auto-
5570: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
5580: 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  b..      */.    
5590: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
55a0: 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d  reeSetAutoVacuum
55b0: 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20  (pBt, eAuto);.  
55c0: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
55d0: 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d  TE_OK && (eAuto=
55e0: 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20  =1 || eAuto==2) 
55f0: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ){.        /* Wh
5600: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61  en setting the a
5610: 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto_vacuum mode 
5620: 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22  to either "full"
5630: 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   or .        ** 
5640: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77  "incremental", w
5650: 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f  rite the value o
5660: 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65  f meta[6] in the
5670: 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
5680: 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72    ** file. Befor
5690: 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74  e writing to met
56a0: 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74  a[6], check that
56b0: 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74   meta[3] indicat
56c0: 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  es.        ** th
56d0: 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69  at this really i
56e0: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
56f0: 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73   capable databas
5700: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
5710: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
5720: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
5730: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
5740: 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74  2);.        stat
5750: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
5760: 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d  ist setMeta6[] =
5770: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f   {.          { O
5780: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
5790: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57b0: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
57c0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
57d0: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c  adCookie,     0,
57e0: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
57f0: 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53      BTREE_LARGES
5800: 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20  T_ROOT_PAGE},.  
5810: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
5830: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
5840: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5850: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
5860: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
5870: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
5880: 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20  OK, OE_Abort,   
5890: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
58a0: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
58b0: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
58c0: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
58d0: 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1,              
58e0: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a     0},    /* 4 *
58f0: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
5900: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20  _SetCookie,     
5910: 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   0,         BTRE
5920: 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31  E_INCR_VACUUM, 1
5930: 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20  },    /* 5 */.  
5940: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20        };.       
5950: 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20 20 20   int iAddr;.    
5960: 20 20 20 20 69 41 64 64 72 20 3d 20 73 71 6c 69      iAddr = sqli
5970: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
5980: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
5990: 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74 61  tMeta6), setMeta
59a0: 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 20  6, iLn);.       
59b0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
59c0: 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69  geP1(v, iAddr, i
59d0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
59e0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
59f0: 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62  (v, iAddr+1, iDb
5a00: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5a10: 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
5a20: 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72  , iAddr+2, iAddr
5a30: 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +4);.        sql
5a40: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
5a50: 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75  (v, iAddr+4, eAu
5a60: 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73  to-1);.        s
5a70: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5a80: 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69  P1(v, iAddr+5, i
5a90: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
5aa0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
5ab0: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  e(v, iDb);.     
5ac0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
5ad0: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
5ae0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
5af0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e 63  A [database.]inc
5b00: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28  remental_vacuum(
5b10: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20  N).  **.  ** Do 
5b20: 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65  N steps of incre
5b30: 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67  mental vacuuming
5b40: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a   on a database..
5b50: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
5b60: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
5b70: 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54  UUM.  case PragT
5b80: 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56  yp_INCREMENTAL_V
5b90: 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74  ACUUM: {.    int
5ba0: 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20   iLimit, addr;. 
5bb0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
5bc0: 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49   || !sqlite3GetI
5bd0: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c  nt32(zRight, &iL
5be0: 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c  imit) || iLimit<
5bf0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d  =0 ){.      iLim
5c00: 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b  it = 0x7fffffff;
5c10: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
5c20: 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
5c30: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
5c40: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
5c50: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5c60: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d  OP_Integer, iLim
5c70: 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72  it, 1);.    addr
5c80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
5c90: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56  dOp1(v, OP_IncrV
5ca0: 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62  acuum, iDb); Vdb
5cb0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
5cc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5cd0: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op1(v, OP_Result
5ce0: 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Row, 1);.    sql
5cf0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
5d00: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
5d10: 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  -1);.    sqlite3
5d20: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5d30: 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29  _IfPos, 1, addr)
5d40: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
5d50: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5d60: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
5d70: 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  dr);.    break;.
5d80: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
5d90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
5da0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20  PAGER_PRAGMAS.  
5db0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
5dc0: 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65  [database.]cache
5dd0: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
5de0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61  MA [database.]ca
5df0: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
5e00: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
5e10: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
5e20: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
5e30: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
5e40: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
5e50: 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66  ze. The second f
5e60: 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63  orm sets the loc
5e70: 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  al.  ** page cac
5e80: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  he size value.  
5e90: 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  If N is positive
5ea0: 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68   then that is th
5eb0: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
5ec0: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61   pages in the ca
5ed0: 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  che.  If N is ne
5ee0: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
5ef0: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
5f00: 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65  pages is adjuste
5f10: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61  d so that the ca
5f20: 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69  che uses -N kibi
5f30: 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65  bytes.  ** of me
5f40: 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  mory..  */.  cas
5f50: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
5f60: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65  SIZE: {.    asse
5f70: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
5f80: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
5f90: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
5fa0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
5fb0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
5fc0: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
5fd0: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
5fe0: 75 74 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ut;.      return
5ff0: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
6000: 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20  , "cache_size", 
6010: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
6020: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
6030: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
6040: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
6050: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
6060: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
6070: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
6080: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
6090: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
60a0: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
60b0: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
60c0: 73 69 7a 65 29 3b 0a 20 20 20 20 20 20 69 66 28  size);.      if(
60d0: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
60e0: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
60f0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
6100: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
6110: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
6120: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
6130: 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20  ]mmap_size(N).  
6140: 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20 74 6f 20  **.  ** Used to 
6150: 73 65 74 20 6d 61 70 70 69 6e 67 20 73 69 7a 65  set mapping size
6160: 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d 61 70 70   limit. The mapp
6170: 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 20 69  ing size limit i
6180: 73 0a 20 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c  s.  ** used to l
6190: 69 6d 69 74 20 74 68 65 20 61 67 67 72 65 67 61  imit the aggrega
61a0: 74 65 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d  te size of all m
61b0: 65 6d 6f 72 79 20 6d 61 70 70 65 64 20 72 65 67  emory mapped reg
61c0: 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a  ions of the.  **
61d0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
61e0: 49 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  If this paramete
61f0: 72 20 69 73 20 73 65 74 20 74 6f 20 7a 65 72 6f  r is set to zero
6200: 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61  , then memory ma
6210: 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f  pping.  ** is no
6220: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 2e 20 20  t used at all.  
6230: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
6240: 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  , then the defau
6250: 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20  lt memory map.  
6260: 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65 72 6d 69  ** limit determi
6270: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
6280: 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
6290: 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69  FIG_MMAP_SIZE) i
62a0: 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20  s set..  ** The 
62b0: 70 61 72 61 6d 65 74 65 72 20 4e 20 69 73 20 6d  parameter N is m
62c0: 65 61 73 75 72 65 64 20 69 6e 20 62 79 74 65 73  easured in bytes
62d0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73  ..  **.  ** This
62e0: 20 76 61 6c 75 65 20 69 73 20 61 64 76 69 73 6f   value is adviso
62f0: 72 79 2e 20 20 54 68 65 20 75 6e 64 65 72 6c 79  ry.  The underly
6300: 69 6e 67 20 56 46 53 20 69 73 20 66 72 65 65 20  ing VFS is free 
6310: 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20  to memory map.  
6320: 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20 6f 72 20  ** as little or 
6330: 61 73 20 6d 75 63 68 20 61 73 20 69 74 20 77 61  as much as it wa
6340: 6e 74 73 2e 20 20 45 78 63 65 70 74 2c 20 69 66  nts.  Except, if
6350: 20 4e 20 69 73 20 73 65 74 20 74 6f 20 30 20 74   N is set to 0 t
6360: 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 75 70 70  hen the.  ** upp
6370: 65 72 20 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e  er layers will n
6380: 65 76 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20  ever invoke the 
6390: 78 46 65 74 63 68 20 69 6e 74 65 72 66 61 63 65  xFetch interface
63a0: 73 20 74 6f 20 74 68 65 20 56 46 53 2e 0a 20 20  s to the VFS..  
63b0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
63c0: 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20  p_MMAP_SIZE: {. 
63d0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
63e0: 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f   sz;.#if SQLITE_
63f0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a  MAX_MMAP_SIZE>0.
6400: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
6410: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
6420: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
6430: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
6440: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
6450: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
6460: 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69  ecOrHexToI64(zRi
6470: 67 68 74 2c 20 26 73 7a 29 3b 0a 20 20 20 20 20  ght, &sz);.     
6480: 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d   if( sz<0 ) sz =
6490: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
64a0: 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20  nfig.szMmap;.   
64b0: 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d     if( pId2->n==
64c0: 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d  0 ) db->szMmap =
64d0: 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   sz;.      for(i
64e0: 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e  i=db->nDb-1; ii>
64f0: 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20  =0; ii--){.     
6500: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
6510: 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69  i].pBt && (ii==i
6520: 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30  Db || pId2->n==0
6530: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  ) ){.          s
6540: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 4d 6d  qlite3BtreeSetMm
6550: 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62 5b  apLimit(db->aDb[
6560: 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20 20  ii].pBt, sz);.  
6570: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
6580: 20 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20 2d      }.    sz = -
6590: 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  1;.    rc = sqli
65a0: 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
65b0: 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45  (db, zDb, SQLITE
65c0: 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45  _FCNTL_MMAP_SIZE
65d0: 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a 20 20  , &sz);.#else.  
65e0: 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 72 63    sz = 0;.    rc
65f0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65   = SQLITE_OK;.#e
6600: 6e 64 69 66 0a 20 20 20 20 69 66 28 20 72 63 3d  ndif.    if( rc=
6610: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6620: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
6630: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6d 6d 61  Int(pParse, "mma
6640: 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20  p_size", sz);.  
6650: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d    }else if( rc!=
6660: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20  SQLITE_NOTFOUND 
6670: 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  ){.      pParse-
6680: 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70  >nErr++;.      p
6690: 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a  Parse->rc = rc;.
66a0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
66b0: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
66c0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
66d0: 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ore.  **   PRAGM
66e0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22  A temp_store = "
66f0: 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79  default"|"memory
6700: 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20  "|"file".  **.  
6710: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
6720: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
6730: 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f   of the temp_sto
6740: 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  re flag.  Changi
6750: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61  ng.  ** the loca
6760: 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  l value does not
6770: 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f   make changes to
6780: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61   the disk file a
6790: 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20  nd the default. 
67a0: 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62   ** value will b
67b0: 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e  e restored the n
67c0: 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  ext time the dat
67d0: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e  abase is opened.
67e0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20  .  **.  ** Note 
67f0: 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69  that it is possi
6800: 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72  ble for the libr
6810: 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ary compile-time
6820: 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a   options to.  **
6830: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 73   override this s
6840: 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61  etting.  */.  ca
6850: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
6860: 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28  STORE: {.    if(
6870: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
6880: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
6890: 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70 5f  t(pParse, "temp_
68a0: 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70  store", db->temp
68b0: 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c  _store);.    }el
68c0: 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65  se{.      change
68d0: 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72  TempStorage(pPar
68e0: 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20  se, zRight);.   
68f0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
6900: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  }..  /*.  **   P
6910: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6920: 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20  _directory.  ** 
6930: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6940: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory = 
6950: 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61  ""|"directory_na
6960: 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  me".  **.  ** Re
6970: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
6980: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  local value of t
6990: 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  he temp_store_di
69a0: 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43  rectory flag.  C
69b0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
69c0: 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70   value sets a sp
69d0: 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79  ecific directory
69e0: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
69f0: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e  temporary files.
6a00: 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f  .  ** Setting to
6a10: 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72   a null string r
6a20: 65 76 65 72 74 73 20 74 6f 20 74 68 65 20 64 65  everts to the de
6a30: 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20  fault temporary 
6a40: 64 69 72 65 63 74 6f 72 79 20 73 65 61 72 63 68  directory search
6a50: 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72  ..  ** If tempor
6a60: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 69 73  ary directory is
6a70: 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69   changed, then i
6a80: 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f  nvalidateTempSto
6a90: 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a  rage..  **.  */.
6aa0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54    case PragTyp_T
6ab0: 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54  EMP_STORE_DIRECT
6ac0: 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORY: {.    if( !
6ad0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6ae0: 69 66 28 20 73 71 6c 69 74 65 33 5f 74 65 6d 70  if( sqlite3_temp
6af0: 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20  _directory ){.  
6b00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6b10: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
6b20: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
6b30: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
6b40: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
6b50: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
6b60: 20 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69    "temp_store_di
6b70: 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45  rectory", SQLITE
6b80: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
6b90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
6ba0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
6bb0: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69  8, 0, 1, 0, sqli
6bc0: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
6bd0: 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  ry, 0);.        
6be0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
6bf0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
6c00: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 1, 1);.      
6c10: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66  }.    }else{.#if
6c20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6c30: 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a  _WSD.      if( z
6c40: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
6c50: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
6c60: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
6c70: 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56  3OsAccess(db->pV
6c80: 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49  fs, zRight, SQLI
6c90: 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52  TE_ACCESS_READWR
6ca0: 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  ITE, &res);.    
6cb0: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
6cc0: 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20  TE_OK || res==0 
6cd0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
6ce0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
6cf0: 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74  rse, "not a writ
6d00: 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29  able directory")
6d10: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
6d20: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
6d30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
6d40: 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f       if( SQLITE_
6d50: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20  TEMP_STORE==0.  
6d60: 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f       || (SQLITE_
6d70: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26  TEMP_STORE==1 &&
6d80: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c   db->temp_store<
6d90: 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53  =1).       || (S
6da0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
6db0: 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f  ==2 && db->temp_
6dc0: 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20  store==1).      
6dd0: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c  ){.        inval
6de0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
6df0: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
6e00: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
6e10: 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d  free(sqlite3_tem
6e20: 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  p_directory);.  
6e30: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
6e40: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ] ){.        sql
6e50: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
6e60: 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ory = sqlite3_mp
6e70: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67  rintf("%s", zRig
6e80: 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ht);.      }else
6e90: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
6ea0: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
6eb0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65   = 0;.      }.#e
6ec0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
6ed0: 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d  MIT_WSD */.    }
6ee0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6ef0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57  .#if SQLITE_OS_W
6f00: 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  IN.  /*.  **   P
6f10: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
6f20: 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20  _directory.  ** 
6f30: 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74    PRAGMA data_st
6f40: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory = 
6f50: 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61  ""|"directory_na
6f60: 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  me".  **.  ** Re
6f70: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
6f80: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  local value of t
6f90: 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  he data_store_di
6fa0: 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43  rectory flag.  C
6fb0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
6fc0: 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70   value sets a sp
6fd0: 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79  ecific directory
6fe0: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
6ff0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74  database files t
7000: 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70  hat.  ** were sp
7010: 65 63 69 66 69 65 64 20 77 69 74 68 20 61 20 72  ecified with a r
7020: 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65  elative pathname
7030: 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20  .  Setting to a 
7040: 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65  null string reve
7050: 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  rts.  ** to the 
7060: 64 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65  default database
7070: 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63   directory, whic
7080: 68 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66  h for database f
7090: 69 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 77  iles specified w
70a0: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74  ith.  ** a relat
70b0: 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72  ive path will pr
70c0: 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65 64 20  obably be based 
70d0: 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  on the current d
70e0: 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65  irectory for the
70f0: 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20  .  ** process.  
7100: 44 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 70  Database file sp
7110: 65 63 69 66 69 65 64 20 77 69 74 68 20 61 6e 20  ecified with an 
7120: 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72  absolute path ar
7130: 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20  e not impacted. 
7140: 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74 74   ** by this sett
7150: 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ing, regardless 
7160: 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20  of its value..  
7170: 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  **.  */.  case P
7180: 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52  ragTyp_DATA_STOR
7190: 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20  E_DIRECTORY: {. 
71a0: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
71b0: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
71c0: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
71d0: 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ry ){.        sq
71e0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
71f0: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
7200: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7210: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
7220: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20  OLNAME_NAME, .  
7230: 20 20 20 20 20 20 20 20 20 20 22 64 61 74 61 5f            "data_
7240: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22  store_directory"
7250: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
7260: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
7270: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
7280: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
7290: 20 30 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61   0, sqlite3_data
72a0: 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a  _directory, 0);.
72b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
72c0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
72d0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
72e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
72f0: 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  lse{.#ifndef SQL
7300: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20  ITE_OMIT_WSD.   
7310: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7320: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
7330: 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20  res;.        rc 
7340: 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73  = sqlite3OsAcces
7350: 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67  s(db->pVfs, zRig
7360: 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53  ht, SQLITE_ACCES
7370: 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72 65  S_READWRITE, &re
7380: 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
7390: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc!=SQLITE_OK ||
73a0: 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
73b0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
73c0: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f  rMsg(pParse, "no
73d0: 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72  t a writable dir
73e0: 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20  ectory");.      
73f0: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
7400: 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  out;.        }. 
7410: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
7420: 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65  ite3_free(sqlite
7430: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
7440: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  );.      if( zRi
7450: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
7460: 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64    sqlite3_data_d
7470: 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74  irectory = sqlit
7480: 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
7490: 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20   zRight);.      
74a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
74b0: 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65  qlite3_data_dire
74c0: 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20  ctory = 0;.     
74d0: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
74e0: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a  ITE_OMIT_WSD */.
74f0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7500: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
7510: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c   SQLITE_ENABLE_L
7520: 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f  OCKING_STYLE.  /
7530: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
7540: 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f  [database.]lock_
7550: 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20  proxy_file.  ** 
7560: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7570: 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  se.]lock_proxy_f
7580: 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22  ile = ":auto:"|"
7590: 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a  lock_file_path".
75a0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
75b0: 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75   or set the valu
75c0: 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72  e of the lock_pr
75d0: 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20  oxy_file flag.  
75e0: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
75f0: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
7600: 70 65 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20  pecific file to 
7610: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
7620: 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b  base access lock
7630: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63  s..  **.  */.  c
7640: 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b  ase PragTyp_LOCK
7650: 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20  _PROXY_FILE: {. 
7660: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
7670: 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70  {.      Pager *p
7680: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
7690: 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70  treePager(pDb->p
76a0: 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20  Bt);.      char 
76b0: 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68  *proxy_file_path
76c0: 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73   = NULL;.      s
76d0: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69  qlite3_file *pFi
76e0: 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  le = sqlite3Page
76f0: 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20  rFile(pPager);. 
7700: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69       sqlite3OsFi
7710: 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46  leControlHint(pF
7720: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f  ile, SQLITE_GET_
7730: 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a  LOCKPROXYFILE, .
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7750: 20 20 20 20 20 20 20 20 20 20 20 26 70 72 6f 78             &prox
7760: 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20  y_file_path);.  
7770: 20 20 20 20 0a 20 20 20 20 20 20 69 66 28 20 70      .      if( p
7780: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 29  roxy_file_path )
7790: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
77a0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
77b0: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  v, 1);.        s
77c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
77d0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
77e0: 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20  ME_NAME, .      
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7800: 20 20 20 20 20 20 20 20 22 6c 6f 63 6b 5f 70 72          "lock_pr
7810: 6f 78 79 5f 66 69 6c 65 22 2c 20 53 51 4c 49 54  oxy_file", SQLIT
7820: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
7830: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
7840: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
7850: 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 72 6f  g8, 0, 1, 0, pro
7860: 78 79 5f 66 69 6c 65 5f 70 61 74 68 2c 20 30 29  xy_file_path, 0)
7870: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
7880: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
7890: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
78a0: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
78b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67  }else{.      Pag
78c0: 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
78d0: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
78e0: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20  Db->pBt);.      
78f0: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46  sqlite3_file *pF
7900: 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ile = sqlite3Pag
7910: 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a  erFile(pPager);.
7920: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
7930: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
7940: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  0] ){.        re
7950: 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43  s=sqlite3OsFileC
7960: 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51  ontrol(pFile, SQ
7970: 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f  LITE_SET_LOCKPRO
7980: 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20  XYFILE, .       
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 52                zR
79b0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65  ight);.      } e
79c0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65  lse {.        re
79d0: 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43  s=sqlite3OsFileC
79e0: 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51  ontrol(pFile, SQ
79f0: 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f  LITE_SET_LOCKPRO
7a00: 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20  XYFILE, .       
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55                NU
7a30: 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  LL);.      }.   
7a40: 20 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49     if( res!=SQLI
7a50: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
7a60: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
7a70: 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64  (pParse, "failed
7a80: 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f   to set lock pro
7a90: 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20  xy file");.     
7aa0: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
7ab0: 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
7ac0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
7ad0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7ae0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
7af0: 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a  _STYLE */      .
7b00: 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20      .  /*.  **  
7b10: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
7b20: 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20  e.]synchronous. 
7b30: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
7b40: 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e  tabase.]synchron
7b50: 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41  ous=OFF|ON|NORMA
7b60: 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a  L|FULL.  **.  **
7b70: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
7b80: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
7b90: 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75  f the synchronou
7ba0: 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  s flag.  Changin
7bb0: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
7bc0: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
7bd0: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
7be0: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
7bf0: 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75  d the.  ** defau
7c00: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
7c10: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
7c20: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
7c30: 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65  base is.  ** ope
7c40: 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ned..  */.  case
7c50: 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f   PragTyp_SYNCHRO
7c60: 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20  NOUS: {.    if( 
7c70: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
7c80: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7c90: 28 70 50 61 72 73 65 2c 20 22 73 79 6e 63 68 72  (pParse, "synchr
7ca0: 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61 66  onous", pDb->saf
7cb0: 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20 20  ety_level-1);.  
7cc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
7cd0: 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
7ce0: 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  it ){.        sq
7cf0: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
7d00: 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20 20  arse, .         
7d10: 20 20 20 22 53 61 66 65 74 79 20 6c 65 76 65 6c     "Safety level
7d20: 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e   may not be chan
7d30: 67 65 64 20 69 6e 73 69 64 65 20 61 20 74 72 61  ged inside a tra
7d40: 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20  nsaction");.    
7d50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
7d60: 20 69 6e 74 20 69 4c 65 76 65 6c 20 3d 20 28 67   int iLevel = (g
7d70: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52  etSafetyLevel(zR
7d80: 69 67 68 74 2c 30 2c 31 29 2b 31 29 20 26 20 50  ight,0,1)+1) & P
7d90: 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AGER_SYNCHRONOUS
7da0: 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20 20 69  _MASK;.        i
7db0: 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20 69  f( iLevel==0 ) i
7dc0: 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20 20  Level = 1;.     
7dd0: 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c     pDb->safety_l
7de0: 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a 20  evel = iLevel;. 
7df0: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67         setAllPag
7e00: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
7e10: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
7e20: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
7e30: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
7e40: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
7e50: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7e60: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
7e70: 41 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  AS.  case PragTy
7e80: 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66  p_FLAG: {.    if
7e90: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
7ea0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
7eb0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 70 50 72  eInt(pParse, pPr
7ec0: 61 67 6d 61 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62  agma->zName, (db
7ed0: 2d 3e 66 6c 61 67 73 20 26 20 70 50 72 61 67 6d  ->flags & pPragm
7ee0: 61 2d 3e 69 41 72 67 29 21 3d 30 20 29 3b 0a 20  a->iArg)!=0 );. 
7ef0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7f00: 69 6e 74 20 6d 61 73 6b 20 3d 20 70 50 72 61 67  int mask = pPrag
7f10: 6d 61 2d 3e 69 41 72 67 3b 20 20 20 20 2f 2a 20  ma->iArg;    /* 
7f20: 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20  Mask of bits to 
7f30: 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f  set or clear. */
7f40: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
7f50: 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a  utoCommit==0 ){.
7f60: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69          /* Forei
7f70: 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d  gn key support m
7f80: 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65  ay not be enable
7f90: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68  d or disabled wh
7fa0: 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20  ile not.        
7fb0: 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69  ** in auto-commi
7fc0: 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20  t mode.  */.    
7fd0: 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51      mask &= ~(SQ
7fe0: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
7ff0: 29 3b 0a 20 20 20 20 20 20 7d 0a 23 69 66 20 53  );.      }.#if S
8000: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
8010: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 20 20 20 20  NTICATION.      
8020: 69 66 28 20 64 62 2d 3e 61 75 74 68 2e 61 75 74  if( db->auth.aut
8030: 68 4c 65 76 65 6c 3d 3d 55 41 55 54 48 5f 55 73  hLevel==UAUTH_Us
8040: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  er ){.        /*
8050: 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f   Do not allow no
8060: 6e 2d 61 64 6d 69 6e 20 75 73 65 72 73 20 74 6f  n-admin users to
8070: 20 6d 6f 64 69 66 79 20 74 68 65 20 73 63 68 65   modify the sche
8080: 6d 61 20 61 72 62 69 74 72 61 72 69 6c 79 20 2a  ma arbitrarily *
8090: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
80a0: 3d 20 7e 28 53 51 4c 49 54 45 5f 57 72 69 74 65  = ~(SQLITE_Write
80b0: 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 7d  Schema);.      }
80c0: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 69  .#endif..      i
80d0: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
80e0: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20  lean(zRight, 0) 
80f0: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  ){.        db->f
8100: 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20  lags |= mask;.  
8110: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8120: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
8130: 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 69  ~mask;.        i
8140: 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f  f( mask==SQLITE_
8150: 44 65 66 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e  DeferFKs ) db->n
8160: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
8170: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  = 0;.      }..  
8180: 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74      /* Many of t
8190: 68 65 20 66 6c 61 67 2d 70 72 61 67 6d 61 73 20  he flag-pragmas 
81a0: 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64 65 20  modify the code 
81b0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
81c0: 20 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63   SQL .      ** c
81d0: 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75  ompiler (eg. cou
81e0: 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20  nt_changes). So 
81f0: 61 64 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f  add an opcode to
8200: 20 65 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20   expire all.    
8210: 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51    ** compiled SQ
8220: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 66 74  L statements aft
8230: 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 70  er modifying a p
8240: 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20  ragma value..   
8250: 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
8260: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8270: 20 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c 20 30   OP_Expire, 0, 0
8280: 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50  );.      setAllP
8290: 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20  agerFlags(db);. 
82a0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
82b0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
82c0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
82d0: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
82e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
82f0: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20  CHEMA_PRAGMAS.  
8300: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
8310: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62   table_info(<tab
8320: 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  le>).  **.  ** R
8330: 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72  eturn a single r
8340: 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ow for each colu
8350: 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20  mn of the named 
8360: 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d  table. The colum
8370: 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72  ns of.  ** the r
8380: 65 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74  eturned data set
8390: 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20   are:.  **.  ** 
83a0: 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75  cid:        Colu
83b0: 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20  mn id (numbered 
83c0: 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
83d0: 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20  ht, starting at 
83e0: 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20  0).  ** name:   
83f0: 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a      Column name.
8400: 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20    ** type:      
8410: 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   Column declarat
8420: 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e  ion type..  ** n
8430: 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20  otnull:    True 
8440: 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73  if 'NOT NULL' is
8450: 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20   part of column 
8460: 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a  declaration.  **
8470: 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65   dflt_value: The
8480: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
8490: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69  or the column, i
84a0: 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  f any..  */.  ca
84b0: 73 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45  se PragTyp_TABLE
84c0: 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68  _INFO: if( zRigh
84d0: 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a  t ){.    Table *
84e0: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
84f0: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
8500: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
8510: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
8520: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c   ){.      int i,
8530: 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48   k;.      int nH
8540: 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20  idden = 0;.     
8550: 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20   Column *pCol;. 
8560: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20       Index *pPk 
8570: 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79  = sqlite3Primary
8580: 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a  KeyIndex(pTab);.
8590: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
85a0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36  eSetNumCols(v, 6
85b0: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
85c0: 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20  >nMem = 6;.     
85d0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
85e0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
85f0: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
8600: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
8610: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
8620: 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51  _NAME, "cid", SQ
8630: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8640: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8650: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
8660: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
8670: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
8680: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
8690: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
86a0: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
86b0: 4e 41 4d 45 2c 20 22 74 79 70 65 22 2c 20 53 51  NAME, "type", SQ
86c0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
86d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
86e0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
86f0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
8700: 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f  otnull", SQLITE_
8710: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
8720: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8730: 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41  Name(v, 4, COLNA
8740: 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76  ME_NAME, "dflt_v
8750: 61 6c 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  alue", SQLITE_ST
8760: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
8770: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
8780: 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45  me(v, 5, COLNAME
8790: 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c  _NAME, "pk", SQL
87a0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
87b0: 20 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65     sqlite3ViewGe
87c0: 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61  tColumnNames(pPa
87d0: 72 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20  rse, pTab);.    
87e0: 20 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d    for(i=0, pCol=
87f0: 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54  pTab->aCol; i<pT
8800: 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70  ab->nCol; i++, p
8810: 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  Col++){.        
8820: 69 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  if( IsHiddenColu
8830: 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20  mn(pCol) ){.    
8840: 20 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b        nHidden++;
8850: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69  .          conti
8860: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  nue;.        }. 
8870: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
8880: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
8890: 6e 74 65 67 65 72 2c 20 69 2d 6e 48 69 64 64 65  nteger, i-nHidde
88a0: 6e 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  n, 1);.        s
88b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
88c0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
88d0: 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a  0, 2, 0, pCol->z
88e0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
88f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8900: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
8910: 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20  8, 0, 3, 0,.    
8920: 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79         pCol->zTy
8930: 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65  pe ? pCol->zType
8940: 20 3a 20 22 22 2c 20 30 29 3b 0a 20 20 20 20 20   : "", 0);.     
8950: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8960: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
8970: 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75  er, (pCol->notNu
8980: 6c 6c 20 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b  ll ? 1 : 0), 4);
8990: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 43 6f  .        if( pCo
89a0: 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20  l->zDflt ){.    
89b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
89c0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
89d0: 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20  ring8, 0, 5, 0, 
89e0: 28 63 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66  (char*)pCol->zDf
89f0: 6c 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  lt, 0);.        
8a00: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
8a10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8a20: 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30  p2(v, OP_Null, 0
8a30: 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 5);.        }.
8a40: 20 20 20 20 20 20 20 20 69 66 28 20 28 70 43 6f          if( (pCo
8a50: 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  l->colFlags & CO
8a60: 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d  LFLAG_PRIMKEY)==
8a70: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
8a80: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 0;.        }e
8a90: 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29  lse if( pPk==0 )
8aa0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
8ab0: 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
8ac0: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
8ad0: 6b 3d 31 3b 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43  k=1; k<=pTab->nC
8ae0: 6f 6c 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c  ol && pPk->aiCol
8af0: 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b  umn[k-1]!=i; k++
8b00: 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ){}.        }.  
8b10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8b20: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
8b30: 74 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20 20  teger, k, 6);.  
8b40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8b50: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
8b60: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a  sultRow, 1, 6);.
8b70: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
8b80: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
8b90: 73 65 20 50 72 61 67 54 79 70 5f 53 54 41 54 53  se PragTyp_STATS
8ba0: 3a 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  : {.    Index *p
8bb0: 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c 65  Idx;.    HashEle
8bc0: 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73 71  m *i;.    v = sq
8bd0: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
8be0: 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  rse);.    sqlite
8bf0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
8c00: 76 2c 20 34 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 4);.    pPars
8c10: 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20  e->nMem = 4;.   
8c20: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
8c30: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
8c40: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
8c50: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
8c60: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
8c70: 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51  AME, "table", SQ
8c80: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8c90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8ca0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
8cb0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 64  LNAME_NAME, "ind
8cc0: 65 78 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ex", SQLITE_STAT
8cd0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
8ce0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
8cf0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
8d00: 45 2c 20 22 77 69 64 74 68 22 2c 20 53 51 4c 49  E, "width", SQLI
8d10: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8d20: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8d30: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
8d40: 41 4d 45 5f 4e 41 4d 45 2c 20 22 68 65 69 67 68  AME_NAME, "heigh
8d50: 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  t", SQLITE_STATI
8d60: 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73 71  C);.    for(i=sq
8d70: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 70  liteHashFirst(&p
8d80: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62 6c  Db->pSchema->tbl
8d90: 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c 69  Hash); i; i=sqli
8da0: 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a  teHashNext(i)){.
8db0: 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
8dc0: 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
8dd0: 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73 71 6c  ta(i);.      sql
8de0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
8df0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
8e00: 20 31 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61   1, 0, pTab->zNa
8e10: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  me, 0);.      sq
8e20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8e30: 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 32  v, OP_Null, 0, 2
8e40: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8e50: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8e60: 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20 20  _Integer,.      
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e80: 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65       (int)sqlite
8e90: 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61  3LogEstToInt(pTa
8ea0: 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 20 33 29  b->szTabRow), 3)
8eb0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8ec0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8ed0: 49 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20 20  Integer, .      
8ee0: 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33      (int)sqlite3
8ef0: 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61 62  LogEstToInt(pTab
8f00: 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29 2c 20 34  ->nRowLogEst), 4
8f10: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8f20: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8f30: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34  _ResultRow, 1, 4
8f40: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64  );.      for(pId
8f50: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
8f60: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
8f70: 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20  >pNext){.       
8f80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8f90: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
8fa0: 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d  , 0, 2, 0, pIdx-
8fb0: 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  >zName, 0);.    
8fc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8fd0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
8fe0: 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9000: 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f    (int)sqlite3Lo
9010: 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e  gEstToInt(pIdx->
9020: 73 7a 49 64 78 52 6f 77 29 2c 20 33 29 3b 0a 20  szIdxRow), 3);. 
9030: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9040: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
9050: 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20 20 20  nteger, .       
9060: 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65       (int)sqlite
9070: 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 49 64  3LogEstToInt(pId
9080: 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 30  x->aiRowLogEst[0
9090: 5d 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  ]), 4);.        
90a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
90b0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
90c0: 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20  w, 1, 4);.      
90d0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
90e0: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
90f0: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a  gTyp_INDEX_INFO:
9100: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
9110: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
9120: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
9130: 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69  .    pIdx = sqli
9140: 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c  te3FindIndex(db,
9150: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
9160: 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20     if( pIdx ){. 
9170: 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
9180: 20 20 69 6e 74 20 6d 78 3b 0a 20 20 20 20 20 20    int mx;.      
9190: 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69 41 72  if( pPragma->iAr
91a0: 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  g ){.        /* 
91b0: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e  PRAGMA index_xin
91c0: 66 6f 20 28 6e 65 77 65 72 20 76 65 72 73 69 6f  fo (newer versio
91d0: 6e 20 77 69 74 68 20 6d 6f 72 65 20 72 6f 77 73  n with more rows
91e0: 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 29 20 2a 2f   and columns) */
91f0: 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49  .        mx = pI
9200: 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20  dx->nColumn;.   
9210: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
9220: 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 7d 65 6c  m = 6;.      }el
9230: 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 50  se{.        /* P
9240: 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f  RAGMA index_info
9250: 20 28 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e   (legacy version
9260: 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20  ) */.        mx 
9270: 3d 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b  = pIdx->nKeyCol;
9280: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
9290: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20  >nMem = 3;.     
92a0: 20 7d 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20   }.      pTab = 
92b0: 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20  pIdx->pTable;.  
92c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
92d0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 70 50 61  etNumCols(v, pPa
92e0: 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20  rse->nMem);.    
92f0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
9300: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
9310: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
9320: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9330: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
9340: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e 6f 22 2c  E_NAME, "seqno",
9350: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9360: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9370: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
9380: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
9390: 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53   "cid", SQLITE_S
93a0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
93b0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
93c0: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
93d0: 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20  E_NAME, "name", 
93e0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
93f0: 20 20 20 20 20 20 69 66 28 20 70 50 72 61 67 6d        if( pPragm
9400: 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20  a->iArg ){.     
9410: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9420: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
9430: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 65  OLNAME_NAME, "de
9440: 73 63 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  sc", SQLITE_STAT
9450: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
9460: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
9470: 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45  me(v, 4, COLNAME
9480: 5f 4e 41 4d 45 2c 20 22 63 6f 6c 6c 22 2c 20 53  _NAME, "coll", S
9490: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
94a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
94b0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
94c0: 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  5, COLNAME_NAME,
94d0: 20 22 6b 65 79 22 2c 20 53 51 4c 49 54 45 5f 53   "key", SQLITE_S
94e0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 7d 0a  TATIC);.      }.
94f0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
9500: 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  <mx; i++){.     
9510: 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20 70 49     i16 cnum = pI
9520: 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b  dx->aiColumn[i];
9530: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9540: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9550: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
9560: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9570: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9580: 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20  _Integer, cnum, 
9590: 32 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  2);.        if( 
95a0: 63 6e 75 6d 3c 30 20 29 7b 0a 20 20 20 20 20 20  cnum<0 ){.      
95b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
95c0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c  ddOp2(v, OP_Null
95d0: 2c 20 30 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 0, 3);.       
95e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
95f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9600: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
9610: 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 54 61 62  8, 0, 3, 0, pTab
9620: 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61  ->aCol[cnum].zNa
9630: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
9640: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  }.        if( pP
9650: 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20  ragma->iArg ){. 
9660: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9670: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9680: 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e  _Integer, pIdx->
9690: 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 2c 20 34  aSortOrder[i], 4
96a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
96b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
96c0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
96d0: 20 35 2c 20 30 2c 20 70 49 64 78 2d 3e 61 7a 43   5, 0, pIdx->azC
96e0: 6f 6c 6c 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20  oll[i], 0);.    
96f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9700: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
9710: 74 65 67 65 72 2c 20 69 3c 70 49 64 78 2d 3e 6e  teger, i<pIdx->n
9720: 4b 65 79 43 6f 6c 2c 20 36 29 3b 0a 20 20 20 20  KeyCol, 6);.    
9730: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
9740: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9750: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9760: 20 31 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d   1, pParse->nMem
9770: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
9780: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
9790: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e   case PragTyp_IN
97a0: 44 45 58 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52  DEX_LIST: if( zR
97b0: 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65  ight ){.    Inde
97c0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62  x *pIdx;.    Tab
97d0: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e  le *pTab;.    in
97e0: 74 20 69 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  t i;.    pTab = 
97f0: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
9800: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
9810: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
9820: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
9830: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
9840: 73 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  se);.      sqlit
9850: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
9860: 28 76 2c 20 35 29 3b 0a 20 20 20 20 20 20 70 50  (v, 5);.      pP
9870: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a  arse->nMem = 5;.
9880: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
9890: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
98a0: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
98b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
98c0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
98d0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
98e0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
98f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9900: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9910: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
9920: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
9930: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
9940: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9950: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
9960: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71  NAME_NAME, "uniq
9970: 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ue", SQLITE_STAT
9980: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
9990: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
99a0: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
99b0: 41 4d 45 2c 20 22 6f 72 69 67 69 6e 22 2c 20 53  AME, "origin", S
99c0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
99d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
99e0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c  SetColName(v, 4,
99f0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9a00: 70 61 72 74 69 61 6c 22 2c 20 53 51 4c 49 54 45  partial", SQLITE
9a10: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
9a20: 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70  for(pIdx=pTab->p
9a30: 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64 78  Index, i=0; pIdx
9a40: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
9a50: 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, i++){.      
9a60: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a    const char *az
9a70: 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22 63 22  Origin[] = { "c"
9a80: 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b 0a 20  , "u", "pk" };. 
9a90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9aa0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
9ab0: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
9ac0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9ad0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
9ae0: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
9af0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pIdx->zName, 0)
9b00: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9b10: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9b20: 50 5f 49 6e 74 65 67 65 72 2c 20 49 73 55 6e 69  P_Integer, IsUni
9b30: 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 2c 20  queIndex(pIdx), 
9b40: 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  3);.        sqli
9b50: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
9b60: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
9b70: 34 2c 20 30 2c 20 61 7a 4f 72 69 67 69 6e 5b 70  4, 0, azOrigin[p
9b80: 49 64 78 2d 3e 69 64 78 54 79 70 65 5d 2c 20 30  Idx->idxType], 0
9b90: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9ba0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
9bb0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78  OP_Integer, pIdx
9bc0: 2d 3e 70 50 61 72 74 49 64 78 57 68 65 72 65 21  ->pPartIdxWhere!
9bd0: 3d 30 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20  =0, 5);.        
9be0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9bf0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
9c00: 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20 20 20 20  w, 1, 5);.      
9c10: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
9c20: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
9c30: 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49  gTyp_DATABASE_LI
9c40: 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b  ST: {.    int i;
9c50: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9c60: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
9c70: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
9c80: 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69  em = 3;.    sqli
9c90: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
9ca0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
9cb0: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
9cc0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9cd0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9ce0: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
9cf0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
9d00: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9d10: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9d20: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
9d30: 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
9d40: 20 22 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f   "file", SQLITE_
9d50: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72  STATIC);.    for
9d60: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
9d70: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
9d80: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d   db->aDb[i].pBt=
9d90: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
9da0: 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
9db0: 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30  >aDb[i].zName!=0
9dc0: 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
9dd0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9de0: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29  P_Integer, i, 1)
9df0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9e00: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
9e10: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
9e20: 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
9e30: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  me, 0);.      sq
9e40: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
9e50: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
9e60: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
9e70: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
9e80: 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61  etFilename(db->a
9e90: 44 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a  Db[i].pBt), 0);.
9ea0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9eb0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
9ec0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a  sultRow, 1, 3);.
9ed0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9ee0: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
9ef0: 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53  yp_COLLATION_LIS
9f00: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d  T: {.    int i =
9f10: 20 30 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d   0;.    HashElem
9f20: 20 2a 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   *p;.    sqlite3
9f30: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
9f40: 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 2);.    pParse
9f50: 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20  ->nMem = 2;.    
9f60: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
9f70: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
9f80: 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c  AME_NAME, "seq",
9f90: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9fa0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9fb0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
9fc0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9fd0: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
9fe0: 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 70  ATIC);.    for(p
9ff0: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
a000: 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b  (&db->aCollSeq);
a010: 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68   p; p=sqliteHash
a020: 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20  Next(p)){.      
a030: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d  CollSeq *pColl =
a040: 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69   (CollSeq *)sqli
a050: 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20  teHashData(p);. 
a060: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a070: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
a080: 65 67 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20  eger, i++, 1);. 
a090: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a0a0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
a0b0: 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70  ing8, 0, 2, 0, p
a0c0: 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b  Coll->zName, 0);
a0d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a0e0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
a0f0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b  esultRow, 1, 2);
a100: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
a110: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
a120: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
a130: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
a140: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a150: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63  _FOREIGN_KEY.  c
a160: 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45  ase PragTyp_FORE
a170: 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66  IGN_KEY_LIST: if
a180: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
a190: 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54  FKey *pFK;.    T
a1a0: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
a1b0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
a1c0: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67  ndTable(db, zRig
a1d0: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
a1e0: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
a1f0: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
a200: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
a210: 20 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46    pFK = pTab->pF
a220: 4b 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70  Key;.      if( p
a230: 46 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  FK ){.        in
a240: 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20  t i = 0; .      
a250: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a260: 4e 75 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20  NumCols(v, 8);. 
a270: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e         pParse->n
a280: 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20  Mem = 8;.       
a290: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
a2a0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
a2b0: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73   iDb);.        s
a2c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
a2d0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
a2e0: 4d 45 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53  ME_NAME, "id", S
a2f0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
a300: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a310: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
a320: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
a330: 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53   "seq", SQLITE_S
a340: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
a350: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
a360: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
a370: 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65  AME_NAME, "table
a380: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
a390: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
a3a0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
a3b0: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
a3c0: 41 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c  AME, "from", SQL
a3d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
a3e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a3f0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c  SetColName(v, 4,
a400: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
a410: 74 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  to", SQLITE_STAT
a420: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
a430: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a440: 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45  me(v, 5, COLNAME
a450: 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74  _NAME, "on_updat
a460: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
a470: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
a480: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
a490: 65 28 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 6, COLNAME_
a4a0: 4e 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65  NAME, "on_delete
a4b0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
a4c0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
a4d0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
a4e0: 28 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 7, COLNAME_N
a4f0: 41 4d 45 2c 20 22 6d 61 74 63 68 22 2c 20 53 51  AME, "match", SQ
a500: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
a510: 20 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29        while(pFK)
a520: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
a530: 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  j;.          for
a540: 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f  (j=0; j<pFK->nCo
a550: 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  l; j++){.       
a560: 20 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20       char *zCol 
a570: 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a  = pFK->aCol[j].z
a580: 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Col;.           
a590: 20 63 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65   char *zOnDelete
a5a0: 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f   = (char *)actio
a5b0: 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69  nName(pFK->aActi
a5c0: 6f 6e 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20  on[0]);.        
a5d0: 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64      char *zOnUpd
a5e0: 61 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63  ate = (char *)ac
a5f0: 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41  tionName(pFK->aA
a600: 63 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20  ction[1]);.     
a610: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a620: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
a630: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
a640: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
a650: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
a660: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32  OP_Integer, j, 2
a670: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
a680: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
a690: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
a6a0: 30 2c 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54  0, 3, 0, pFK->zT
a6b0: 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  o, 0);.         
a6c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a6d0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
a6e0: 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20  g8, 0, 4, 0,.   
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a700: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
a710: 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b  >aCol[pFK->aCol[
a720: 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c  j].iFrom].zName,
a730: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
a740: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a750: 70 34 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f  p4(v, zCol ? OP_
a760: 53 74 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c  String8 : OP_Nul
a770: 6c 2c 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c  l, 0, 5, 0, zCol
a780: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
a790: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a7a0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
a7b0: 38 2c 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55  8, 0, 6, 0, zOnU
a7c0: 70 64 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 20  pdate, 0);.     
a7d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a7e0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
a7f0: 74 72 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c  tring8, 0, 7, 0,
a800: 20 7a 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a   zOnDelete, 0);.
a810: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a820: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
a830: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
a840: 38 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29  8, 0, "NONE", 0)
a850: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
a860: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
a870: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
a880: 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20   1, 8);.        
a890: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b    }.          ++
a8a0: 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b  i;.          pFK
a8b0: 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f   = pFK->pNextFro
a8c0: 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  m;.        }.   
a8d0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
a8e0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
a8f0: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
a900: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
a910: 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  EY) */..#ifndef 
a920: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
a930: 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20  IGN_KEY.#ifndef 
a940: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
a950: 47 45 52 0a 20 20 63 61 73 65 20 50 72 61 67 54  GER.  case PragT
a960: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43  yp_FOREIGN_KEY_C
a970: 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79  HECK: {.    FKey
a980: 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20   *pFK;          
a990: 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20     /* A foreign 
a9a0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  key constraint *
a9b0: 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
a9c0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
a9d0: 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74  Child table cont
a9e0: 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22  ain "REFERENCES"
a9f0: 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20   keyword */.    
aa00: 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20  Table *pParent; 
aa10: 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
aa20: 20 74 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c   table that chil
aa30: 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20  d points to */. 
aa40: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20     Index *pIdx; 
aa50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
aa60: 65 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ex in the parent
aa70: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
aa80: 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
aa90: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
aaa0: 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b  nter:  Foreign k
aab0: 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54  ey number for pT
aac0: 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b  ab */.    int j;
aad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aae0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
aaf0: 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20  :  Field of the 
ab00: 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20  foreign key */. 
ab10: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20     HashElem *k; 
ab20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
ab30: 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74  p counter:  Next
ab40: 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61   table in schema
ab50: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20   */.    int x;  
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ab70: 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c  * result variabl
ab80: 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  e */.    int reg
ab90: 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20  Result;         
aba0: 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73 20 74  /* 3 registers t
abb0: 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20  o hold a result 
abc0: 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  row */.    int r
abd0: 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  egKey;          
abe0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
abf0: 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68   hold key for ch
ac00: 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f  ecking the FK */
ac10: 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b  .    int regRow;
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
ac30: 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64  egisters to hold
ac40: 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62   a row from pTab
ac50: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
ac60: 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Top;           /
ac70: 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20  * Top of a loop 
ac80: 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e  checking foreign
ac90: 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74   keys */.    int
aca0: 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20   addrOk;        
acb0: 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
acc0: 20 69 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f   if the key is O
acd0: 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69  K */.    int *ai
ace0: 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
acf0: 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65  /* child to pare
ad00: 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e  nt column mappin
ad10: 67 20 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73  g */..    regRes
ad20: 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d  ult = pParse->nM
ad30: 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65  em+1;.    pParse
ad40: 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20  ->nMem += 4;.   
ad50: 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72   regKey = ++pPar
ad60: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65  se->nMem;.    re
ad70: 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d  gRow = ++pParse-
ad80: 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73  >nMem;.    v = s
ad90: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
ada0: 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  arse);.    sqlit
adb0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
adc0: 28 76 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 4);.    sqli
add0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ade0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
adf0: 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53  NAME, "table", S
ae00: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
ae10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
ae20: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
ae30: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f  OLNAME_NAME, "ro
ae40: 77 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  wid", SQLITE_STA
ae50: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
ae60: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
ae70: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
ae80: 4d 45 2c 20 22 70 61 72 65 6e 74 22 2c 20 53 51  ME, "parent", SQ
ae90: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
aea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
aeb0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f  ColName(v, 3, CO
aec0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69  LNAME_NAME, "fki
aed0: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
aee0: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43  C);.    sqlite3C
aef0: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
af00: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
af10: 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68    k = sqliteHash
af20: 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69  First(&db->aDb[i
af30: 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c  Db].pSchema->tbl
af40: 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65  Hash);.    while
af50: 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ( k ){.      if(
af60: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
af70: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
af80: 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61  3LocateTable(pPa
af90: 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20  rse, 0, zRight, 
afa0: 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20  zDb);.        k 
afb0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
afc0: 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d  {.        pTab =
afd0: 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48   (Table*)sqliteH
afe0: 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20  ashData(k);.    
aff0: 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61      k = sqliteHa
b000: 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20  shNext(k);.     
b010: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54 61   }.      if( pTa
b020: 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46  b==0 || pTab->pF
b030: 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  Key==0 ) continu
b040: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
b050: 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65  TableLock(pParse
b060: 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75  , iDb, pTab->tnu
b070: 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  m, 0, pTab->zNam
b080: 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54  e);.      if( pT
b090: 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e  ab->nCol+regRow>
b0a0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70  pParse->nMem ) p
b0b0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54  Parse->nMem = pT
b0c0: 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f  ab->nCol + regRo
b0d0: 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  w;.      sqlite3
b0e0: 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65  OpenTable(pParse
b0f0: 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20  , 0, iDb, pTab, 
b100: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
b110: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b120: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
b130: 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c  ng8, 0, regResul
b140: 74 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  t, 0, pTab->zNam
b150: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
b160: 20 20 20 20 20 20 20 20 20 20 20 50 34 5f 54 52             P4_TR
b170: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
b180: 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61  for(i=1, pFK=pTa
b190: 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69  b->pFKey; pFK; i
b1a0: 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65  ++, pFK=pFK->pNe
b1b0: 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20  xtFrom){.       
b1c0: 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74   pParent = sqlit
b1d0: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
b1e0: 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a  pFK->zTo, zDb);.
b1f0: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
b200: 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ent==0 ) continu
b210: 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  e;.        pIdx 
b220: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  = 0;.        sql
b230: 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50  ite3TableLock(pP
b240: 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65  arse, iDb, pPare
b250: 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61  nt->tnum, 0, pPa
b260: 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  rent->zName);.  
b270: 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65        x = sqlite
b280: 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70  3FkLocateIndex(p
b290: 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20  Parse, pParent, 
b2a0: 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a  pFK, &pIdx, 0);.
b2b0: 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30          if( x==0
b2c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
b2d0: 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20  ( pIdx==0 ){.   
b2e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b2f0: 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65  OpenTable(pParse
b300: 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  , i, iDb, pParen
b310: 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b  t, OP_OpenRead);
b320: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
b330: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
b340: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
b350: 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20  v, OP_OpenRead, 
b360: 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69  i, pIdx->tnum, i
b370: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Db);.           
b380: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 50   sqlite3VdbeSetP
b390: 34 4b 65 79 49 6e 66 6f 28 70 50 61 72 73 65 2c  4KeyInfo(pParse,
b3a0: 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20   pIdx);.        
b3b0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
b3c0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d  e{.          k =
b3d0: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72   0;.          br
b3e0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
b3f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
b400: 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72  ert( pParse->nEr
b410: 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b  r>0 || pFK==0 );
b420: 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29  .      if( pFK )
b430: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66   break;.      if
b440: 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69  ( pParse->nTab<i
b450: 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20   ) pParse->nTab 
b460: 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54  = i;.      addrT
b470: 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  op = sqlite3Vdbe
b480: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77  AddOp1(v, OP_Rew
b490: 69 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76  ind, 0); VdbeCov
b4a0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
b4b0: 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61  for(i=1, pFK=pTa
b4c0: 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69  b->pFKey; pFK; i
b4d0: 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65  ++, pFK=pFK->pNe
b4e0: 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20  xtFrom){.       
b4f0: 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74   pParent = sqlit
b500: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
b510: 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a  pFK->zTo, zDb);.
b520: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
b530: 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73  ;.        aiCols
b540: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66   = 0;.        if
b550: 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20  ( pParent ){.   
b560: 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74         x = sqlit
b570: 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
b580: 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c  pParse, pParent,
b590: 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69   pFK, &pIdx, &ai
b5a0: 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20  Cols);.         
b5b0: 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b   assert( x==0 );
b5c0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
b5d0: 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69     addrOk = sqli
b5e0: 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
b5f0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  (v);.        if(
b600: 20 70 50 61 72 65 6e 74 20 26 26 20 70 49 64 78   pParent && pIdx
b610: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
b620: 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d   int iKey = pFK-
b630: 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a  >aCol[0].iFrom;.
b640: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
b650: 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65  ( iKey>=0 && iKe
b660: 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a  y<pTab->nCol );.
b670: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4b            if( iK
b680: 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20  ey!=pTab->iPKey 
b690: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
b6a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
b6b0: 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30  (v, OP_Column, 0
b6c0: 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b  , iKey, regRow);
b6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
b6e0: 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c  ite3ColumnDefaul
b6f0: 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c  t(v, pTab, iKey,
b700: 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20   regRow);.      
b710: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b720: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73  eAddOp2(v, OP_Is
b730: 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64  Null, regRow, ad
b740: 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72  drOk); VdbeCover
b750: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
b760: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b770: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74  ddOp2(v, OP_Must
b780: 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a  BeInt, regRow, .
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b7a0: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
b7b0: 74 41 64 64 72 28 76 29 2b 33 29 3b 20 56 64 62  tAddr(v)+3); Vdb
b7c0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
b7d0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
b7e0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b7f0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b800: 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67  OP_Rowid, 0, reg
b810: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
b820: 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  }.          sqli
b830: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
b840: 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69   OP_NotExists, i
b850: 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 20 56 64  , 0, regRow); Vd
b860: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
b870: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b880: 56 64 62 65 41 64 64 47 6f 74 6f 28 76 2c 20 61  VdbeAddGoto(v, a
b890: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
b8a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
b8b0: 70 48 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33  pHere(v, sqlite3
b8c0: 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28  VdbeCurrentAddr(
b8d0: 76 29 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d  v)-2);.        }
b8e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
b8f0: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e  for(j=0; j<pFK->
b900: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
b910: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
b920: 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
b930: 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c  OfTable(v, pTab,
b940: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b  aiCols ? aiCols[
b970: 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  j] : pFK->aCol[j
b980: 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b  ].iFrom, regRow+
b990: 6a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  j);.            
b9a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b9b0: 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  2(v, OP_IsNull, 
b9c0: 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b  regRow+j, addrOk
b9d0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
b9e0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  v);.          }.
b9f0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
ba00: 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  arent ){.       
ba10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ba20: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b  AddOp4(v, OP_Mak
ba30: 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c  eRecord, regRow,
ba40: 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b   pFK->nCol, regK
ba50: 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba70: 20 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66    sqlite3IndexAf
ba80: 66 69 6e 69 74 79 53 74 72 28 64 62 2c 70 49 64  finityStr(db,pId
ba90: 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a  x), pFK->nCol);.
baa0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
bab0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
bac0: 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c  (v, OP_Found, i,
bad0: 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c   addrOk, regKey,
bae0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
baf0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
bb00: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
bb10: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
bb20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bb30: 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30  2(v, OP_Rowid, 0
bb40: 2c 20 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a  , regResult+1);.
bb50: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bb60: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
bb70: 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52  String8, 0, regR
bb80: 65 73 75 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20  esult+2, 0, .   
bb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bba0: 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c         pFK->zTo,
bbb0: 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a   P4_TRANSIENT);.
bbc0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bbd0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
bbe0: 49 6e 74 65 67 65 72 2c 20 69 2d 31 2c 20 72 65  Integer, i-1, re
bbf0: 67 52 65 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20  gResult+3);.    
bc00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bc10: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
bc20: 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74  ltRow, regResult
bc30: 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 4);.        sq
bc40: 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65  lite3VdbeResolve
bc50: 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29  Label(v, addrOk)
bc60: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
bc70: 33 44 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f  3DbFree(db, aiCo
bc80: 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ls);.      }.   
bc90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bca0: 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c  dOp2(v, OP_Next,
bcb0: 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 20   0, addrTop+1); 
bcc0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
bcd0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bce0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
bcf0: 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20  drTop);.    }.  
bd00: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
bd10: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
bd20: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
bd30: 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  R) */.#endif /* 
bd40: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
bd50: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
bd60: 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44  ) */..#ifndef ND
bd70: 45 42 55 47 0a 20 20 63 61 73 65 20 50 72 61 67  EBUG.  case Prag
bd80: 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45  Typ_PARSER_TRACE
bd90: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
bda0: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
bdb0: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
bdc0: 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a  n(zRight, 0) ){.
bdd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
bde0: 61 72 73 65 72 54 72 61 63 65 28 73 74 64 65 72  arserTrace(stder
bdf0: 72 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a  r, "parser: ");.
be00: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
be10: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73       sqlite3Pars
be20: 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a 20  erTrace(0, 0);. 
be30: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
be40: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
be50: 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c  ..  /* Reinstall
be60: 20 74 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c   the LIKE and GL
be70: 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54  OB functions.  T
be80: 68 65 20 76 61 72 69 61 6e 74 20 6f 66 20 4c 49  he variant of LI
be90: 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20 77 69 6c  KE.  ** used wil
bea0: 6c 20 62 65 20 63 61 73 65 20 73 65 6e 73 69 74  l be case sensit
beb0: 69 76 65 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e  ive or not depen
bec0: 64 69 6e 67 20 6f 6e 20 74 68 65 20 52 48 53 2e  ding on the RHS.
bed0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
bee0: 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54  gTyp_CASE_SENSIT
bef0: 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20  IVE_LIKE: {.    
bf00: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
bf10: 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69 73      sqlite3Regis
bf20: 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
bf30: 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74 42  (db, sqlite3GetB
bf40: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
bf50: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
bf60: 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20  break;..#ifndef 
bf70: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
bf80: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
bf90: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
bfa0: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
bfb0: 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23  _ERROR_MAX 100.#
bfc0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
bfd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
bfe0: 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20  RITY_CHECK.  /* 
bff0: 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f 63 68  Pragma "quick_ch
c000: 65 63 6b 22 20 69 73 20 72 65 64 75 63 65 64 20  eck" is reduced 
c010: 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a  version of .  **
c020: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
c030: 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64 65 74   designed to det
c040: 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62 61 73  ect most databas
c050: 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a  e corruption.  *
c060: 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f  * without most o
c070: 66 20 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f  f the overhead o
c080: 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67 72 69  f a full integri
c090: 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20  ty-check..  */. 
c0a0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e   case PragTyp_IN
c0b0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b  TEGRITY_CHECK: {
c0c0: 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61  .    int i, j, a
c0d0: 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20  ddr, mxErr;..   
c0e0: 20 2f 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70   /* Code that ap
c0f0: 70 65 61 72 73 20 61 74 20 74 68 65 20 65 6e 64  pears at the end
c100: 20 6f 66 20 74 68 65 20 69 6e 74 65 67 72 69 74   of the integrit
c110: 79 20 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20  y check.  If no 
c120: 65 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73  error.    ** mes
c130: 73 61 67 65 73 20 68 61 76 65 20 62 65 65 6e 20  sages have been 
c140: 67 65 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75  generated, outpu
c150: 74 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65  t OK.  Otherwise
c160: 20 6f 75 74 70 75 74 20 74 68 65 0a 20 20 20 20   output the.    
c170: 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ** error message
c180: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74  .    */.    stat
c190: 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e  ic const int iLn
c1a0: 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c   = VDBE_OFFSET_L
c1b0: 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74  INENO(2);.    st
c1c0: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
c1d0: 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20  pList endCode[] 
c1e0: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  = {.      { OP_I
c1f0: 66 4e 65 67 2c 20 20 20 20 20 20 20 31 2c 20 30  fNeg,       1, 0
c200: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
c210: 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 0 */.      { 
c220: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20  OP_String8,     
c230: 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 3,        0},
c240: 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20      /* 1 */.    
c250: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
c260: 2c 20 20 20 33 2c 20 31 2c 20 20 20 20 20 20 20  ,   3, 1,       
c270: 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20   0},.    };..   
c280: 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d 20 28   int isQuick = (
c290: 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a  sqlite3Tolower(z
c2a0: 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a  Left[0])=='q');.
c2b0: 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50  .    /* If the P
c2c0: 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61  RAGMA command wa
c2d0: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 50  s of the form "P
c2e0: 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67  RAGMA <db>.integ
c2f0: 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20  rity_check",.   
c300: 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69 73 20   ** then iDb is 
c310: 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64 65 78  set to the index
c320: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
c330: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 3c   identified by <
c340: 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74  db>..    ** In t
c350: 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 69 6e  his case, the in
c360: 74 65 67 72 69 74 79 20 6f 66 20 64 61 74 61 62  tegrity of datab
c370: 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69 73 20  ase iDb only is 
c380: 76 65 72 69 66 69 65 64 20 62 79 0a 20 20 20 20  verified by.    
c390: 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72 65 61  ** the VDBE crea
c3a0: 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a  ted below..    *
c3b0: 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 77 69  *.    ** Otherwi
c3c0: 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d 61  se, if the comma
c3d0: 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20 22 50  nd was simply "P
c3e0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
c3f0: 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a  check" (or.    *
c400: 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63 6b 5f  * "PRAGMA quick_
c410: 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20 69 44  check"), then iD
c420: 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e 20 49  b is set to 0. I
c430: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74  n this case, set
c440: 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d   iDb.    ** to -
c450: 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64 69 63  1 here, to indic
c460: 61 74 65 20 74 68 61 74 20 74 68 65 20 56 44 42  ate that the VDB
c470: 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66 79 20  E should verify 
c480: 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a 20 20  the integrity.  
c490: 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61    ** of all atta
c4a0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 20  ched databases. 
c4b0: 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
c4c0: 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73  iDb>=0 );.    as
c4d0: 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20  sert( iDb==0 || 
c4e0: 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69  pId2->z );.    i
c4f0: 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20  f( pId2->z==0 ) 
c500: 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f  iDb = -1;..    /
c510: 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  * Initialize the
c520: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f   VDBE program */
c530: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
c540: 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71 6c 69 74  m = 6;.    sqlit
c550: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
c560: 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 1);.    sqli
c570: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c580: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
c590: 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72 69 74 79  NAME, "integrity
c5a0: 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f  _check", SQLITE_
c5b0: 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a  STATIC);..    /*
c5c0: 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   Set the maximum
c5d0: 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a   error count */.
c5e0: 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49      mxErr = SQLI
c5f0: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
c600: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20  CK_ERROR_MAX;.  
c610: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
c620: 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65 74        sqlite3Get
c630: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d  Int32(zRight, &m
c640: 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28  xErr);.      if(
c650: 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20   mxErr<=0 ){.   
c660: 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c       mxErr = SQL
c670: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
c680: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20  ECK_ERROR_MAX;. 
c690: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
c6a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c6b0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
c6c0: 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a  , mxErr, 1);  /*
c6d0: 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72   reg[1] holds er
c6e0: 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20  rors left */..  
c6f0: 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67    /* Do an integ
c700: 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61  rity check on ea
c710: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
c720: 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
c730: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
c740: 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d  {.      HashElem
c750: 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20   *x;.      Hash 
c760: 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e  *pTbls;.      in
c770: 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  t cnt = 0;..    
c780: 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44    if( OMIT_TEMPD
c790: 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74  B && i==1 ) cont
c7a0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20  inue;.      if( 
c7b0: 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62  iDb>=0 && i!=iDb
c7c0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20   ) continue;..  
c7d0: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
c7e0: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
c7f0: 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64  se, i);.      ad
c800: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
c810: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
c820: 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20  os, 1); /* Halt 
c830: 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73  if out of errors
c840: 20 2a 2f 0a 20 20 20 20 20 20 56 64 62 65 43 6f   */.      VdbeCo
c850: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
c860: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c870: 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30  p2(v, OP_Halt, 0
c880: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
c890: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
c8a0: 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20  v, addr);..     
c8b0: 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72   /* Do an integr
c8c0: 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65  ity check of the
c8d0: 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2a   B-Tree.      **
c8e0: 0a 20 20 20 20 20 20 2a 2a 20 42 65 67 69 6e 20  .      ** Begin 
c8f0: 62 79 20 66 69 6c 6c 69 6e 67 20 72 65 67 69 73  by filling regis
c900: 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77  ters 2, 3, ... w
c910: 69 74 68 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ith the root pag
c920: 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20 20 20  es numbers.     
c930: 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c   ** for all tabl
c940: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69  es and indices i
c950: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  n the database..
c960: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
c970: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
c980: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
c990: 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20 20 20  , i, 0) );.     
c9a0: 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44   pTbls = &db->aD
c9b0: 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62  b[i].pSchema->tb
c9c0: 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66 6f 72  lHash;.      for
c9d0: 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (x=sqliteHashFir
c9e0: 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d  st(pTbls); x; x=
c9f0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78  sqliteHashNext(x
ca00: 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c  )){.        Tabl
ca10: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
ca20: 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20  HashData(x);.   
ca30: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78       Index *pIdx
ca40: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 48 61  ;.        if( Ha
ca50: 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a  sRowid(pTab) ){.
ca60: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ca70: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
ca80: 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61 62 2d  P_Integer, pTab-
ca90: 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20  >tnum, 2+cnt);. 
caa0: 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d           VdbeCom
cab0: 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70  ment((v, "%s", p
cac0: 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20  Tab->zName));.  
cad0: 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20          cnt++;. 
cae0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
caf0: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
cb00: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
cb10: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b  dx=pIdx->pNext){
cb20: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
cb30: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
cb40: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78  OP_Integer, pIdx
cb50: 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a  ->tnum, 2+cnt);.
cb60: 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f            VdbeCo
cb70: 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20  mment((v, "%s", 
cb80: 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20  pIdx->zName));. 
cb90: 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a           cnt++;.
cba0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
cbb0: 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  }..      /* Make
cbc0: 20 73 75 72 65 20 73 75 66 66 69 63 69 65 6e 74   sure sufficient
cbd0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   number of regis
cbe0: 74 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 61  ters have been a
cbf0: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20  llocated */.    
cc00: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
cc10: 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d   MAX( pParse->nM
cc20: 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a 20 20  em, cnt+8 );..  
cc30: 20 20 20 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d      /* Do the b-
cc40: 74 72 65 65 20 69 6e 74 65 67 72 69 74 79 20 63  tree integrity c
cc50: 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73  hecks */.      s
cc60: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
cc70: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  (v, OP_Integrity
cc80: 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a  Ck, 2, cnt, 1);.
cc90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cca0: 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28 75 38  eChangeP5(v, (u8
ccb0: 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20  )i);.      addr 
ccc0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
ccd0: 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op1(v, OP_IsNull
cce0: 2c 20 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 2); VdbeCovera
ccf0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c  ge(v);.      sql
cd00: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
cd10: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
cd20: 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   3, 0,.         
cd30: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
cd40: 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62  b, "*** in datab
cd50: 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64  ase %s ***\n", d
cd60: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29  b->aDb[i].zName)
cd70: 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f 44 59  ,.         P4_DY
cd80: 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 73 71  NAMIC);.      sq
cd90: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
cda0: 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34  v, OP_Move, 2, 4
cdb0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
cdc0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
cdd0: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33   OP_Concat, 4, 3
cde0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 2);.      sqli
cdf0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ce00: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32   OP_ResultRow, 2
ce10: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
ce20: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
ce30: 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20  v, addr);..     
ce40: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
ce50: 6c 20 74 68 65 20 69 6e 64 69 63 65 73 20 61 72  l the indices ar
ce60: 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f  e constructed co
ce70: 72 72 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a  rrectly..      *
ce80: 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71  /.      for(x=sq
ce90: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54  liteHashFirst(pT
cea0: 62 6c 73 29 3b 20 78 20 26 26 20 21 69 73 51 75  bls); x && !isQu
ceb0: 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ick; x=sqliteHas
cec0: 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
ced0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
cee0: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
cef0: 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
cf00: 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20  x *pIdx, *pPk;. 
cf10: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50         Index *pP
cf20: 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  rior = 0;.      
cf30: 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20    int loopTop;. 
cf40: 20 20 20 20 20 20 20 69 6e 74 20 69 44 61 74 61         int iData
cf50: 43 75 72 2c 20 69 49 64 78 43 75 72 3b 0a 20 20  Cur, iIdxCur;.  
cf60: 20 20 20 20 20 20 69 6e 74 20 72 31 20 3d 20 2d        int r1 = -
cf70: 31 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20  1;..        if( 
cf80: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20  pTab->pIndex==0 
cf90: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
cfa0: 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52 6f 77      pPk = HasRow
cfb0: 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a 20 73  id(pTab) ? 0 : s
cfc0: 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
cfd0: 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20  Index(pTab);.   
cfe0: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
cff0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
d000: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20   OP_IfPos, 1);  
d010: 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74 20 6f  /* Stop if out o
d020: 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20  f errors */.    
d030: 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65      VdbeCoverage
d040: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  (v);.        sql
d050: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d060: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
d070: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d080: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
d090: 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20   addr);.        
d0a0: 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
d0b0: 43 6c 65 61 72 28 70 50 61 72 73 65 29 3b 0a 20  Clear(pParse);. 
d0c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70         sqlite3Op
d0d0: 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
d0e0: 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 2c 20  s(pParse, pTab, 
d0f0: 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 0a 20 20 20  OP_OpenRead,.   
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d120: 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75 72 2c  1, 0, &iDataCur,
d130: 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20 20 20   &iIdxCur);.    
d140: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d150: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
d160: 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20  ger, 0, 7);.    
d170: 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
d180: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
d190: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
d1a0: 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
d1b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d1c0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d1d0: 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29  Integer, 0, 8+j)
d1e0: 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69  ; /* index entri
d1f0: 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  es counter */.  
d200: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
d210: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d  pParse->nMem = M
d220: 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  AX(pParse->nMem,
d230: 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 73   8+j);.        s
d240: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d250: 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69  (v, OP_Rewind, i
d260: 44 61 74 61 43 75 72 2c 20 30 29 3b 20 56 64 62  DataCur, 0); Vdb
d270: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d280: 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20        loopTop = 
d290: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d2a0: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
d2b0: 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 2f  7, 1);.        /
d2c0: 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61 6c  * Verify that al
d2d0: 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d  l NOT NULL colum
d2e0: 6e 73 20 72 65 61 6c 6c 79 20 61 72 65 20 4e 4f  ns really are NO
d2f0: 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20  T NULL */.      
d300: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54 61    for(j=0; j<pTa
d310: 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  b->nCol; j++){. 
d320: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
d330: 45 72 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69  Err;.          i
d340: 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20  nt jmp2, jmp3;. 
d350: 20 20 20 20 20 20 20 20 20 69 66 28 20 6a 3d 3d           if( j==
d360: 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 20 63 6f  pTab->iPKey ) co
d370: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
d380: 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c    if( pTab->aCol
d390: 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20 29  [j].notNull==0 )
d3a0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
d3b0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72       sqlite3Expr
d3c0: 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
d3d0: 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 69 44  able(v, pTab, iD
d3e0: 61 74 61 43 75 72 2c 20 6a 2c 20 33 29 3b 0a 20  ataCur, j, 3);. 
d3f0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d400: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
d410: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
d420: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
d430: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  2 = sqlite3VdbeA
d440: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 6f 74 4e  ddOp1(v, OP_NotN
d450: 75 6c 6c 2c 20 33 29 3b 20 56 64 62 65 43 6f 76  ull, 3); VdbeCov
d460: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d470: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d480: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
d490: 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44  mm, 1, -1); /* D
d4a0: 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c  ecrement error l
d4b0: 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  imit */.        
d4c0: 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33    zErr = sqlite3
d4d0: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 4e 55 4c  MPrintf(db, "NUL
d4e0: 4c 20 76 61 6c 75 65 20 69 6e 20 25 73 2e 25 73  L value in %s.%s
d4f0: 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a  ", pTab->zName,.
d500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 54                pT
d520: 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d  ab->aCol[j].zNam
d530: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  e);.          sq
d540: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
d550: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
d560: 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34  , 3, 0, zErr, P4
d570: 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
d580: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d590: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
d5a0: 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20  ultRow, 3, 1);. 
d5b0: 20 20 20 20 20 20 20 20 20 6a 6d 70 33 20 3d 20           jmp3 = 
d5c0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d5d0: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
d5e0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
d5f0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
d600: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28  lite3VdbeAddOp0(
d610: 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20  v, OP_Halt);.   
d620: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d630: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
d640: 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  p2);.          s
d650: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
d660: 72 65 28 76 2c 20 6a 6d 70 33 29 3b 0a 20 20 20  re(v, jmp3);.   
d670: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
d680: 2a 20 56 61 6c 69 64 61 74 65 20 69 6e 64 65 78  * Validate index
d690: 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65   entries for the
d6a0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 2a 2f 0a   current row */.
d6b0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
d6c0: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
d6d0: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
d6e0: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
d6f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
d700: 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34  jmp2, jmp3, jmp4
d710: 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20 20 20 20  , jmp5;.        
d720: 20 20 69 6e 74 20 63 6b 55 6e 69 71 20 3d 20 73    int ckUniq = s
d730: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
d740: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
d750: 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20    if( pPk==pIdx 
d760: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
d770: 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c 69 74        r1 = sqlit
d780: 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b  e3GenerateIndexK
d790: 65 79 28 70 50 61 72 73 65 2c 20 70 49 64 78 2c  ey(pParse, pIdx,
d7a0: 20 69 44 61 74 61 43 75 72 2c 20 30 2c 20 30 2c   iDataCur, 0, 0,
d7b0: 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20 20 20 20   &jmp3,.        
d7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
d7e0: 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20 20 20 20  Prior, r1);.    
d7f0: 20 20 20 20 20 20 70 50 72 69 6f 72 20 3d 20 70        pPrior = p
d800: 49 64 78 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Idx;.          s
d810: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d820: 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38  (v, OP_AddImm, 8
d830: 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72  +j, 1);  /* incr
d840: 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e  ement entry coun
d850: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2f  t */.          /
d860: 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61 6e  * Verify that an
d870: 20 69 6e 64 65 78 20 65 6e 74 72 79 20 65 78 69   index entry exi
d880: 73 74 73 20 66 6f 72 20 74 68 65 20 63 75 72 72  sts for the curr
d890: 65 6e 74 20 74 61 62 6c 65 20 72 6f 77 20 2a 2f  ent table row */
d8a0: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20  .          jmp2 
d8b0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
d8c0: 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75  Op4Int(v, OP_Fou
d8d0: 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 63  nd, iIdxCur+j, c
d8e0: 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20 20 20 20  kUniq, r1,.     
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b   pIdx->nColumn);
d920: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d930: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d940: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d950: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
d960: 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
d970: 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
d980: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d990: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
d9a0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
d9b0: 20 30 2c 20 22 72 6f 77 20 22 2c 20 50 34 5f 53   0, "row ", P4_S
d9c0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
d9d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d9e0: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
d9f0: 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 7, 3, 3);.    
da00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
da10: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
da20: 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 20  ring8, 0, 4, 0, 
da30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da40: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 6d               " m
da50: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
da60: 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  x ", P4_STATIC);
da70: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
da80: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
da90: 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c  OP_Concat, 4, 3,
daa0: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a   3);.          j
dab0: 6d 70 35 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp5 = sqlite3Vdb
dac0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
dad0: 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a  ring8, 0, 4, 0,.
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db00: 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20     pIdx->zName, 
db10: 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  P4_TRANSIENT);. 
db20: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
db30: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
db40: 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33  _Concat, 4, 3, 3
db50: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
db60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
db70: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
db80: 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 1);.         
db90: 20 6a 6d 70 34 20 3d 20 73 71 6c 69 74 65 33 56   jmp4 = sqlite3V
dba0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
dbb0: 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43  IfPos, 1); VdbeC
dbc0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
dbd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
dbe0: 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61  eAddOp0(v, OP_Ha
dbf0: 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  lt);.          s
dc00: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
dc10: 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20  re(v, jmp2);.   
dc20: 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 55 4e         /* For UN
dc30: 49 51 55 45 20 69 6e 64 65 78 65 73 2c 20 76 65  IQUE indexes, ve
dc40: 72 69 66 79 20 74 68 61 74 20 6f 6e 6c 79 20 6f  rify that only o
dc50: 6e 65 20 65 6e 74 72 79 20 65 78 69 73 74 73 20  ne entry exists 
dc60: 77 69 74 68 20 74 68 65 0a 20 20 20 20 20 20 20  with the.       
dc70: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6b 65     ** current ke
dc80: 79 2e 20 20 54 68 65 20 65 6e 74 72 79 20 69 73  y.  The entry is
dc90: 20 75 6e 69 71 75 65 20 69 66 20 28 31 29 20 61   unique if (1) a
dca0: 6e 79 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c  ny column is NUL
dcb0: 4c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f  L.          ** o
dcc0: 72 20 28 32 29 20 74 68 65 20 6e 65 78 74 20 65  r (2) the next e
dcd0: 6e 74 72 79 20 68 61 73 20 61 20 64 69 66 66 65  ntry has a diffe
dce0: 72 65 6e 74 20 6b 65 79 20 2a 2f 0a 20 20 20 20  rent key */.    
dcf0: 20 20 20 20 20 20 69 66 28 20 49 73 55 6e 69 71        if( IsUniq
dd00: 75 65 49 6e 64 65 78 28 70 49 64 78 29 20 29 7b  ueIndex(pIdx) ){
dd10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
dd20: 20 75 6e 69 71 4f 6b 20 3d 20 73 71 6c 69 74 65   uniqOk = sqlite
dd30: 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76  3VdbeMakeLabel(v
dd40: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
dd50: 6e 74 20 6a 6d 70 36 3b 0a 20 20 20 20 20 20 20  nt jmp6;.       
dd60: 20 20 20 20 20 69 6e 74 20 6b 6b 3b 0a 20 20 20       int kk;.   
dd70: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 6b 3d           for(kk=
dd80: 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79  0; kk<pIdx->nKey
dd90: 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20  Col; kk++){.    
dda0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 43            int iC
ddb0: 6f 6c 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c  ol = pIdx->aiCol
ddc0: 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20 20 20 20  umn[kk];.       
ddd0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69         assert( i
dde0: 43 6f 6c 3e 3d 30 20 26 26 20 69 43 6f 6c 3c 70  Col>=0 && iCol<p
ddf0: 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20  Tab->nCol );.   
de00: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70             if( p
de10: 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e  Tab->aCol[iCol].
de20: 6e 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e 74 69 6e  notNull ) contin
de30: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue;.            
de40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
de50: 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op2(v, OP_IsNull
de60: 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29  , r1+kk, uniqOk)
de70: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
de80: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
de90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
dea0: 20 20 20 20 20 20 20 20 20 20 20 6a 6d 70 36 20             jmp6 
deb0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
dec0: 4f 70 31 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20  Op1(v, OP_Next, 
ded0: 69 49 64 78 43 75 72 2b 6a 29 3b 20 56 64 62 65  iIdxCur+j); Vdbe
dee0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
def0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
df00: 56 64 62 65 41 64 64 47 6f 74 6f 28 76 2c 20 75  VdbeAddGoto(v, u
df10: 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  niqOk);.        
df20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
df30: 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 36 29  umpHere(v, jmp6)
df40: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
df50: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49  lite3VdbeAddOp4I
df60: 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47 54 2c 20  nt(v, OP_IdxGT, 
df70: 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e 69 71 4f  iIdxCur+j, uniqO
df80: 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20  k, r1,.         
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfa0: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 4b          pIdx->nK
dfb0: 65 79 43 6f 6c 29 3b 20 56 64 62 65 43 6f 76 65  eyCol); VdbeCove
dfc0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
dfd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
dfe0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
dff0: 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20  Imm, 1, -1); /* 
e000: 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20  Decrement error 
e010: 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  limit */.       
e020: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e030: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
e040: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
e050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f               "no
e070: 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69  n-unique entry i
e080: 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53 54  n index ", P4_ST
e090: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20  ATIC);.         
e0a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e0b0: 64 47 6f 74 6f 28 76 2c 20 6a 6d 70 35 29 3b 0a  dGoto(v, jmp5);.
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e0d0: 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61  te3VdbeResolveLa
e0e0: 62 65 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a  bel(v, uniqOk);.
e0f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
e100: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e110: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
e120: 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  4);.          sq
e130: 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
e140: 49 64 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c  IdxLabel(pParse,
e150: 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20   jmp3);.        
e160: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
e170: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e180: 50 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72  P_Next, iDataCur
e190: 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65  , loopTop); Vdbe
e1a0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
e1b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e1c0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70  JumpHere(v, loop
e1d0: 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20  Top-1);.#ifndef 
e1e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
e1f0: 45 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73  ECOUNT.        s
e200: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
e210: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
e220: 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20 20 20  0, 2, 0, .      
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
e240: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
e250: 65 73 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50  es in index ", P
e260: 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
e270: 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78     for(j=0, pIdx
e280: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
e290: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
e2a0: 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20  pNext, j++){.   
e2b0: 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d         if( pPk==
e2c0: 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b  pIdx ) continue;
e2d0: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20  .          addr 
e2e0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
e2f0: 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20  rentAddr(v);.   
e300: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e310: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
e320: 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29  fPos, 1, addr+2)
e330: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
e340: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
e350: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
e360: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
e370: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e380: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e390: 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43   OP_Count, iIdxC
e3a0: 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20  ur+j, 3);.      
e3b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e3c0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20  ddOp3(v, OP_Eq, 
e3d0: 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b  8+j, addr+8, 3);
e3e0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
e3f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e400: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
e410: 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  v, SQLITE_NOTNUL
e420: 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  L);.          sq
e430: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
e440: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
e450: 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20   -1);.          
e460: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e470: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
e480: 20 30 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e   0, 3, 0, pIdx->
e490: 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49  zName, P4_TRANSI
e4a0: 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ENT);.          
e4b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e4c0: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
e4d0: 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20  3, 2, 7);.      
e4e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e4f0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
e500: 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20  ltRow, 7, 1);.  
e510: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f        }.#endif /
e520: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  * SQLITE_OMIT_BT
e530: 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20  REECOUNT */.    
e540: 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61    } .    }.    a
e550: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
e560: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
e570: 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29  raySize(endCode)
e580: 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b  , endCode, iLn);
e590: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
e5a0: 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72  ChangeP3(v, addr
e5b0: 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73  , -mxErr);.    s
e5c0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
e5d0: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20  re(v, addr);.   
e5e0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
e5f0: 67 65 50 34 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP4(v, addr+1, 
e600: 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49 43 29  "ok", P4_STATIC)
e610: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  ;.  }.  break;.#
e620: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
e630: 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
e640: 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  HECK */..#ifndef
e650: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
e660: 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  16.  /*.  **   P
e670: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20  RAGMA encoding. 
e680: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63   **   PRAGMA enc
e690: 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c  oding = "utf-8"|
e6a0: 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36  "utf-16"|"utf-16
e6b0: 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20  le"|"utf-16be". 
e6c0: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20   **.  ** In its 
e6d0: 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73  first form, this
e6e0: 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20   pragma returns 
e6f0: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  the encoding of 
e700: 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61  the main.  ** da
e710: 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 64  tabase. If the d
e720: 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69  atabase is not i
e730: 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69  nitialized, it i
e740: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f  s initialized no
e750: 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  w..  **.  ** The
e760: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20   second form of 
e770: 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 61  this pragma is a
e780: 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61   no-op if the ma
e790: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
e7a0: 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c  .  ** has not al
e7b0: 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
e7c0: 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20  alized. In this 
e7d0: 63 61 73 65 20 69 74 20 73 65 74 73 20 74 68 65  case it sets the
e7e0: 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e   default.  ** en
e7f0: 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c  coding that will
e800: 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
e810: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
e820: 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c  ile if a new fil
e830: 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65  e.  ** is create
e840: 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e  d. If an existin
e850: 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  g main database 
e860: 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20  file is opened, 
e870: 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65  then the.  ** de
e880: 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64  fault text encod
e890: 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69 73  ing for the exis
e8a0: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 69 73  ting database is
e8b0: 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a   used..  ** .  *
e8c0: 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e  * In all cases n
e8d0: 65 77 20 64 61 74 61 62 61 73 65 73 20 63 72 65  ew databases cre
e8e0: 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 41  ated using the A
e8f0: 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72  TTACH command ar
e900: 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74  e.  ** created t
e910: 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  o use the same d
e920: 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f  efault text enco
e930: 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e  ding as the main
e940: 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20   database. If.  
e950: 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
e960: 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65  base has not bee
e970: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e  n initialized an
e980: 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68 65  d/or created whe
e990: 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73  n ATTACH.  ** is
e9a0: 20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73 20   executed, this 
e9b0: 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74  is done before t
e9c0: 68 65 20 41 54 54 41 43 48 20 6f 70 65 72 61 74  he ATTACH operat
e9d0: 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ion..  **.  ** I
e9e0: 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  n the second for
e9f0: 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20 73 65  m this pragma se
ea00: 74 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f  ts the text enco
ea10: 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20  ding to be used 
ea20: 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61  in.  ** new data
ea30: 62 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74  base files creat
ea40: 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64 61  ed using this da
ea50: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49  tabase handle. I
ea60: 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75  t is only.  ** u
ea70: 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64  seful if invoked
ea80: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
ea90: 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  er the main data
eaa0: 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61  base i.  */.  ca
eab0: 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44  se PragTyp_ENCOD
eac0: 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  ING: {.    stati
ead0: 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45  c const struct E
eae0: 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63  ncName {.      c
eaf0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
eb00: 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20    u8 enc;.    } 
eb10: 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20  encnames[] = {. 
eb20: 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20       { "UTF8",  
eb30: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20     SQLITE_UTF8  
eb40: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
eb50: 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c   "UTF-8",    SQL
eb60: 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20  ITE_UTF8        
eb70: 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65  },  /* Must be e
eb80: 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20  lement [1] */.  
eb90: 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22      { "UTF-16le"
eba0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
ebb0: 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
ebc0: 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20   be element [2] 
ebd0: 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  */.      { "UTF-
ebe0: 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16be", SQLITE_UT
ebf0: 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a  F16BE     },  /*
ec00: 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74   Must be element
ec10: 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20   [3] */.      { 
ec20: 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49  "UTF16le",  SQLI
ec30: 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d  TE_UTF16LE     }
ec40: 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  ,.      { "UTF16
ec50: 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46  be",  SQLITE_UTF
ec60: 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20  16BE     },.    
ec70: 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20    { "UTF-16",   
ec80: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
ec90: 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f     }, /* SQLITE_
eca0: 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20  UTF16NATIVE */. 
ecb0: 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20       { "UTF16", 
ecc0: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
ecd0: 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
ece0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
ecf0: 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d  /.      { 0, 0 }
ed00: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73  .    };.    cons
ed10: 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65  t struct EncName
ed20: 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20   *pEnc;.    if( 
ed30: 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a  !zRight ){    /*
ed40: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
ed50: 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  g" */.      if( 
ed60: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
ed70: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
ed80: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
ed90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
eda0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
edb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
edc0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
edd0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
ede0: 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49  "encoding", SQLI
edf0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
ee00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ee10: 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op2(v, OP_String
ee20: 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20  8, 0, 1);.      
ee30: 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
ee40: 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e  [SQLITE_UTF8].en
ee50: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  c==SQLITE_UTF8 )
ee60: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
ee70: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
ee80: 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51  UTF16LE].enc==SQ
ee90: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
eea0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
eeb0: 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
eec0: 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49  F16BE].enc==SQLI
eed0: 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
eee0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
eef0: 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 65  hangeP4(v, -1, e
ef00: 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72  ncnames[ENC(pPar
ef10: 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20  se->db)].zName, 
ef20: 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
ef30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ef40: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
ef50: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
ef60: 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20  }else{          
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ef80: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
ef90: 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20  g = XXX" */.    
efa0: 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65    /* Only change
efb0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71   the value of sq
efc0: 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20  lite.enc if the 
efd0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
efe0: 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  is not.      ** 
eff0: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20  initialized. If 
f000: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
f010: 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65  e exists, the ne
f020: 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c  w sqlite.enc val
f030: 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  ue.      ** will
f040: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
f050: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
f060: 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20  is next loaded. 
f070: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20  If it does not. 
f080: 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20       ** already 
f090: 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20  exists, it will 
f0a0: 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  be created to us
f0b0: 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69  e the new encodi
f0c0: 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ng value..      
f0d0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20  */.      if( .  
f0e0: 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f        !(DbHasPro
f0f0: 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f  perty(db, 0, DB_
f100: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c  SchemaLoaded)) |
f110: 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73  | .        DbHas
f120: 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
f130: 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20  DB_Empty) .     
f140: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
f150: 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30  pEnc=&encnames[0
f160: 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20  ]; pEnc->zName; 
f170: 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20  pEnc++){.       
f180: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
f190: 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
f1a0: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b   pEnc->zName) ){
f1b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 43 48  .            SCH
f1c0: 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e  EMA_ENC(db) = EN
f1d0: 43 28 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20  C(db) =.        
f1e0: 20 20 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e          pEnc->en
f1f0: 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20  c ? pEnc->enc : 
f200: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
f210: 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  VE;.            
f220: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
f230: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
f240: 20 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e       if( !pEnc->
f250: 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  zName ){.       
f260: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
f270: 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75  sg(pParse, "unsu
f280: 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67  pported encoding
f290: 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a  : %s", zRight);.
f2a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
f2b0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
f2c0: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
f2d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
f2e0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
f2f0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
f300: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a  VERSION_PRAGMAS.
f310: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
f320: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63  MA [database.]sc
f330: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a  hema_version.  *
f340: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
f350: 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72  base.]schema_ver
f360: 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e  sion = <integer>
f370: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
f380: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75  GMA [database.]u
f390: 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ser_version.  **
f3a0: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
f3b0: 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f  ase.]user_versio
f3c0: 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20  n = <integer>.  
f3d0: 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
f3e0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 66 72 65 65   [database.]free
f3f0: 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e  list_count = <in
f400: 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
f410: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
f420: 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ase.]application
f430: 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  _id.  **   PRAGM
f440: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70  A [database.]app
f450: 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69  lication_id = <i
f460: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
f470: 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73  * The pragma's s
f480: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e  chema_version an
f490: 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61  d user_version a
f4a0: 72 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f  re used to set o
f4b0: 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76  r get.  ** the v
f4c0: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65  alue of the sche
f4d0: 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75  ma-version and u
f4e0: 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73  ser-version, res
f4f0: 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a  pectively. Both.
f500: 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d    ** the schema-
f510: 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  version and the 
f520: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65  user-version are
f530: 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69   32-bit signed i
f540: 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f  ntegers.  ** sto
f550: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
f560: 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a  ase header..  **
f570: 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61  .  ** The schema
f580: 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c  -cookie is usual
f590: 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61  ly only manipula
f5a0: 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  ted internally b
f5b0: 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a  y SQLite. It.  *
f5c0: 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  * is incremented
f5d0: 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65   by SQLite whene
f5e0: 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
f5f0: 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66   schema is modif
f600: 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65  ied (by.  ** cre
f610: 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e  ating or droppin
f620: 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  g a table or ind
f630: 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20  ex). The schema 
f640: 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20  version is used 
f650: 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65  by.  ** SQLite e
f660: 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79  ach time a query
f670: 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20   is executed to 
f680: 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
f690: 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20  internal cache. 
f6a0: 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d   ** of the schem
f6b0: 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70  a used when comp
f6c0: 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75  iling the SQL qu
f6d0: 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20  ery matches the 
f6e0: 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74  schema of.  ** t
f6f0: 68 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69  he database agai
f700: 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f  nst which the co
f710: 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20  mpiled query is 
f720: 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65  actually execute
f730: 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69  d..  ** Subverti
f740: 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73  ng this mechanis
f750: 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47  m by using "PRAG
f760: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
f770: 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a  n" to modify.  *
f780: 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  * the schema-ver
f790: 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61  sion is potentia
f7a0: 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e  lly dangerous an
f7b0: 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72  d may lead to pr
f7c0: 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68  ogram.  ** crash
f7d0: 65 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63  es or database c
f7e0: 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77  orruption. Use w
f7f0: 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a  ith caution!.  *
f800: 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d  *.  ** The user-
f810: 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75  version is not u
f820: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  sed internally b
f830: 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79  y SQLite. It may
f840: 20 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   be used by.  **
f850: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f   applications fo
f860: 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20  r any purpose.. 
f870: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
f880: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a  yp_HEADER_VALUE:
f890: 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b   {.    int iCook
f8a0: 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41  ie = pPragma->iA
f8b0: 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20 63 6f  rg;  /* Which co
f8c0: 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f 72 20  okie to read or 
f8d0: 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c  write */.    sql
f8e0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
f8f0: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
f900: 66 28 20 7a 52 69 67 68 74 20 26 26 20 28 70 50  f( zRight && (pP
f910: 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67  ragma->mPragFlag
f920: 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64   & PragFlag_Read
f930: 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Only)==0 ){.    
f940: 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73    /* Write the s
f950: 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20  pecified cookie 
f960: 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73  value */.      s
f970: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
f980: 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65  OpList setCookie
f990: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
f9a0: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
f9b0: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
f9c0: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
f9d0: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
f9e0: 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20          0,  1,  
f9f0: 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
fa00: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43         { OP_SetC
fa10: 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
fa20: 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20  0,  1},    /* 2 
fa30: 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  */.      };.    
fa40: 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c    int addr = sql
fa50: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
fa60: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
fa70: 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f  etCookie), setCo
fa80: 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  okie, 0);.      
fa90: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
faa0: 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62  eP1(v, addr, iDb
fab0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
fac0: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
fad0: 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65 33 41  addr+1, sqlite3A
fae0: 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
faf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
fb00: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
fb10: 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  2, iDb);.      s
fb20: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
fb30: 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 43  P2(v, addr+2, iC
fb40: 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73  ookie);.    }els
fb50: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64  e{.      /* Read
fb60: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
fb70: 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20  ookie value */. 
fb80: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
fb90: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61  t VdbeOpList rea
fba0: 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20  dCookie[] = {.  
fbb0: 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
fbc0: 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20  action,     0,  
fbd0: 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20  0,  0},    /* 0 
fbe0: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
fbf0: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20  ReadCookie,     
fc00: 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
fc10: 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 1 */.        
fc20: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
fc30: 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d        1,  1,  0}
fc40: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
fc50: 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74  int addr = sqlit
fc60: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
fc70: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61  v, ArraySize(rea
fc80: 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f  dCookie), readCo
fc90: 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  okie, 0);.      
fca0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
fcb0: 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62  eP1(v, addr, iDb
fcc0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
fcd0: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
fce0: 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20  addr+1, iDb);.  
fcf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
fd00: 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b  hangeP3(v, addr+
fd10: 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20  1, iCookie);.   
fd20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
fd30: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
fd40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fd50: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
fd60: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
fd70: 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
fd80: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a  ANSIENT);.    }.
fd90: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
fda0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
fdb0: 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
fdc0: 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  N_PRAGMAS */..#i
fdd0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
fde0: 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
fdf0: 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  DIAGS.  /*.  ** 
fe00: 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65    PRAGMA compile
fe10: 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20  _options.  **.  
fe20: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
fe30: 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69  mes of all compi
fe40: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options 
fe50: 75 73 65 64 20 69 6e 20 74 68 69 73 20 62 75 69  used in this bui
fe60: 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74  ld,.  ** one opt
fe70: 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a  ion per row..  *
fe80: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
fe90: 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53  _COMPILE_OPTIONS
fea0: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20  : {.    int i = 
feb0: 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  0;.    const cha
fec0: 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 73 71 6c  r *zOpt;.    sql
fed0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
fee0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 70 50  ls(v, 1);.    pP
fef0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a  arse->nMem = 1;.
ff00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
ff10: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
ff20: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
ff30: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20  ompile_option", 
ff40: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
ff50: 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f 70 74      while( (zOpt
ff60: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69   = sqlite3_compi
ff70: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b  leoption_get(i++
ff80: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ))!=0 ){.      s
ff90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
ffa0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
ffb0: 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74 2c 20 30  0, 1, 0, zOpt, 0
ffc0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ffd0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ffe0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
fff0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
10000 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
10010 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
10020 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20  ILEOPTION_DIAGS 
10030 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
10040 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a  TE_OMIT_WAL.  /*
10050 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
10060 64 61 74 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68  database.]wal_ch
10070 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73 69  eckpoint = passi
10080 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74 7c  ve|full|restart|
10090 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a 0a 20 20  truncate.  **.  
100a0 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68  ** Checkpoint th
100b0 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  e database..  */
100c0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
100d0 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20  WAL_CHECKPOINT: 
100e0 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d 20  {.    int iBt = 
100f0 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c  (pId2->z?iDb:SQL
10100 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
10110 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65  );.    int eMode
10120 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
10130 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20 20  OINT_PASSIVE;.  
10140 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
10150 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
10160 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
10170 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20   "full")==0 ){. 
10180 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53         eMode = S
10190 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
101a0 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c  _FULL;.      }el
101b0 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
101c0 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 72  rICmp(zRight, "r
101d0 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20  estart")==0 ){. 
101e0 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53         eMode = S
101f0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
10200 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20 20  _RESTART;.      
10210 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
10220 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
10230 20 22 74 72 75 6e 63 61 74 65 22 29 3d 3d 30 20   "truncate")==0 
10240 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  ){.        eMode
10250 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
10260 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20  OINT_TRUNCATE;. 
10270 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
10280 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
10290 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20  umCols(v, 3);.  
102a0 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
102b0 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   3;.    sqlite3V
102c0 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
102d0 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
102e0 2c 20 22 62 75 73 79 22 2c 20 53 51 4c 49 54 45  , "busy", SQLITE
102f0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
10300 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
10310 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
10320 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53  E_NAME, "log", S
10330 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
10340 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
10350 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
10360 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68  OLNAME_NAME, "ch
10370 65 63 6b 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c  eckpointed", SQL
10380 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20  ITE_STATIC);..  
10390 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
103a0 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70  Op3(v, OP_Checkp
103b0 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65  oint, iBt, eMode
103c0 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
103d0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
103e0 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
103f0 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  3);.  }.  break;
10400 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
10410 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65  AGMA wal_autoche
10420 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50  ckpoint.  **   P
10430 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68  RAGMA wal_autoch
10440 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a  eckpoint = N.  *
10450 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65  *.  ** Configure
10460 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e   a database conn
10470 65 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61  ection to automa
10480 74 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69  tically checkpoi
10490 6e 74 20 61 20 64 61 74 61 62 61 73 65 0a 20 20  nt a database.  
104a0 2a 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75 6c  ** after accumul
104b0 61 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20 69  ating N frames i
104c0 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75  n the log. Or qu
104d0 65 72 79 20 66 6f 72 20 74 68 65 20 63 75 72 72  ery for the curr
104e0 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f  ent value.  ** o
104f0 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  f N..  */.  case
10500 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54   PragTyp_WAL_AUT
10510 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20  OCHECKPOINT: {. 
10520 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
10530 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77  .      sqlite3_w
10540 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
10550 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f  t(db, sqlite3Ato
10560 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
10570 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
10580 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 77  leInt(pParse, "w
10590 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
105a0 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e  t", .       db->
105b0 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71  xWalCallback==sq
105c0 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
105d0 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20  ook ? .         
105e0 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f    SQLITE_PTR_TO_
105f0 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29  INT(db->pWalArg)
10600 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65   : 0);.  }.  bre
10610 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  ak;.#endif..  /*
10620 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68  .  **  PRAGMA sh
10630 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a  rink_memory.  **
10640 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  .  ** IMPLEMENTA
10650 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35  TION-OF: R-23445
10660 2d 34 36 31 30 39 20 54 68 69 73 20 70 72 61 67  -46109 This prag
10670 6d 61 20 63 61 75 73 65 73 20 74 68 65 20 64 61  ma causes the da
10680 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e  tabase.  ** conn
10690 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20  ection on which 
106a0 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f  it is invoked to
106b0 20 66 72 65 65 20 75 70 20 61 73 20 6d 75 63 68   free up as much
106c0 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20 20   memory as it.  
106d0 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69  ** can, by calli
106e0 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ng sqlite3_db_re
106f0 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a  lease_memory()..
10700 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
10710 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52  Typ_SHRINK_MEMOR
10720 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  Y: {.    sqlite3
10730 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
10740 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61  ry(db);.    brea
10750 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
10760 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f  *   PRAGMA busy_
10770 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50  timeout.  **   P
10780 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f  RAGMA busy_timeo
10790 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ut = N.  **.  **
107a0 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75   Call sqlite3_bu
107b0 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e  sy_timeout(db, N
107c0 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63  ).  Return the c
107d0 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76  urrent timeout v
107e0 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65  alue.  ** if one
107f0 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20   is set.  If no 
10800 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20  busy handler or 
10810 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79  a different busy
10820 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a   handler is set.
10830 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72    ** then 0 is r
10840 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e  eturned.  Settin
10850 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f  g the busy_timeo
10860 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74  ut to 0 or negat
10870 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  ive.  ** disable
10880 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20  s the timeout.. 
10890 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61   */.  /*case Pra
108a0 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
108b0 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20  T*/ default: {. 
108c0 20 20 20 61 73 73 65 72 74 28 20 70 50 72 61 67     assert( pPrag
108d0 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50 72  ma->ePragTyp==Pr
108e0 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
108f0 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  UT );.    if( zR
10900 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
10910 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
10920 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  ut(db, sqlite3At
10930 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
10940 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
10950 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
10960 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62  timeout",  db->b
10970 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20  usyTimeout);.   
10980 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
10990 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
109a0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a  soft_heap_limit.
109b0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
109c0 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20  ft_heap_limit = 
109d0 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c  N.  **.  ** IMPL
109e0 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
109f0 2d 32 36 33 34 33 2d 34 35 39 33 30 20 54 68 69  -26343-45930 Thi
10a00 73 20 70 72 61 67 6d 61 20 69 6e 76 6f 6b 65 73  s pragma invokes
10a10 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65   the.  ** sqlite
10a20 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
10a30 74 36 34 28 29 20 69 6e 74 65 72 66 61 63 65 20  t64() interface 
10a40 77 69 74 68 20 74 68 65 20 61 72 67 75 6d 65 6e  with the argumen
10a50 74 20 4e 2c 20 69 66 20 4e 20 69 73 0a 20 20 2a  t N, if N is.  *
10a60 2a 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20  * specified and 
10a70 69 73 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  is a non-negativ
10a80 65 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2a 20  e integer..  ** 
10a90 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
10aa0 46 3a 20 52 2d 36 34 34 35 31 2d 30 37 31 36 33  F: R-64451-07163
10ab0 20 54 68 65 20 73 6f 66 74 5f 68 65 61 70 5f 6c   The soft_heap_l
10ac0 69 6d 69 74 20 70 72 61 67 6d 61 20 61 6c 77 61  imit pragma alwa
10ad0 79 73 0a 20 20 2a 2a 20 72 65 74 75 72 6e 73 20  ys.  ** returns 
10ae0 74 68 65 20 73 61 6d 65 20 69 6e 74 65 67 65 72  the same integer
10af0 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72   that would be r
10b00 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a 20  eturned by the. 
10b10 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74   ** sqlite3_soft
10b20 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31  _heap_limit64(-1
10b30 29 20 43 2d 6c 61 6e 67 75 61 67 65 20 66 75 6e  ) C-language fun
10b40 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61  ction..  */.  ca
10b50 73 65 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f  se PragTyp_SOFT_
10b60 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20  HEAP_LIMIT: {.  
10b70 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
10b80 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  N;.    if( zRigh
10b90 74 20 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f  t && sqlite3DecO
10ba0 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74  rHexToI64(zRight
10bb0 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  , &N)==SQLITE_OK
10bc0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
10bd0 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
10be0 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20  t64(N);.    }.  
10bf0 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
10c00 74 28 70 50 61 72 73 65 2c 20 22 73 6f 66 74 5f  t(pParse, "soft_
10c10 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71  heap_limit",  sq
10c20 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
10c30 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20  limit64(-1));.  
10c40 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
10c50 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
10c60 20 74 68 72 65 61 64 73 0a 20 20 2a 2a 20 20 20   threads.  **   
10c70 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 20 3d  PRAGMA threads =
10c80 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
10c90 66 69 67 75 72 65 20 74 68 65 20 6d 61 78 69 6d  figure the maxim
10ca0 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72  um number of wor
10cb0 6b 65 72 20 74 68 72 65 61 64 73 2e 20 20 52 65  ker threads.  Re
10cc0 74 75 72 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a  turn the new.  *
10cd0 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68 69 63 68  * maximum, which
10ce0 20 6d 69 67 68 74 20 62 65 20 6c 65 73 73 20 74   might be less t
10cf0 68 61 6e 20 72 65 71 75 65 73 74 65 64 2e 0a 20  han requested.. 
10d00 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
10d10 79 70 5f 54 48 52 45 41 44 53 3a 20 7b 0a 20 20  yp_THREADS: {.  
10d20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
10d30 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  N;.    if( zRigh
10d40 74 0a 20 20 20 20 20 26 26 20 73 71 6c 69 74 65  t.     && sqlite
10d50 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
10d60 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49  Right, &N)==SQLI
10d70 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e  TE_OK.     && N>
10d80 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
10d90 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62  sqlite3_limit(db
10da0 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57  , SQLITE_LIMIT_W
10db0 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 28  ORKER_THREADS, (
10dc0 69 6e 74 29 28 4e 26 30 78 37 66 66 66 66 66 66  int)(N&0x7ffffff
10dd0 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  f));.    }.    r
10de0 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
10df0 50 61 72 73 65 2c 20 22 74 68 72 65 61 64 73 22  Parse, "threads"
10e00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
10e10 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
10e20 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c  mit(db, SQLITE_L
10e30 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
10e40 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62  ADS, -1));.    b
10e50 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64  reak;.  }..#if d
10e60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
10e70 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
10e80 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f  SQLITE_TEST).  /
10e90 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68  *.  ** Report th
10ea0 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20  e current state 
10eb0 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72  of file logs for
10ec0 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20   all databases. 
10ed0 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
10ee0 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20  yp_LOCK_STATUS: 
10ef0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10f00 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61  st char *const a
10f10 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zLockName[] = {.
10f20 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22        "unlocked"
10f30 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72 65 73  , "shared", "res
10f40 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67  erved", "pending
10f50 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20  ", "exclusive". 
10f60 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b     };.    int i;
10f70 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10f80 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29  SetNumCols(v, 2)
10f90 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
10fa0 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69  em = 2;.    sqli
10fb0 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
10fc0 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
10fd0 4e 41 4d 45 2c 20 22 64 61 74 61 62 61 73 65 22  NAME, "database"
10fe0 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
10ff0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
11000 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
11010 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
11020 22 73 74 61 74 75 73 22 2c 20 53 51 4c 49 54 45  "status", SQLITE
11030 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f  _STATIC);.    fo
11040 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
11050 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74  ; i++){.      Bt
11060 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20  ree *pBt;.      
11070 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
11080 74 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a  te = "unknown";.
11090 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20        int j;.   
110a0 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
110b0 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e  ].zName==0 ) con
110c0 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
110d0 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
110e0 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
110f0 20 31 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69   1, 0, db->aDb[i
11100 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54  ].zName, P4_STAT
11110 49 43 29 3b 0a 20 20 20 20 20 20 70 42 74 20 3d  IC);.      pBt =
11120 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b   db->aDb[i].pBt;
11130 0a 20 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d  .      if( pBt==
11140 30 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  0 || sqlite3Btre
11150 65 50 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29  ePager(pBt)==0 )
11160 7b 0a 20 20 20 20 20 20 20 20 7a 53 74 61 74 65  {.        zState
11170 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20   = "closed";.   
11180 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
11190 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
111a0 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44  l(db, i ? db->aD
111b0 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20  b[i].zName : 0, 
111c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111e0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e        SQLITE_FCN
111f0 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a  TL_LOCKSTATE, &j
11200 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )==SQLITE_OK ){.
11210 20 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20           zState 
11220 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b  = azLockName[j];
11230 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
11240 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
11250 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
11260 30 2c 20 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c  0, 2, 0, zState,
11270 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
11280 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
11290 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
112a0 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20  tRow, 1, 2);.   
112b0 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
112c0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
112d0 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
112e0 43 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  C.  case PragTyp
112f0 5f 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  _KEY: {.    if( 
11300 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33  zRight ) sqlite3
11310 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  _key_v2(db, zDb,
11320 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33   zRight, sqlite3
11330 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
11340 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
11350 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  }.  case PragTyp
11360 5f 52 45 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66  _REKEY: {.    if
11370 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74  ( zRight ) sqlit
11380 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20  e3_rekey_v2(db, 
11390 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c  zDb, zRight, sql
113a0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69  ite3Strlen30(zRi
113b0 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b  ght));.    break
113c0 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61  ;.  }.  case Pra
113d0 67 54 79 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20  gTyp_HEXKEY: {. 
113e0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
113f0 0a 20 20 20 20 20 20 75 38 20 69 42 79 74 65 3b  .      u8 iByte;
11400 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
11410 20 20 20 20 63 68 61 72 20 7a 4b 65 79 5b 34 30      char zKey[40
11420 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ];.      for(i=0
11430 2c 20 69 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a  , iByte=0; i<siz
11440 65 6f 66 28 7a 4b 65 79 29 2a 32 20 26 26 20 73  eof(zKey)*2 && s
11450 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 7a  qlite3Isxdigit(z
11460 52 69 67 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b  Right[i]); i++){
11470 0a 20 20 20 20 20 20 20 20 69 42 79 74 65 20 3d  .        iByte =
11480 20 28 69 42 79 74 65 3c 3c 34 29 20 2b 20 73 71   (iByte<<4) + sq
11490 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 52  lite3HexToInt(zR
114a0 69 67 68 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20  ight[i]);.      
114b0 20 20 69 66 28 20 28 69 26 31 29 21 3d 30 20 29    if( (i&1)!=0 )
114c0 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79   zKey[i/2] = iBy
114d0 74 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  te;.      }.    
114e0 20 20 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20    if( (zLeft[3] 
114f0 26 20 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20  & 0xf)==0xb ){. 
11500 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6b         sqlite3_k
11510 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
11520 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20  Key, i/2);.     
11530 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
11540 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32  sqlite3_rekey_v2
11550 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20  (db, zDb, zKey, 
11560 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  i/2);.      }.  
11570 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
11580 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   }.#endif.#if de
11590 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
115a0 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e  _CODEC) || defin
115b0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
115c0 5f 43 45 52 4f 44 29 0a 20 20 63 61 73 65 20 50  _CEROD).  case P
115d0 72 61 67 54 79 70 5f 41 43 54 49 56 41 54 45 5f  ragTyp_ACTIVATE_
115e0 45 58 54 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20  EXTENSIONS: if( 
115f0 7a 52 69 67 68 74 20 29 7b 0a 23 69 66 64 65 66  zRight ){.#ifdef
11600 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
11610 43 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  C.    if( sqlite
11620 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
11630 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20  , "see-", 4)==0 
11640 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
11650 5f 61 63 74 69 76 61 74 65 5f 73 65 65 28 26 7a  _activate_see(&z
11660 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d  Right[4]);.    }
11670 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
11680 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52  QLITE_ENABLE_CER
11690 4f 44 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  OD.    if( sqlit
116a0 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68  e3StrNICmp(zRigh
116b0 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d  t, "cerod-", 6)=
116c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
116d0 74 65 33 5f 61 63 74 69 76 61 74 65 5f 63 65 72  te3_activate_cer
116e0 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a  od(&zRight[6]);.
116f0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
11700 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
11710 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20  ..  } /* End of 
11720 74 68 65 20 50 52 41 47 4d 41 20 73 77 69 74 63  the PRAGMA switc
11730 68 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74  h */..pragma_out
11740 3a 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  :.  sqlite3DbFre
11750 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20  e(db, zLeft);.  
11760 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
11770 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65  , zRight);.}..#e
11780 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
11790 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a        MIT_PRAGMA */.