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

Artifact db44f204be8289e43d6a7f728bbfe3cdf0c9c906:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20  or ON or NORMAL 
04c0: 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20  and 2 for FULL. 
04d0: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e   Return 1 for an
04e0: 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e   empty or .** un
04f0: 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e  recognized strin
0500: 67 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65  g argument.  The
0510: 20 46 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20   FULL option is 
0520: 64 69 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66  disallowed.** if
0530: 20 74 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61   the omitFull pa
0540: 72 61 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a  rameter it 1..**
0550: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
0560: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
0570: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
0580: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
0590: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
05a0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
05b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
05c0: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
05d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
05e0: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
05f0: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
0600: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
0610: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
0620: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
0630: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
0640: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
0650: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
0660: 2f 0a 73 74 61 74 69 63 20 75 38 20 67 65 74 53  /.static u8 getS
0670: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
0680: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d   char *z, int om
0690: 69 74 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29  itFull, u8 dflt)
06a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
06c0: 2a 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34  * 123456789 1234
06d0: 35 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69  56789 */.  stati
06e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65  c const char zTe
06f0: 78 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73  xt[] = "onoffals
0700: 65 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20  eyestruefull";. 
0710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0720: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0730: 20 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c   1, 2, 4, 9, 12,
0740: 20 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63   16};.  static c
0750: 6f 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b  onst u8 iLength[
0760: 5d 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c  ] = {2, 2, 3, 5,
0770: 20 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61   3, 4, 4};.  sta
0780: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61  tic const u8 iVa
0790: 6c 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20  lue[] =  {1, 0, 
07a0: 30 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a  0, 0, 1, 1, 2};.
07b0: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66    int i, n;.  if
07c0: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
07d0: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
07e0: 72 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74  rn (u8)sqlite3At
07f0: 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  oi(z);.  }.  n =
0800: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
0810: 28 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  (z);.  for(i=0; 
0820: 69 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e  i<ArraySize(iLen
0830: 67 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69  gth)-omitFull; i
0840: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65  ++){.    if( iLe
0850: 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71  ngth[i]==n && sq
0860: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a  lite3StrNICmp(&z
0870: 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d  Text[iOffset[i]]
0880: 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ,z,n)==0 ){.    
0890: 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b    return iValue[
08a0: 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  i];.    }.  }.  
08b0: 72 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a  return dflt;.}..
08c0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
08d0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
08e0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
08f0: 6c 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74  lue..*/.u8 sqlit
0900: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
0910: 73 74 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64  st char *z, u8 d
0920: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
0930: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
0940: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
0950: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
0960: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
0970: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
0980: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
0990: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
09a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
09b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
09c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
09d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
09e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
09f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
0a00: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
0a10: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
0a20: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0a30: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
0a40: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0a50: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0a60: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
0a70: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
0a80: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
0a90: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
0aa0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
0ab0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0ac0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
0ad0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
0ae0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
0af0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
0b00: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
0b10: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
0b20: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
0b30: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0b40: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
0b50: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
0b60: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
0b70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
0b80: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0b90: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
0ba0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
0bb0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
0bc0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
0bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
0be0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
0bf0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
0c00: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
0c10: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
0c20: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
0c30: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
0c40: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
0c50: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
0c60: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
0c70: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
0c80: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
0c90: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0ca0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
0cb0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
0cc0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
0cd0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
0ce0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0cf0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
0d00: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
0d10: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
0d20: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
0d30: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
0d40: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d50: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
0d60: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
0d70: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
0d80: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
0d90: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
0da0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
0db0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
0dc0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
0dd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
0de0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
0df0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
0e00: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
0e10: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
0e20: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
0e30: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
0e40: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
0e50: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
0e60: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
0e70: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
0e80: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
0e90: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
0ea0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
0eb0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
0ec0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
0ed0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
0ee0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
0ef0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
0f00: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
0f10: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
0f20: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
0f30: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
0f40: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
0f50: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
0f60: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
0f70: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
0f80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
0f90: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
0fa0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
0fb0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
0fc0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
0fd0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
0fe0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
0ff0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
1000: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
1010: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
1020: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
1030: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
1040: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
1050: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1060: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
1070: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
1080: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
1090: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
10a0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
10b0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
10c0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
10d0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
10e0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
10f0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
1100: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
1110: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
1120: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
1130: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
1140: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
1150: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
1160: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
1170: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
1180: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
1190: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
11a0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
11b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
11c0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
11d0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
11e0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
11f0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1200: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1210: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
1220: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1230: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
1240: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
1250: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
1260: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1270: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
1280: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
1290: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
12a0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
12b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
12c0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
12d0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
12e0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
12f0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
1300: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
1310: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
1320: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
1330: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
1340: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
1350: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
1360: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
1370: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
1380: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
1390: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
13a0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
13b0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
13c0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
13d0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
13e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
13f0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
1400: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
1410: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
1420: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
1430: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1440: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
1450: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
1460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1470: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
1480: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
1490: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72   */../*.** Gener
14a0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
14b0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
14c0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
14d0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
14e0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
14f0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
1500: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
1510: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
1520: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
1530: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
1540: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
1550: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
1560: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
1570: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
1580: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
1590: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
15a0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
15b0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
15c0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
15d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
15e0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
15f0: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
1600: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
1610: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
1620: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
1630: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
1640: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
1650: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
1660: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
1670: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
1680: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
1690: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
16a0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
16b0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
16c0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
16d0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
16e0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
16f0: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
1700: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
1710: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
1720: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1730: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
1740: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
1750: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
1760: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
1770: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
1780: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
1790: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
17a0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
17b0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
17c0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
17d0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
17e0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
17f0: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
1800: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
1810: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1820: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
1830: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
1840: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
1850: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
1860: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
1870: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
1880: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
1890: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
18a0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
18b0: 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28   );.    while( (
18c0: 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20  n--) > 0 ){.    
18d0: 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29    if( pDb->pBt )
18e0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
18f0: 33 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c  3BtreeSetPagerFl
1900: 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20  ags(pDb->pBt,.  
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1920: 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65  pDb->safety_leve
1930: 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52  l & PAGER_SYNCHR
1940: 4f 4e 4f 55 53 5f 4d 41 53 4b 29 0a 20 20 20 20  ONOUS_MASK).    
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c                 |
1960: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50 41   (db->flags & PA
1970: 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20  GER_FLAGS_MASK) 
1980: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1990: 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   pDb++;.    }.  
19a0: 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  }.}.#else.# defi
19b0: 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c  ne setAllPagerFl
19c0: 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70  ags(X)  /* no-op
19d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a   */.#endif.../*.
19e0: 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d 61  ** Return a huma
19f0: 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65 20  n-readable name 
1a00: 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  for a constraint
1a10: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74 69   resolution acti
1a20: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1a30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
1a40: 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63 6f  GN_KEY.static co
1a50: 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f 6e  nst char *action
1a60: 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29 7b  Name(u8 action){
1a70: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1a80: 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28 20  Name;.  switch( 
1a90: 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63 61  action ){.    ca
1aa0: 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20 20  se OE_SetNull:  
1ab0: 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55 4c  zName = "SET NUL
1ac0: 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  L";        break
1ad0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65  ;.    case OE_Se
1ae0: 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d 20  tDflt:  zName = 
1af0: 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20 20  "SET DEFAULT";  
1b00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1b10: 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20 20  se OE_Cascade:  
1b20: 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44 45  zName = "CASCADE
1b30: 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ";         break
1b40: 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52 65  ;.    case OE_Re
1b50: 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d 20  strict: zName = 
1b60: 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20 20  "RESTRICT";     
1b70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
1b80: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20  fault:          
1b90: 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54 49  zName = "NO ACTI
1ba0: 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20 20  ON";  .         
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
1bc0: 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45 5f  ert( action==OE_
1bd0: 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a 20  None ); break;. 
1be0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d   }.  return zNam
1bf0: 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  e;.}.#endif.../*
1c00: 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65 4d  .** Parameter eM
1c10: 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65 20  ode must be one 
1c20: 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55  of the PAGER_JOU
1c30: 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f 6e  RNALMODE_XXX con
1c40: 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e 65  stants.** define
1c50: 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54 68  d in pager.h. Th
1c60: 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  is function retu
1c70: 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61 74  rns the associat
1c80: 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a 20  ed lowercase.** 
1c90: 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61 6d  journal-mode nam
1ca0: 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  e..*/.const char
1cb0: 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
1cc0: 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d 6f  Modename(int eMo
1cd0: 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63 68  de){.  static ch
1ce0: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f 64  ar * const azMod
1cf0: 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eName[] = {.    
1d00: 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73 69  "delete", "persi
1d10: 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72 75  st", "off", "tru
1d20: 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79 22  ncate", "memory"
1d30: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d40: 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c 20  OMIT_WAL.     , 
1d50: 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20 7d  "wal".#endif.  }
1d60: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
1d70: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
1d80: 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73  LETE==0 );.  ass
1d90: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
1da0: 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d 3d  ALMODE_PERSIST==
1db0: 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50  1 );.  assert( P
1dc0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
1dd0: 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73 73  _OFF==2 );.  ass
1de0: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
1df0: 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 3d  ALMODE_TRUNCATE=
1e00: 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =3 );.  assert( 
1e10: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
1e20: 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a 20  E_MEMORY==4 );. 
1e30: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
1e40: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d 3d  OURNALMODE_WAL==
1e50: 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 65  5 );.  assert( e
1e60: 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64 65  Mode>=0 && eMode
1e70: 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f  <=ArraySize(azMo
1e80: 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69 66  deName) );..  if
1e90: 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53 69  ( eMode==ArraySi
1ea0: 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29  ze(azModeName) )
1eb0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74   return 0;.  ret
1ec0: 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 65  urn azModeName[e
1ed0: 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Mode];.}../*.** 
1ee0: 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d 61  Process a pragma
1ef0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a 2a   statement.  .**
1f00: 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65 20  .** Pragmas are 
1f10: 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a 2a  of this form:.**
1f20: 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41 20  .**      PRAGMA 
1f30: 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b 3d  [database.]id [=
1f40: 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54 68   value].**.** Th
1f50: 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69 67  e identifier mig
1f60: 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74 72  ht also be a str
1f70: 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ing.  The value 
1f80: 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e 64  is a string, and
1f90: 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c 20  .** identifier, 
1fa0: 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  or a number.  If
1fb0: 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74 72   minusFlag is tr
1fc0: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ue, then the val
1fd0: 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65  ue is.** a numbe
1fe0: 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63 65  r that was prece
1ff0: 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20 73  ded by a minus s
2000: 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ign..**.** If th
2010: 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 22  e left side is "
2020: 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68 65  database.id" the
2030: 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64 61  n pId1 is the da
2040: 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20 61  tabase name.** a
2050: 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20 69  nd pId2 is the i
2060: 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74 20  d.  If the left 
2070: 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69 64  side is just "id
2080: 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74  " then pId1 is t
2090: 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49 64  he.** id and pId
20a0: 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20 73  2 is any empty s
20b0: 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73  tring..*/.void s
20c0: 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20 20  qlite3Pragma(.  
20d0: 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 0a  Parse *pParse, .
20e0: 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20 20    Token *pId1,  
20f0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 70        /* First p
2100: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
2110: 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20  .]id field */.  
2120: 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20  Token *pId2,    
2130: 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61      /* Second pa
2140: 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e  rt of [database.
2150: 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55  ]id field, or NU
2160: 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  LL */.  Token *p
2170: 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54  Value,      /* T
2180: 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e  oken for <value>
2190: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  , or NULL */.  i
21a0: 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20  nt minusFlag    
21b0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20     /* True if a 
21c0: 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64 65  '-' sign precede
21d0: 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a  d <value> */.){.
21e0: 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20    char *zLeft = 
21f0: 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d  0;       /* Nul-
2200: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
2210: 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a   string <id> */.
2220: 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d    char *zRight =
2230: 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d   0;      /* Nul-
2240: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
2250: 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c   string <value>,
2260: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f   or NULL */.  co
2270: 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  nst char *zDb = 
2280: 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61  0;   /* The data
2290: 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  base name */.  T
22a0: 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20  oken *pId;      
22b0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
22c0: 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a   to <id> token *
22d0: 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c  /.  char *aFcntl
22e0: 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72  [4];       /* Ar
22f0: 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45  gument to SQLITE
2300: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
2310: 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
2320: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
2330: 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20  abase index for 
2340: 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20  <database> */.  
2350: 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69  int lwr, upr, mi
2360: 64 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20  d = 0;       /* 
2370: 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f  Binary search bo
2380: 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63  unds */.  int rc
2390: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23a0: 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e         /* return
23b0: 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49   value form SQLI
23c0: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
23d0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
23e0: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20   = pParse->db;  
23f0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
2400: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
2410: 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20    Db *pDb;      
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2430: 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20 64  * The specific d
2440: 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70 72  atabase being pr
2450: 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65  agmaed */.  Vdbe
2460: 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74   *v = sqlite3Get
2470: 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f  Vdbe(pParse);  /
2480: 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74 65  * Prepared state
2490: 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ment */.  const 
24a0: 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e 61  struct sPragmaNa
24b0: 6d 65 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20  mes *pPragma;.. 
24c0: 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74 75   if( v==0 ) retu
24d0: 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rn;.  sqlite3Vdb
24e0: 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b  eRunOnlyOnce(v);
24f0: 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20  .  pParse->nMem 
2500: 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72  = 2;..  /* Inter
2510: 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62 61  pret the [databa
2520: 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68 65  se.] part of the
2530: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
2540: 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20 20  t. iDb is the.  
2550: 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  ** index of the 
2560: 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70 72  database this pr
2570: 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61 70  agma is being ap
2580: 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e 61  plied to in db.a
2590: 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d  Db[]. */.  iDb =
25a0: 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
25b0: 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64 31  ame(pParse, pId1
25c0: 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a 20  , pId2, &pId);. 
25d0: 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65 74   if( iDb<0 ) ret
25e0: 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  urn;.  pDb = &db
25f0: 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f  ->aDb[iDb];..  /
2600: 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64 61  * If the temp da
2610: 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e 20  tabase has been 
2620: 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65 64  explicitly named
2630: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
2640: 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d 61  .  ** pragma, ma
2650: 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f 70  ke sure it is op
2660: 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  en. .  */.  if( 
2670: 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74 65  iDb==1 && sqlite
2680: 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
2690: 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20  e(pParse) ){.   
26a0: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20   return;.  }..  
26b0: 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33 4e  zLeft = sqlite3N
26c0: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
26d0: 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c   pId);.  if( !zL
26e0: 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  eft ) return;.  
26f0: 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b  if( minusFlag ){
2700: 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71  .    zRight = sq
2710: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
2720: 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29 3b   "-%T", pValue);
2730: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52  .  }else{.    zR
2740: 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e 61  ight = sqlite3Na
2750: 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20  meFromToken(db, 
2760: 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20 20  pValue);.  }..  
2770: 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a  assert( pId2 );.
2780: 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e    zDb = pId2->n>
2790: 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20 3a  0 ? pDb->zName :
27a0: 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
27b0: 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72 73  3AuthCheck(pPars
27c0: 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41  e, SQLITE_PRAGMA
27d0: 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c  , zLeft, zRight,
27e0: 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74   zDb) ){.    got
27f0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
2800: 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20  }..  /* Send an 
2810: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2820: 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c  GMA file-control
2830: 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69   to the underlyi
2840: 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e  ng VFS.  ** conn
2850: 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72  ection.  If it r
2860: 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b  eturns SQLITE_OK
2870: 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68  , then assume th
2880: 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20  at the VFS.  ** 
2890: 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67  handled the prag
28a0: 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20  ma and generate 
28b0: 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64  a no-op prepared
28c0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a   statement..  **
28d0: 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  .  ** IMPLEMENTA
28e0: 54 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38  TION-OF: R-12238
28f0: 2d 35 35 31 32 30 20 57 68 65 6e 65 76 65 72 20  -55120 Whenever 
2900: 61 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65  a PRAGMA stateme
2910: 6e 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20  nt is parsed,.  
2920: 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e  ** an SQLITE_FCN
2930: 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63  TL_PRAGMA file c
2940: 6f 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74  ontrol is sent t
2950: 6f 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74  o the open sqlit
2960: 65 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a  e3_file.  ** obj
2970: 65 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ect correspondin
2980: 67 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  g to the databas
2990: 65 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20  e file to which 
29a0: 74 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20  the pragma.  ** 
29b0: 73 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73  statement refers
29c0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c  ..  **.  ** IMPL
29d0: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
29e0: 2d 32 39 38 37 35 2d 33 31 36 37 38 20 54 68 65  -29875-31678 The
29f0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2a00: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2a10: 41 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63  AGMA.  ** file c
2a20: 6f 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72  ontrol is an arr
2a30: 61 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  ay of pointers t
2a40: 6f 20 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a  o strings (char*
2a50: 2a 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a  *) in which the.
2a60: 20 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d    ** second elem
2a70: 65 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61 79  ent of the array
2a80: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2a90: 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74  the pragma and t
2aa0: 68 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c  he third.  ** el
2ab0: 65 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72 67  ement is the arg
2ac0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61  ument to the pra
2ad0: 67 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74  gma or NULL if t
2ae0: 68 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f  he pragma has no
2af0: 0a 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a  .  ** argument..
2b00: 20 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d    */.  aFcntl[0]
2b10: 20 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31   = 0;.  aFcntl[1
2b20: 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63  ] = zLeft;.  aFc
2b30: 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b  ntl[2] = zRight;
2b40: 0a 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30  .  aFcntl[3] = 0
2b50: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
2b60: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
2b70: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
2b80: 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a  le_control(db, z
2b90: 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  Db, SQLITE_FCNTL
2ba0: 5f 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29  _PRAGMA, (void*)
2bb0: 61 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72  aFcntl);.  if( r
2bc0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2bd0: 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30      if( aFcntl[0
2be0: 5d 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d  ] ){.      int m
2bf0: 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  em = ++pParse->n
2c00: 4d 65 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Mem;.      sqlit
2c10: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
2c20: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d  OP_String8, 0, m
2c30: 65 6d 2c 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d  em, 0, aFcntl[0]
2c40: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
2c50: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
2c60: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
2c70: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
2c80: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
2c90: 4d 45 5f 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74  ME_NAME, "result
2ca0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
2cb0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2cc0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
2cd0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c  _ResultRow, mem,
2ce0: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
2cf0: 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30  e3_free(aFcntl[0
2d00: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  ]);.    }.    go
2d10: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2d20: 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
2d30: 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a  ITE_NOTFOUND ){.
2d40: 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30      if( aFcntl[0
2d50: 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ] ){.      sqlit
2d60: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
2d70: 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b  e, "%s", aFcntl[
2d80: 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0]);.      sqlit
2d90: 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30  e3_free(aFcntl[0
2da0: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50  ]);.    }.    pP
2db0: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
2dc0: 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72    pParse->rc = r
2dd0: 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67  c;.    goto prag
2de0: 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  ma_out;.  }..  /
2df0: 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61  * Locate the pra
2e00: 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75  gma in the looku
2e10: 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72  p table */.  lwr
2e20: 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72   = 0;.  upr = Ar
2e30: 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e  raySize(aPragmaN
2e40: 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65  ames)-1;.  while
2e50: 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20  ( lwr<=upr ){.  
2e60: 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72    mid = (lwr+upr
2e70: 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  )/2;.    rc = sq
2e80: 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c  lite3_stricmp(zL
2e90: 65 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65  eft, aPragmaName
2ea0: 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  s[mid].zName);. 
2eb0: 20 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62     if( rc==0 ) b
2ec0: 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63  reak;.    if( rc
2ed0: 3c 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20  <0 ){.      upr 
2ee0: 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d  = mid - 1;.    }
2ef0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20  else{.      lwr 
2f00: 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d  = mid + 1;.    }
2f10: 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75  .  }.  if( lwr>u
2f20: 70 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  pr ) goto pragma
2f30: 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61 20  _out;.  pPragma 
2f40: 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  = &aPragmaNames[
2f50: 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  mid];..  /* Make
2f60: 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
2f70: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61  se schema is loa
2f80: 64 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d  ded if the pragm
2f90: 61 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  a requires that 
2fa0: 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d  */.  if( (pPragm
2fb0: 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  a->mPragFlag & P
2fc0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
2fd0: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
2fe0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
2ff0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
3000: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
3010: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
3020: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
3030: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
3040: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72  */.  switch( pPr
3050: 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29  agma->ePragTyp )
3060: 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  {.  .#if !define
3070: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
3080: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
3090: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
30a0: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
30b0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
30c0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65  MA [database.]de
30d0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
30e0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
30f0: 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74  atabase.]default
3100: 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20  _cache_size=N.  
3110: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
3120: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
3130: 68 65 20 63 75 72 72 65 6e 74 20 70 65 72 73 69  he current persi
3140: 73 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  stent setting fo
3150: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
3160: 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65  cache size.  The
3170: 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
3180: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  is the maximum n
3190: 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61  umber of.  ** pa
31a0: 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20  ges in the page 
31b0: 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f  cache.  The seco
31c0: 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74  nd form sets bot
31d0: 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20  h the current.  
31e0: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
31f0: 7a 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  ze value and the
3200: 20 70 65 72 73 69 73 74 65 6e 74 20 70 61 67 65   persistent page
3210: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
3220: 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  e.  ** stored in
3230: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3240: 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c  le..  **.  ** Ol
3250: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
3260: 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74  SQLite would set
3270: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
3280: 68 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a  he size to a.  *
3290: 2a 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  * negative numbe
32a0: 72 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79  r to indicate sy
32b0: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20  nchronous=OFF.  
32c0: 54 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63  These days, sync
32d0: 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20  hronous.  ** is 
32e0: 61 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66  always on by def
32f0: 61 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20  ault regardless 
3300: 6f 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74  of the sign of t
3310: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
3320: 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74  .  ** size.  But
3330: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b   continue to tak
3340: 65 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  e the absolute v
3350: 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 61  alue of the defa
3360: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
3370: 69 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61  ize of historica
3380: 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e  l compatibility.
3390: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
33a0: 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41 43  gTyp_DEFAULT_CAC
33b0: 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  HE_SIZE: {.    s
33c0: 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
33d0: 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45  iLn = VDBE_OFFSE
33e0: 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20  T_LINENO(2);.   
33f0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
3400: 62 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68  beOpList getCach
3410: 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eSize[] = {.    
3420: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
3430: 6f 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20  on, 0, 0,       
3440: 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20   0},            
3450: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3460: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
3470: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20  ReadCookie,  0, 
3480: 31 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f  1,        BTREE_
3490: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
34a0: 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  ZE},  /* 1 */.  
34b0: 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20      { OP_IfPos, 
34c0: 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20        1, 8,     
34d0: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
34e0: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
34f0: 2c 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 2,        0},.
3500: 20 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72        { OP_Subtr
3510: 61 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20  act,    1, 2,   
3520: 20 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b       1},.      {
3530: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
3540: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
3550: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
3560: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20  eger,     0, 1, 
3570: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20         0},      
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20     /* 6 */.     
35a0: 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20   { OP_Noop,     
35b0: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
35c0: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52  0},.      { OP_R
35d0: 65 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31  esultRow,   1, 1
35e0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
35f0: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64 72   };.    int addr
3600: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3610: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
3620: 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  b);.    if( !zRi
3630: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
3640: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
3650: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
3660: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
3670: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
3680: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65  AME_NAME, "cache
3690: 5f 73 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53  _size", SQLITE_S
36a0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 50  TATIC);.      pP
36b0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b  arse->nMem += 2;
36c0: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
36d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
36e0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
36f0: 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67  getCacheSize), g
3700: 65 74 43 61 63 68 65 53 69 7a 65 2c 69 4c 6e 29  etCacheSize,iLn)
3710: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3720: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
3730: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
3740: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
3750: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
3760: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
3770: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
3780: 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49 54  v, addr+6, SQLIT
3790: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
37a0: 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65  SIZE);.    }else
37b0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
37c0: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
37d0: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
37e0: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
37f0: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
3800: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
3810: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
3820: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
3830: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
3840: 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20  , size, 1);.    
3850: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
3860: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
3870: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
3880: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
3890: 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73  ZE, 1);.      as
38a0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
38b0: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
38c0: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
38d0: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
38e0: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
38f0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
3900: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
3910: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
3920: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
3930: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  size);.    }.   
3940: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
3950: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
3960: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3970: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
3980: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
3990: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
39a0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
39b0: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
39c0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
39d0: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
39e0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
39f0: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
3a00: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
3a10: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
3a20: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
3a30: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
3a40: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
3a50: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
3a60: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3a70: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
3a80: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
3a90: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
3aa0: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
3ab0: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
3ac0: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
3ad0: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
3ae0: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
3af0: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
3b00: 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  ZE: {.    Btree 
3b10: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
3b20: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
3b30: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
3b40: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
3b50: 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59  int size = ALWAY
3b60: 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33  S(pBt) ? sqlite3
3b70: 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65  BtreeGetPageSize
3b80: 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20  (pBt) : 0;.     
3b90: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
3ba0: 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f 73  (pParse, "page_s
3bb0: 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20  ize", size);.   
3bc0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
3bd0: 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c   Malloc may fail
3be0: 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68   when setting th
3bf0: 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20  e page-size, as 
3c00: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
3c10: 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75  rnal.      ** bu
3c20: 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61  ffer that the pa
3c30: 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a  ger module resiz
3c40: 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  es using sqlite3
3c50: 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20  _realloc()..    
3c60: 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e    */.      db->n
3c70: 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71  extPagesize = sq
3c80: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
3c90: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c  );.      if( SQL
3ca0: 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74  ITE_NOMEM==sqlit
3cb0: 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69  e3BtreeSetPageSi
3cc0: 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74  ze(pBt, db->next
3cd0: 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29  Pagesize,-1,0) )
3ce0: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61  {.        db->ma
3cf0: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
3d00: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
3d10: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
3d20: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
3d30: 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72  [database.]secur
3d40: 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50  e_delete.  **  P
3d50: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
3d60: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f  ]secure_delete=O
3d70: 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20  N/OFF.  **.  ** 
3d80: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
3d90: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
3da0: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
3db0: 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64  he.  ** secure_d
3dc0: 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65  elete flag.  The
3dd0: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61   second form cha
3de0: 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65 5f  nges the secure_
3df0: 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67  delete.  ** flag
3e00: 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70   setting and rep
3e10: 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75  orts thenew valu
3e20: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
3e30: 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45  ragTyp_SECURE_DE
3e40: 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  LETE: {.    Btre
3e50: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
3e60: 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d  t;.    int b = -
3e70: 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
3e80: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
3e90: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
3ea0: 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42   b = sqlite3GetB
3eb0: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
3ec0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
3ed0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62   pId2->n==0 && b
3ee0: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  >=0 ){.      int
3ef0: 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   ii;.      for(i
3f00: 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
3f10: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
3f20: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75  sqlite3BtreeSecu
3f30: 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62  reDelete(db->aDb
3f40: 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20  [ii].pBt, b);.  
3f50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3f60: 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  b = sqlite3Btree
3f70: 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74  SecureDelete(pBt
3f80: 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , b);.    return
3f90: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
3fa0: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
3fb0: 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  ", b);.    break
3fc0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
3fd0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
3fe0: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
3ff0: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
4000: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
4010: 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a  age_count=N.  **
4020: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
4030: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
4040: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
4050: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   for the.  ** ma
4060: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
4070: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
4080: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
4090: 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f   .  ** second fo
40a0: 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63  rm attempts to c
40b0: 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69  hange this setti
40c0: 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66  ng.  Both.  ** f
40d0: 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20  orms return the 
40e0: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e  current setting.
40f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61  .  **.  ** The a
4100: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
4110: 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69   N is used.  Thi
4120: 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
4130: 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a  d and might.  **
4140: 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e   change.  The on
4150: 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f  ly purpose is to
4160: 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79   provide an easy
4170: 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a   way to test.  *
4180: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73  * the sqlite3Abs
4190: 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e  Int32() function
41a0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  **.  **  PRA
41b0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70  GMA [database.]p
41c0: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  age_count.  **. 
41d0: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
41e0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
41f0: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
4200: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
4210: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
4220: 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20  GE_COUNT: {.    
4230: 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71  int iReg;.    sq
4240: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
4250: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
4260: 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b  b);.    iReg = +
4270: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
4280: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f     if( sqlite3To
4290: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
42a0: 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71  ='p' ){.      sq
42b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
42c0: 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c  v, OP_Pagecount,
42d0: 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20   iDb, iReg);.   
42e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
42f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
4300: 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20  v, OP_MaxPgcnt, 
4310: 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20  iDb, iReg, .    
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4330: 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e      sqlite3AbsIn
4340: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
4350: 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d  zRight)));.    }
4360: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4370: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
4380: 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29  ultRow, iReg, 1)
4390: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
43a0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
43b0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
43c0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
43d0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
43e0: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
43f0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62  RANSIENT);.    b
4400: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
4410: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
4420: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f  tabase.]locking_
4430: 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  mode.  **  PRAGM
4440: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
4450: 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72  king_mode = (nor
4460: 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a 20  mal|exclusive). 
4470: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
4480: 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a  yp_LOCKING_MODE:
4490: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
44a0: 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61  r *zRet = "norma
44b0: 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  l";.    int eMod
44c0: 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f  e = getLockingMo
44d0: 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20  de(zRight);..   
44e0: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
44f0: 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  && eMode==PAGER_
4500: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52  LOCKINGMODE_QUER
4510: 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69  Y ){.      /* Si
4520: 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f 63  mple "PRAGMA loc
4530: 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74  king_mode;" stat
4540: 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 61  ement. This is a
4550: 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20 20   query for.     
4560: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
4570: 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20  default locking 
4580: 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79 20  mode (which may 
4590: 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f 0a  be different to.
45a0: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63        ** the loc
45b0: 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65  king-mode of the
45c0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29 2e   main database).
45d0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
45e0: 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74  eMode = db->dflt
45f0: 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65  LockMode;.    }e
4600: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
4610: 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20   *pPager;.      
4620: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29  if( pId2->n==0 )
4630: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69  {.        /* Thi
4640: 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  s indicates that
4650: 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d   no database nam
4660: 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20  e was specified 
4670: 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20 20  as part.        
4680: 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  ** of the PRAGMA
4690: 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69   command. In thi
46a0: 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b 69  s case the locki
46b0: 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a  ng-mode must be.
46c0: 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20 6f          ** set o
46d0: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
46e0: 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65 6c  atabases, as wel
46f0: 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 62  l as the main db
4700: 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a   file..        *
4710: 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73  *.        ** Als
4720: 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  o, the sqlite3.d
4730: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69  fltLockMode vari
4740: 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20 74  able is set so t
4750: 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  hat.        ** a
4760: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  ny subsequently 
4770: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
4780: 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65 20  es also use the 
4790: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
47a0: 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64    ** locking mod
47b0: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
47c0: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
47d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44 62        assert(pDb
47e0: 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a  ==&db->aDb[0]);.
47f0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 32          for(ii=2
4800: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
4810: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
4820: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
4830: 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
4840: 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20  b[ii].pBt);.    
4850: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
4860: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
4870: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
4880: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4890: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
48a0: 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20   = (u8)eMode;.  
48b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61 67      }.      pPag
48c0: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
48d0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
48e0: 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  ;.      eMode = 
48f0: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
4900: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
4910: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  eMode);.    }.. 
4920: 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65     assert( eMode
4930: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
4940: 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20  ODE_NORMAL.     
4950: 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d         || eMode=
4960: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
4970: 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b 0a  DE_EXCLUSIVE );.
4980: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
4990: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
49a0: 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20 20  _EXCLUSIVE ){.  
49b0: 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63 6c      zRet = "excl
49c0: 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20  usive";.    }.  
49d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
49e0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
49f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4a00: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
4a10: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f  OLNAME_NAME, "lo
4a20: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c  cking_mode", SQL
4a30: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
4a40: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
4a50: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
4a60: 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c  , 0, 1, 0, zRet,
4a70: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
4a80: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
4a90: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
4aa0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
4ab0: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
4ac0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
4ad0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
4ae0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
4af0: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ase.]journal_mod
4b00: 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  e =.  **        
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
4b20: 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66  elete|persist|of
4b30: 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72  f|truncate|memor
4b40: 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a  y|wal|off).  */.
4b50: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
4b60: 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20  OURNAL_MODE: {. 
4b70: 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20     int eMode;   
4b80: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
4b90: 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  he PAGER_JOURNAL
4ba0: 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73  MODE_XXX symbols
4bb0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20   */.    int ii; 
4bc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
4bd0: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20  p counter */..  
4be0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4bf0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
4c00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4c10: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
4c20: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f  OLNAME_NAME, "jo
4c30: 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c  urnal_mode", SQL
4c40: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20  ITE_STATIC);..  
4c50: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
4c60: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
4c70: 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44  here is no "=MOD
4c80: 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  E" part of the p
4c90: 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72  ragma, do a quer
4ca0: 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20  y for the.      
4cb0: 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20  ** current mode 
4cc0: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
4cd0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
4ce0: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65  DE_QUERY;.    }e
4cf0: 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  lse{.      const
4d00: 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20   char *zMode;.  
4d10: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69      int n = sqli
4d20: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
4d30: 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65  ht);.      for(e
4d40: 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d  Mode=0; (zMode =
4d50: 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d   sqlite3JournalM
4d60: 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21  odename(eMode))!
4d70: 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20  =0; eMode++){.  
4d80: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4d90: 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
4da0: 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29  , zMode, n)==0 )
4db0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
4dc0: 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65        if( !zMode
4dd0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
4de0: 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61  f the "=MODE" pa
4df0: 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rt does not matc
4e00: 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72  h any known jour
4e10: 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20  nal mode,.      
4e20: 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71    ** then do a q
4e30: 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20  uery */.        
4e40: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
4e50: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
4e60: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
4e70: 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41     if( eMode==PA
4e80: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4e90: 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e  QUERY && pId2->n
4ea0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
4eb0: 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20  Convert "PRAGMA 
4ec0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e  journal_mode" in
4ed0: 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e  to "PRAGMA main.
4ee0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f  journal_mode" */
4ef0: 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a  .      iDb = 0;.
4f00: 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20        pId2->n = 
4f10: 31 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20  1;.    }.#ifdef 
4f20: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
4f30: 41 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 0a 20  AL_SAFETYLEVEL. 
4f40: 20 20 20 69 66 28 20 21 20 53 51 4c 49 54 45 5f     if( ! SQLITE_
4f50: 44 62 53 61 66 65 74 79 4c 65 76 65 6c 49 73 46  DbSafetyLevelIsF
4f60: 69 78 65 64 28 70 44 62 2d 3e 73 61 66 65 74 79  ixed(pDb->safety
4f70: 5f 6c 65 76 65 6c 29 20 29 7b 0a 20 20 20 20 20  _level) ){.     
4f80: 20 69 66 28 20 65 4d 6f 64 65 20 3d 3d 20 50 41   if( eMode == PA
4f90: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4fa0: 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
4fb0: 2a 20 77 68 65 6e 20 65 6e 74 65 72 69 6e 67 20  * when entering 
4fc0: 77 61 6c 20 6d 6f 64 65 2c 20 69 6d 6d 65 64 69  wal mode, immedi
4fd0: 61 74 65 6c 79 20 73 77 69 74 63 68 20 74 68 65  ately switch the
4fe0: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a 20 20   safety_level.  
4ff0: 20 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74        ** so that
5000: 20 61 20 71 75 65 72 79 20 74 6f 20 70 72 61 67   a query to prag
5010: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 72  ma synchronous r
5020: 65 74 75 72 6e 73 20 74 68 65 20 63 6f 72 72 65  eturns the corre
5030: 63 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ct value */.    
5040: 20 20 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e    .        pDb->
5050: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 53  safety_level = S
5060: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
5070: 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 3b 0a 20  L_SAFETYLEVEL;. 
5080: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5090: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 75 73      /* If the us
50a0: 65 72 20 68 61 73 6e 27 74 20 6f 76 65 72 72 69  er hasn't overri
50b0: 64 64 65 6e 20 74 68 65 20 73 79 6e 63 68 72 6f  dden the synchro
50c0: 6e 6f 75 73 20 73 65 74 74 69 6e 67 2c 20 75 73  nous setting, us
50d0: 65 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 2a  e the .        *
50e0: 2a 20 64 65 66 61 75 6c 74 20 66 6f 72 20 6e 6f  * default for no
50f0: 6e 2d 77 61 6c 20 64 61 74 61 62 61 73 65 73 20  n-wal databases 
5100: 2a 2f 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e  */.        pDb->
5110: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33  safety_level = 3
5120: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5130: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
5140: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 41 46  _DEFAULT_WAL_SAF
5150: 45 54 59 4c 45 56 45 4c 20 2a 2f 0a 20 20 20 20  ETYLEVEL */.    
5160: 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31  for(ii=db->nDb-1
5170: 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a  ; ii>=0; ii--){.
5180: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
5190: 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69  b[ii].pBt && (ii
51a0: 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e  ==iDb || pId2->n
51b0: 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ==0) ){.        
51c0: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
51d0: 74 72 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20  tree(v, ii);.   
51e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
51f0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75  AddOp3(v, OP_Jou
5200: 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c  rnalMode, ii, 1,
5210: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d   eMode);.      }
5220: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
5230: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5240: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
5250: 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a   1);.    break;.
5260: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
5270: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
5280: 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c  .]journal_size_l
5290: 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d  imit.  **  PRAGM
52a0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75  A [database.]jou
52b0: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d  rnal_size_limit=
52c0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
52d0: 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20  or set the size 
52e0: 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63  limit on rollbac
52f0: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e  k journal files.
5300: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
5310: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a  gTyp_JOURNAL_SIZ
5320: 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50  E_LIMIT: {.    P
5330: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
5340: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
5350: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
5360: 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b  i64 iLimit = -2;
5370: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
5380: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
5390: 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52  DecOrHexToI64(zR
53a0: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a  ight, &iLimit);.
53b0: 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
53c0: 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d  <-1 ) iLimit = -
53d0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69  1;.    }.    iLi
53e0: 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67  mit = sqlite3Pag
53f0: 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d  erJournalSizeLim
5400: 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69  it(pPager, iLimi
5410: 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69  t);.    returnSi
5420: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
5430: 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  "journal_size_li
5440: 6d 69 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20  mit", iLimit);. 
5450: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
5460: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
5470: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
5480: 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  AS */..  /*.  **
5490: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
54a0: 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a  se.]auto_vacuum.
54b0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
54c0: 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63  tabase.]auto_vac
54d0: 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  uum=N.  **.  ** 
54e0: 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 76  Get or set the v
54f0: 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61  alue of the data
5500: 62 61 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75  base 'auto-vacuu
5510: 6d 27 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20  m' parameter..  
5520: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  ** The value is 
5530: 6f 6e 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20  one of:  0 NONE 
5540: 31 20 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45  1 FULL 2 INCREME
5550: 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65  NTAL.  */.#ifnde
5560: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
5570: 54 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20  TOVACUUM.  case 
5580: 50 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43  PragTyp_AUTO_VAC
5590: 55 55 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  UUM: {.    Btree
55a0: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
55b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
55c0: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
55d0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
55e0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
55f0: 28 70 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76  (pParse, "auto_v
5600: 61 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42  acuum", sqlite3B
5610: 74 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75  treeGetAutoVacuu
5620: 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c  m(pBt));.    }el
5630: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41  se{.      int eA
5640: 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63  uto = getAutoVac
5650: 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  uum(zRight);.   
5660: 20 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f     assert( eAuto
5670: 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20  >=0 && eAuto<=2 
5680: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78  );.      db->nex
5690: 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65  tAutovac = (u8)e
56a0: 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43  Auto;.      /* C
56b0: 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75  all SetAutoVacuu
56c0: 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69  m() to set initi
56d0: 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e  alize the intern
56e0: 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20  al auto and.    
56f0: 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d    ** incr-vacuum
5700: 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20   flags. This is 
5710: 72 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65  required in case
5720: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
5730: 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65  .      ** create
5740: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
5750: 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72  ile. It is impor
5760: 74 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20  tant that it is 
5770: 63 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a  created.      **
5780: 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75   as an auto-vacu
5790: 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20  um capable db.. 
57a0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63       */.      rc
57b0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
57c0: 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74  etAutoVacuum(pBt
57d0: 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20  , eAuto);.      
57e0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
57f0: 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c  K && (eAuto==1 |
5800: 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20  | eAuto==2) ){. 
5810: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73         /* When s
5820: 65 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f  etting the auto_
5830: 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65  vacuum mode to e
5840: 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20  ither "full" or 
5850: 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63  .        ** "inc
5860: 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65  remental", write
5870: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65   the value of me
5880: 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74  ta[6] in the dat
5890: 61 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a  abase.        **
58a0: 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72   file. Before wr
58b0: 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d  iting to meta[6]
58c0: 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74  , check that met
58d0: 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20  a[3] indicates. 
58e0: 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74         ** that t
58f0: 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e  his really is an
5900: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70   auto-vacuum cap
5910: 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20  able database.. 
5920: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
5930: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
5940: 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46  nt iLn = VDBE_OF
5950: 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a  FSET_LINENO(2);.
5960: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
5970: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
5980: 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20  setMeta6[] = {. 
5990: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72           { OP_Tr
59a0: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c  ansaction,    0,
59b0: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
59d0: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
59e0: 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
59f0: 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20  okie,     0,    
5a00: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
5a10: 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f  BTREE_LARGEST_RO
5a20: 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20  OT_PAGE},.      
5a30: 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20      { OP_If,    
5a40: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5a50: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20      0,          
5a60: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
5a70: 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   2 */.          
5a80: 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20  { OP_Halt,      
5a90: 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20       SQLITE_OK, 
5aa0: 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20  OE_Abort,       
5ab0: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a     0},    /* 3 *
5ac0: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
5ad0: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20  _Integer,       
5ae0: 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20   0,         1,  
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
5b00: 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20  },    /* 4 */.  
5b10: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74          { OP_Set
5b20: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
5b30: 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e          BTREE_IN
5b40: 43 52 5f 56 41 43 55 55 4d 2c 20 31 7d 2c 20 20  CR_VACUUM, 1},  
5b50: 20 20 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20    /* 5 */.      
5b60: 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74    };.        int
5b70: 20 69 41 64 64 72 3b 0a 20 20 20 20 20 20 20 20   iAddr;.        
5b80: 69 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56  iAddr = sqlite3V
5b90: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
5ba0: 41 72 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74  ArraySize(setMet
5bb0: 61 36 29 2c 20 73 65 74 4d 65 74 61 36 2c 20 69  a6), setMeta6, i
5bc0: 4c 6e 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Ln);.        sql
5bd0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
5be0: 28 76 2c 20 69 41 64 64 72 2c 20 69 44 62 29 3b  (v, iAddr, iDb);
5bf0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5c00: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5c10: 69 41 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20  iAddr+1, iDb);. 
5c20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5c30: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 69 41  beChangeP2(v, iA
5c40: 64 64 72 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b  ddr+2, iAddr+4);
5c50: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5c60: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5c70: 69 41 64 64 72 2b 34 2c 20 65 41 75 74 6f 2d 31  iAddr+4, eAuto-1
5c80: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5c90: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
5ca0: 2c 20 69 41 64 64 72 2b 35 2c 20 69 44 62 29 3b  , iAddr+5, iDb);
5cb0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5cc0: 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
5cd0: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20   iDb);.      }. 
5ce0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
5cf0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
5d00: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
5d10: 61 74 61 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65  atabase.]increme
5d20: 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20  ntal_vacuum(N). 
5d30: 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74   **.  ** Do N st
5d40: 65 70 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74  eps of increment
5d50: 61 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20  al vacuuming on 
5d60: 61 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  a database..  */
5d70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5d80: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
5d90: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
5da0: 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55  NCREMENTAL_VACUU
5db0: 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69  M: {.    int iLi
5dc0: 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69  mit, addr;.    i
5dd0: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20  f( zRight==0 || 
5de0: 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32  !sqlite3GetInt32
5df0: 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74  (zRight, &iLimit
5e00: 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29  ) || iLimit<=0 )
5e10: 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d  {.      iLimit =
5e20: 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20   0x7fffffff;.   
5e30: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65   }.    sqlite3Be
5e40: 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
5e50: 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62  n(pParse, 0, iDb
5e60: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5e70: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
5e80: 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20  nteger, iLimit, 
5e90: 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d 20 73  1);.    addr = s
5ea0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
5eb0: 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  (v, OP_IncrVacuu
5ec0: 6d 2c 20 69 44 62 29 3b 20 56 64 62 65 43 6f 76  m, iDb); VdbeCov
5ed0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71  erage(v);.    sq
5ee0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
5ef0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
5f00: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
5f10: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5f20: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
5f30: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5f40: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
5f50: 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 20 56 64  os, 1, addr); Vd
5f60: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
5f70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
5f80: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
5f90: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
5fa0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
5fb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
5fc0: 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  R_PRAGMAS.  /*. 
5fd0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
5fe0: 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a  abase.]cache_siz
5ff0: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
6000: 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f  database.]cache_
6010: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
6020: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
6030: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
6040: 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e  ent local settin
6050: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70  g for the.  ** p
6060: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20  age cache size. 
6070: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
6080: 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20  sets the local. 
6090: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
60a0: 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e  ize value.  If N
60b0: 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65   is positive the
60c0: 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20  n that is the.  
60d0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
60e0: 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e  es in the cache.
60f0: 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69    If N is negati
6100: 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  ve, then the.  *
6110: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
6120: 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f  s is adjusted so
6130: 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20   that the cache 
6140: 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65  uses -N kibibyte
6150: 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79  s.  ** of memory
6160: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
6170: 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45  agTyp_CACHE_SIZE
6180: 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  : {.    assert( 
6190: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
61a0: 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
61b0: 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  0) );.    if( !z
61c0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
61d0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
61e0: 50 61 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69  Parse, "cache_si
61f0: 7a 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  ze", pDb->pSchem
6200: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
6210: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6220: 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69   int size = sqli
6230: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b  te3Atoi(zRight);
6240: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68  .      pDb->pSch
6250: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20  ema->cache_size 
6260: 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71  = size;.      sq
6270: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
6280: 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c  heSize(pDb->pBt,
6290: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
62a0: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
62b0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
62c0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
62d0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d  GMA [database.]m
62e0: 6d 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a  map_size(N).  **
62f0: 0a 20 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65  .  ** Used to se
6300: 74 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c  t mapping size l
6310: 69 6d 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e  imit. The mappin
6320: 67 20 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a  g size limit is.
6330: 20 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d    ** used to lim
6340: 69 74 20 74 68 65 20 61 67 67 72 65 67 61 74 65  it the aggregate
6350: 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d   size of all mem
6360: 6f 72 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f  ory mapped regio
6370: 6e 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64  ns of the.  ** d
6380: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66  atabase file. If
6390: 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
63a0: 69 73 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20  is set to zero, 
63b0: 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70  then memory mapp
63c0: 69 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20  ing.  ** is not 
63d0: 75 73 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66  used at all.  If
63e0: 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20   N is negative, 
63f0: 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74  then the default
6400: 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a   memory map.  **
6410: 20 6c 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65   limit determine
6420: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e  d by sqlite3_con
6430: 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
6440: 47 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20  G_MMAP_SIZE) is 
6450: 73 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61  set..  ** The pa
6460: 72 61 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61  rameter N is mea
6470: 73 75 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a  sured in bytes..
6480: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76    **.  ** This v
6490: 61 6c 75 65 20 69 73 20 61 64 76 69 73 6f 72 79  alue is advisory
64a0: 2e 20 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e  .  The underlyin
64b0: 67 20 56 46 53 20 69 73 20 66 72 65 65 20 74 6f  g VFS is free to
64c0: 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a   memory map.  **
64d0: 20 61 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73   as little or as
64e0: 20 6d 75 63 68 20 61 73 20 69 74 20 77 61 6e 74   much as it want
64f0: 73 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e  s.  Except, if N
6500: 20 69 73 20 73 65 74 20 74 6f 20 30 20 74 68 65   is set to 0 the
6510: 6e 20 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72  n the.  ** upper
6520: 20 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76   layers will nev
6530: 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46  er invoke the xF
6540: 65 74 63 68 20 69 6e 74 65 72 66 61 63 65 73 20  etch interfaces 
6550: 74 6f 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f  to the VFS..  */
6560: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
6570: 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20  MMAP_SIZE: {.   
6580: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
6590: 7a 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  z;.#if SQLITE_MA
65a0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20  X_MMAP_SIZE>0.  
65b0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
65c0: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
65d0: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
65e0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
65f0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
6600: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 63        sqlite3Dec
6610: 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
6620: 74 2c 20 26 73 7a 29 3b 0a 20 20 20 20 20 20 69  t, &sz);.      i
6630: 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73  f( sz<0 ) sz = s
6640: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
6650: 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20  ig.szMmap;.     
6660: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
6670: 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73  ) db->szMmap = s
6680: 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d  z;.      for(ii=
6690: 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30  db->nDb-1; ii>=0
66a0: 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20  ; ii--){.       
66b0: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d   if( db->aDb[ii]
66c0: 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62  .pBt && (ii==iDb
66d0: 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20   || pId2->n==0) 
66e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
66f0: 69 74 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70  ite3BtreeSetMmap
6700: 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69  Limit(db->aDb[ii
6710: 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20  ].pBt, sz);.    
6720: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
6730: 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b    }.    sz = -1;
6740: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
6750: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
6760: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
6770: 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20  CNTL_MMAP_SIZE, 
6780: 26 73 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  &sz);.#else.    
6790: 73 7a 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  sz = 0;.    rc =
67a0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64   SQLITE_OK;.#end
67b0: 69 66 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  if.    if( rc==S
67c0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
67d0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
67e0: 74 28 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f  t(pParse, "mmap_
67f0: 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20  size", sz);.    
6800: 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51  }else if( rc!=SQ
6810: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b  LITE_NOTFOUND ){
6820: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
6830: 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61  Err++;.      pPa
6840: 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20  rse->rc = rc;.  
6850: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
6860: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
6870: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6880: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
6890: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65  temp_store = "de
68a0: 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c  fault"|"memory"|
68b0: 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  "file".  **.  **
68c0: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
68d0: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
68e0: 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65  f the temp_store
68f0: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
6900: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
6910: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
6920: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
6930: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
6940: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
6950: 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  * value will be 
6960: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
6970: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
6980: 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20  ase is opened.. 
6990: 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68   **.  ** Note th
69a0: 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  at it is possibl
69b0: 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72  e for the librar
69c0: 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  y compile-time o
69d0: 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f  ptions to.  ** o
69e0: 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65 74  verride this set
69f0: 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ting.  */.  case
6a00: 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54   PragTyp_TEMP_ST
6a10: 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORE: {.    if( !
6a20: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6a30: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
6a40: 70 50 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74  pParse, "temp_st
6a50: 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73  ore", db->temp_s
6a60: 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tore);.    }else
6a70: 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65  {.      changeTe
6a80: 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65  mpStorage(pParse
6a90: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d  , zRight);.    }
6aa0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6ab0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
6ac0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
6ad0: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
6ae0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6af0: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
6b00: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
6b10: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
6b20: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
6b30: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
6b40: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
6b50: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
6b60: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
6b70: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
6b80: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
6b90: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 65  o be used for te
6ba0: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20  mporary files.. 
6bb0: 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61   ** Setting to a
6bc0: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
6bd0: 65 72 74 73 20 74 6f 20 74 68 65 20 64 65 66 61  erts to the defa
6be0: 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69  ult temporary di
6bf0: 72 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a  rectory search..
6c00: 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72    ** If temporar
6c10: 79 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63  y directory is c
6c20: 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76  hanged, then inv
6c30: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
6c40: 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20  ge..  **.  */.  
6c50: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
6c60: 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52  P_STORE_DIRECTOR
6c70: 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  Y: {.    if( !zR
6c80: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
6c90: 28 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64  ( sqlite3_temp_d
6ca0: 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20  irectory ){.    
6cb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6cc0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
6cd0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
6ce0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
6cf0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
6d00: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
6d10: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
6d20: 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53  ctory", SQLITE_S
6d30: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
6d40: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
6d50: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
6d60: 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65   0, 1, 0, sqlite
6d70: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
6d80: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
6d90: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
6da0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
6db0: 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 1);.      }.
6dc0: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
6dd0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
6de0: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
6df0: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
6e00: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
6e10: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
6e20: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
6e30: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
6e40: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
6e50: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
6e60: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
6e70: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
6e80: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
6e90: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
6ea0: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
6eb0: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
6ec0: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
6ed0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
6ee0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
6ef0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45     if( SQLITE_TE
6f00: 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20  MP_STORE==0.    
6f10: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
6f20: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
6f30: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
6f40: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  ).       || (SQL
6f50: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
6f60: 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  2 && db->temp_st
6f70: 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b  ore==1).      ){
6f80: 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64  .        invalid
6f90: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70  ateTempStorage(p
6fa0: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
6fb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
6fc0: 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ee(sqlite3_temp_
6fd0: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
6fe0: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
6ff0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7000: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7010: 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
7020: 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74  ntf("%s", zRight
7030: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
7040: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
7050: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
7060: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   0;.      }.#end
7070: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
7080: 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20  T_WSD */.    }. 
7090: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
70a0: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
70b0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
70c0: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
70d0: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
70e0: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
70f0: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
7100: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
7110: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
7120: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
7130: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
7140: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
7150: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
7160: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
7170: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
7180: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
7190: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
71a0: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
71b0: 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63  t.  ** were spec
71c0: 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65 6c  ified with a rel
71d0: 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20  ative pathname. 
71e0: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
71f0: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
7200: 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65  s.  ** to the de
7210: 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 64  fault database d
7220: 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20  irectory, which 
7230: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
7240: 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69 74  es specified wit
7250: 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76  h.  ** a relativ
7260: 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62  e path will prob
7270: 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e  ably be based on
7280: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 72   the current dir
7290: 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20  ectory for the. 
72a0: 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61   ** process.  Da
72b0: 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65 63  tabase file spec
72c0: 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61 62  ified with an ab
72d0: 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65 20  solute path are 
72e0: 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a  not impacted.  *
72f0: 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69 6e  * by this settin
7300: 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  g, regardless of
7310: 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a   its value..  **
7320: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
7330: 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f  gTyp_DATA_STORE_
7340: 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20  DIRECTORY: {.   
7350: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7360: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
7370: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
7380: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
7390: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
73a0: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  s(v, 1);.       
73b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
73c0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
73d0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20  NAME_NAME, .    
73e0: 20 20 20 20 20 20 20 20 22 64 61 74 61 5f 73 74          "data_st
73f0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20  ore_directory", 
7400: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
7410: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
7420: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
7430: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
7440: 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  , sqlite3_data_d
7450: 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20  irectory, 0);.  
7460: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7470: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
7480: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
7490: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
74a0: 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  e{.#ifndef SQLIT
74b0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20  E_OMIT_WSD.     
74c0: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
74d0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65  {.        int re
74e0: 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  s;.        rc = 
74f0: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
7500: 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74  db->pVfs, zRight
7510: 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f  , SQLITE_ACCESS_
7520: 52 45 41 44 57 52 49 54 45 2c 20 26 72 65 73 29  READWRITE, &res)
7530: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
7540: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  !=SQLITE_OK || r
7550: 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
7560: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
7570: 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20  sg(pParse, "not 
7580: 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63  a writable direc
7590: 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20  tory");.        
75a0: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
75b0: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
75c0: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
75d0: 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f  e3_free(sqlite3_
75e0: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b  data_directory);
75f0: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
7600: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
7610: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
7620: 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33  ectory = sqlite3
7630: 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a  _mprintf("%s", z
7640: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65  Right);.      }e
7650: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
7660: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
7670: 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ory = 0;.      }
7680: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7690: 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20  E_OMIT_WSD */.  
76a0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
76b0: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53   }.#endif..#if S
76c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
76d0: 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a  KING_STYLE.  /*.
76e0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
76f0: 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72  atabase.]lock_pr
7700: 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20  oxy_file.  **   
7710: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
7720: 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  .]lock_proxy_fil
7730: 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f  e = ":auto:"|"lo
7740: 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20  ck_file_path".  
7750: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
7760: 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  r set the value 
7770: 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78  of the lock_prox
7780: 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68  y_file flag.  Ch
7790: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
77a0: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
77b0: 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65  cific file to be
77c0: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
77d0: 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e  se access locks.
77e0: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
77f0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
7800: 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20  ROXY_FILE: {.   
7810: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7820: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
7830: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
7840: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
7850: 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70  );.      char *p
7860: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d  roxy_file_path =
7870: 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c   NULL;.      sql
7880: 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65  ite3_file *pFile
7890: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
78a0: 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20  ile(pPager);.   
78b0: 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65     sqlite3OsFile
78c0: 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c  ControlHint(pFil
78d0: 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f  e, SQLITE_GET_LO
78e0: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7900: 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f           &proxy_
7910: 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20  file_path);.    
7920: 20 20 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f    .      if( pro
7930: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a  xy_file_path ){.
7940: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
7950: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
7960: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
7970: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
7980: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
7990: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 20 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78        "lock_prox
79c0: 79 5f 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f  y_file", SQLITE_
79d0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
79e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
79f0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
7a00: 2c 20 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79  , 0, 1, 0, proxy
7a10: 5f 66 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a  _file_path, 0);.
7a20: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
7a30: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
7a40: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
7a50: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
7a60: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7a70: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
7a80: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
7a90: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71  ->pBt);.      sq
7aa0: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
7ab0: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
7ac0: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
7ad0: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
7ae0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7af0: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d   ){.        res=
7b00: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7b10: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7b20: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7b30: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69 67              zRig
7b60: 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  ht);.      } els
7b70: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d  e {.        res=
7b80: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7b90: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7ba0: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7bb0: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
7be0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
7bf0: 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45   if( res!=SQLITE
7c00: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73  _OK ){.        s
7c10: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7c20: 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74  Parse, "failed t
7c30: 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79  o set lock proxy
7c40: 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20   file");.       
7c50: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
7c60: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
7c70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
7c80: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7c90: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
7ca0: 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20  TYLE */      .  
7cb0: 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50    .  /*.  **   P
7cc0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
7cd0: 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a  ]synchronous.  *
7ce0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
7cf0: 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75  base.]synchronou
7d00: 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c  s=OFF|ON|NORMAL|
7d10: 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  FULL.  **.  ** R
7d20: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
7d30: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
7d40: 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  the synchronous 
7d50: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
7d60: 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76    ** the local v
7d70: 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61  alue does not ma
7d80: 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ke changes to th
7d90: 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20  e disk file and 
7da0: 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74  the.  ** default
7db0: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72   value will be r
7dc0: 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74  estored the next
7dd0: 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61   time the databa
7de0: 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65  se is.  ** opene
7df0: 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  d..  */.  case P
7e00: 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f  ragTyp_SYNCHRONO
7e10: 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  US: {.    if( !z
7e20: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
7e30: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
7e40: 50 61 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e  Parse, "synchron
7e50: 6f 75 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20  ous", .         
7e60: 20 20 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65     SQLITE_DbSafe
7e70: 74 79 4c 65 76 65 6c 56 61 6c 75 65 28 70 44 62  tyLevelValue(pDb
7e80: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 2d  ->safety_level)-
7e90: 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  1);.    }else{. 
7ea0: 20 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75       if( !db->au
7eb0: 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
7ec0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
7ed0: 4d 73 67 28 70 50 61 72 73 65 2c 20 0a 20 20 20  Msg(pParse, .   
7ee0: 20 20 20 20 20 20 20 20 20 22 53 61 66 65 74 79           "Safety
7ef0: 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62   level may not b
7f00: 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65  e changed inside
7f10: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29   a transaction")
7f20: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
7f30: 20 20 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65         pDb->safe
7f40: 74 79 5f 6c 65 76 65 6c 20 3d 20 28 67 65 74 53  ty_level = (getS
7f50: 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68  afetyLevel(zRigh
7f60: 74 2c 30 2c 31 29 2b 31 29 0a 20 20 20 20 20 20  t,0,1)+1).      
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f90: 7c 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c  | SQLITE_SAFETYL
7fa0: 45 56 45 4c 5f 46 49 58 45 44 3b 0a 20 20 20 20  EVEL_FIXED;.    
7fb0: 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46      setAllPagerF
7fc0: 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20  lags(db);.      
7fd0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
7fe0: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
7ff0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
8000: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ER_PRAGMAS */..#
8010: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8020: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a  IT_FLAG_PRAGMAS.
8030: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
8040: 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  LAG: {.    if( z
8050: 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Right==0 ){.    
8060: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
8070: 74 28 70 50 61 72 73 65 2c 20 70 50 72 61 67 6d  t(pParse, pPragm
8080: 61 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e 66  a->zName, (db->f
8090: 6c 61 67 73 20 26 20 70 50 72 61 67 6d 61 2d 3e  lags & pPragma->
80a0: 69 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20  iArg)!=0 );.    
80b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
80c0: 20 6d 61 73 6b 20 3d 20 70 50 72 61 67 6d 61 2d   mask = pPragma-
80d0: 3e 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73  >iArg;    /* Mas
80e0: 6b 20 6f 66 20 62 69 74 73 20 74 6f 20 73 65 74  k of bits to set
80f0: 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20   or clear. */.  
8100: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f      if( db->auto
8110: 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20  Commit==0 ){.   
8120: 20 20 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20       /* Foreign 
8130: 6b 65 79 20 73 75 70 70 6f 72 74 20 6d 61 79 20  key support may 
8140: 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65 64 20 6f  not be enabled o
8150: 72 20 64 69 73 61 62 6c 65 64 20 77 68 69 6c 65  r disabled while
8160: 20 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a 20   not.        ** 
8170: 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d  in auto-commit m
8180: 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20  ode.  */.       
8190: 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54   mask &= ~(SQLIT
81a0: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a  E_ForeignKeys);.
81b0: 20 20 20 20 20 20 7d 0a 23 69 66 20 53 51 4c 49        }.#if SQLI
81c0: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
81d0: 43 41 54 49 4f 4e 0a 20 20 20 20 20 20 69 66 28  CATION.      if(
81e0: 20 64 62 2d 3e 61 75 74 68 2e 61 75 74 68 4c 65   db->auth.authLe
81f0: 76 65 6c 3d 3d 55 41 55 54 48 5f 55 73 65 72 20  vel==UAUTH_User 
8200: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 6f  ){.        /* Do
8210: 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d 61   not allow non-a
8220: 64 6d 69 6e 20 75 73 65 72 73 20 74 6f 20 6d 6f  dmin users to mo
8230: 64 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20  dify the schema 
8240: 61 72 62 69 74 72 61 72 69 6c 79 20 2a 2f 0a 20  arbitrarily */. 
8250: 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e         mask &= ~
8260: 28 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68  (SQLITE_WriteSch
8270: 65 6d 61 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65  ema);.      }.#e
8280: 6e 64 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20  ndif..      if( 
8290: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
82a0: 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a  n(zRight, 0) ){.
82b0: 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
82c0: 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20 20  s |= mask;.     
82d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
82e0: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d 61  db->flags &= ~ma
82f0: 73 6b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  sk;.        if( 
8300: 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65 66  mask==SQLITE_Def
8310: 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65 66  erFKs ) db->nDef
8320: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 30  erredImmCons = 0
8330: 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
8340: 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65 20   /* Many of the 
8350: 66 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64  flag-pragmas mod
8360: 69 66 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e  ify the code gen
8370: 65 72 61 74 65 64 20 62 79 20 74 68 65 20 53 51  erated by the SQ
8380: 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70  L .      ** comp
8390: 69 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74 5f  iler (eg. count_
83a0: 63 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64 64  changes). So add
83b0: 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65 78   an opcode to ex
83c0: 70 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20 2a  pire all.      *
83d0: 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73  * compiled SQL s
83e0: 74 61 74 65 6d 65 6e 74 73 20 61 66 74 65 72 20  tatements after 
83f0: 6d 6f 64 69 66 79 69 6e 67 20 61 20 70 72 61 67  modifying a prag
8400: 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ma value..      
8410: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
8420: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8430: 5f 45 78 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a  _Expire, 0, 0);.
8440: 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65        setAllPage
8450: 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20  rFlags(db);.    
8460: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
8470: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
8480: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
8490: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
84a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
84b0: 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a  MA_PRAGMAS.  /*.
84c0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61    **   PRAGMA ta
84d0: 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e  ble_info(<table>
84e0: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ).  **.  ** Retu
84f0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  rn a single row 
8500: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
8510: 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62  of the named tab
8520: 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  le. The columns 
8530: 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75  of.  ** the retu
8540: 72 6e 65 64 20 64 61 74 61 20 73 65 74 20 61 72  rned data set ar
8550: 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64  e:.  **.  ** cid
8560: 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  :        Column 
8570: 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f  id (numbered fro
8580: 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c  m left to right,
8590: 20 73 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a   starting at 0).
85a0: 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20    ** name:      
85b0: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a   Column name.  *
85c0: 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f  * type:       Co
85d0: 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  lumn declaration
85e0: 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e   type..  ** notn
85f0: 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20  ull:    True if 
8600: 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61  'NOT NULL' is pa
8610: 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63  rt of column dec
8620: 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66  laration.  ** df
8630: 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65  lt_value: The de
8640: 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
8650: 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61  the column, if a
8660: 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ny..  */.  case 
8670: 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e  PragTyp_TABLE_IN
8680: 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  FO: if( zRight )
8690: 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  {.    Table *pTa
86a0: 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71  b;.    pTab = sq
86b0: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
86c0: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  b, zRight, zDb);
86d0: 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b  .    if( pTab ){
86e0: 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b  .      int i, k;
86f0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64 64  .      int nHidd
8700: 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f  en = 0;.      Co
8710: 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20  lumn *pCol;.    
8720: 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20 73    Index *pPk = s
8730: 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
8740: 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20  Index(pTab);.   
8750: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8760: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b 0a  tNumCols(v, 6);.
8770: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
8780: 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71  em = 6;.      sq
8790: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
87a0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
87b0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
87c0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
87d0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
87e0: 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54  ME, "cid", SQLIT
87f0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
8800: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
8810: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
8820: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
8830: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
8840: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8850: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
8860: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
8870: 45 2c 20 22 74 79 70 65 22 2c 20 53 51 4c 49 54  E, "type", SQLIT
8880: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
8890: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
88a0: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
88b0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e  NAME_NAME, "notn
88c0: 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ull", SQLITE_STA
88d0: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
88e0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
88f0: 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 4, COLNAME_
8900: 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61 6c 75  NAME, "dflt_valu
8910: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
8920: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
8930: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
8940: 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 5, COLNAME_NA
8950: 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49 54 45  ME, "pk", SQLITE
8960: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
8970: 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
8980: 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65  lumnNames(pParse
8990: 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66  , pTab);.      f
89a0: 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61  or(i=0, pCol=pTa
89b0: 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d  b->aCol; i<pTab-
89c0: 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c  >nCol; i++, pCol
89d0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
89e0: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
89f0: 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20  pCol) ){.       
8a00: 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20     nHidden++;.  
8a10: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
8a20: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
8a30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8a40: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
8a50: 67 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e 2c 20  ger, i-nHidden, 
8a60: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
8a70: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
8a80: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
8a90: 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d  2, 0, pCol->zNam
8aa0: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  e, 0);.        s
8ab0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
8ac0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
8ad0: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
8ae0: 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20      pCol->zType 
8af0: 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20  ? pCol->zType : 
8b00: 22 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  "", 0);.        
8b10: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8b20: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
8b30: 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20   (pCol->notNull 
8b40: 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a 20 20  ? 1 : 0), 4);.  
8b50: 20 20 20 20 20 20 69 66 28 20 70 43 6f 6c 2d 3e        if( pCol->
8b60: 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20 20 20 20  zDflt ){.       
8b70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8b80: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
8b90: 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28 63 68  g8, 0, 5, 0, (ch
8ba0: 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c  ar*)pCol->zDflt,
8bb0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c   0);.        }el
8bc0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  se{.          sq
8bd0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8be0: 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35  v, OP_Null, 0, 5
8bf0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
8c00: 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e       if( (pCol->
8c10: 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
8c20: 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29  AG_PRIMKEY)==0 )
8c30: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
8c40: 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  0;.        }else
8c50: 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20   if( pPk==0 ){. 
8c60: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a           k = 1;.
8c70: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
8c80: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31           for(k=1
8c90: 3b 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20  ; k<=pTab->nCol 
8ca0: 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e  && pPk->aiColumn
8cb0: 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d  [k-1]!=i; k++){}
8cc0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
8cd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8ce0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
8cf0: 65 72 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20  er, k, 6);.     
8d00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8d10: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
8d20: 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20  tRow, 1, 6);.   
8d30: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
8d40: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
8d50: 50 72 61 67 54 79 70 5f 53 54 41 54 53 3a 20 7b  PragTyp_STATS: {
8d60: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
8d70: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
8d80: 69 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  i;.    v = sqlit
8d90: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
8da0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
8db0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
8dc0: 34 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  4);.    pParse->
8dd0: 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71  nMem = 4;.    sq
8de0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
8df0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
8e00: 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  b);.    sqlite3V
8e10: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
8e20: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
8e30: 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54  , "table", SQLIT
8e40: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
8e50: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8e60: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
8e70: 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 64 65 78 22  ME_NAME, "index"
8e80: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8e90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8ea0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
8eb0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
8ec0: 22 77 69 64 74 68 22 2c 20 53 51 4c 49 54 45 5f  "width", SQLITE_
8ed0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
8ee0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
8ef0: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
8f00: 5f 4e 41 4d 45 2c 20 22 68 65 69 67 68 74 22 2c  _NAME, "height",
8f10: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
8f20: 0a 20 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74  .    for(i=sqlit
8f30: 65 48 61 73 68 46 69 72 73 74 28 26 70 44 62 2d  eHashFirst(&pDb-
8f40: 3e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73  >pSchema->tblHas
8f50: 68 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48  h); i; i=sqliteH
8f60: 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20  ashNext(i)){.   
8f70: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
8f80: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
8f90: 69 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  i);.      sqlite
8fa0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
8fb0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
8fc0: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c   0, pTab->zName,
8fd0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
8fe0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8ff0: 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b 0a  OP_Null, 0, 2);.
9000: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9010: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
9020: 74 65 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  teger,.         
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9040: 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f    (int)sqlite3Lo
9050: 67 45 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e  gEstToInt(pTab->
9060: 73 7a 54 61 62 52 6f 77 29 2c 20 33 29 3b 0a 20  szTabRow), 3);. 
9070: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9080: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
9090: 65 67 65 72 2c 20 0a 20 20 20 20 20 20 20 20 20  eger, .         
90a0: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
90b0: 45 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 6e  EstToInt(pTab->n
90c0: 52 6f 77 4c 6f 67 45 73 74 29 2c 20 34 29 3b 0a  RowLogEst), 4);.
90d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
90e0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
90f0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a  sultRow, 1, 4);.
9100: 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70        for(pIdx=p
9110: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
9120: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
9130: 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ext){.        sq
9140: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
9150: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
9160: 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e  , 2, 0, pIdx->zN
9170: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
9180: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9190: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
91a0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
91c0: 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73  int)sqlite3LogEs
91d0: 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49  tToInt(pIdx->szI
91e0: 64 78 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20  dxRow), 3);.    
91f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9200: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
9210: 67 65 72 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ger, .          
9220: 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f    (int)sqlite3Lo
9230: 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e  gEstToInt(pIdx->
9240: 61 69 52 6f 77 4c 6f 67 45 73 74 5b 30 5d 29 2c  aiRowLogEst[0]),
9250: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   4);.        sql
9260: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9270: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9280: 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 4);.      }. 
9290: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
92a0: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
92b0: 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66  p_INDEX_INFO: if
92c0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
92d0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
92e0: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
92f0: 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33    pIdx = sqlite3
9300: 46 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52  FindIndex(db, zR
9310: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
9320: 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20  if( pIdx ){.    
9330: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 69    int i;.      i
9340: 6e 74 20 6d 78 3b 0a 20 20 20 20 20 20 69 66 28  nt mx;.      if(
9350: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 29   pPragma->iArg )
9360: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41  {.        /* PRA
9370: 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20  GMA index_xinfo 
9380: 28 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 20 77  (newer version w
9390: 69 74 68 20 6d 6f 72 65 20 72 6f 77 73 20 61 6e  ith more rows an
93a0: 64 20 63 6f 6c 75 6d 6e 73 29 20 2a 2f 0a 20 20  d columns) */.  
93b0: 20 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d        mx = pIdx-
93c0: 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20 20  >nColumn;.      
93d0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
93e0: 20 36 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   6;.      }else{
93f0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47  .        /* PRAG
9400: 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20 28 6c  MA index_info (l
9410: 65 67 61 63 79 20 76 65 72 73 69 6f 6e 29 20 2a  egacy version) *
9420: 2f 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70  /.        mx = p
9430: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20  Idx->nKeyCol;.  
9440: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
9450: 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a  em = 3;.      }.
9460: 20 20 20 20 20 20 70 54 61 62 20 3d 20 70 49 64        pTab = pId
9470: 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20  x->pTable;.     
9480: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
9490: 75 6d 43 6f 6c 73 28 76 2c 20 70 50 61 72 73 65  umCols(v, pParse
94a0: 2d 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  ->nMem);.      s
94b0: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
94c0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
94d0: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
94e0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
94f0: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
9500: 41 4d 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51  AME, "seqno", SQ
9510: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9520: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9530: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
9540: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
9550: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
9560: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
9570: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
9580: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
9590: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
95a0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
95b0: 20 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e     if( pPragma->
95c0: 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20  iArg ){.        
95d0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
95e0: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
95f0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 65 73 63 22  AME_NAME, "desc"
9600: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9610: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9620: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9630: 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 4, COLNAME_NA
9640: 4d 45 2c 20 22 63 6f 6c 6c 22 2c 20 53 51 4c 49  ME, "coll", SQLI
9650: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9660: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9670: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20  etColName(v, 5, 
9680: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6b  COLNAME_NAME, "k
9690: 65 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ey", SQLITE_STAT
96a0: 49 43 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  IC);.      }.   
96b0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6d 78     for(i=0; i<mx
96c0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
96d0: 69 31 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d  i16 cnum = pIdx-
96e0: 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20  >aiColumn[i];.  
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 2c 20 31 29 3b 0a 20 20  teger, i, 1);.  
9720: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9730: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
9740: 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29 3b  teger, cnum, 2);
9750: 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 75  .        if( cnu
9760: 6d 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  m<0 ){.         
9770: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9780: 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30  p2(v, OP_Null, 0
9790: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  , 3);.        }e
97a0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73  lse{.          s
97b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
97c0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
97d0: 30 2c 20 33 2c 20 30 2c 20 70 54 61 62 2d 3e 61  0, 3, 0, pTab->a
97e0: 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c  Col[cnum].zName,
97f0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   0);.        }. 
9800: 20 20 20 20 20 20 20 69 66 28 20 70 50 72 61 67         if( pPrag
9810: 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20  ma->iArg ){.    
9820: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9830: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
9840: 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 61 53 6f  teger, pIdx->aSo
9850: 72 74 4f 72 64 65 72 5b 69 5d 2c 20 34 29 3b 0a  rtOrder[i], 4);.
9860: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9870: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
9880: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 35 2c  P_String8, 0, 5,
9890: 20 30 2c 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c   0, pIdx->azColl
98a0: 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  [i], 0);.       
98b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
98c0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
98d0: 65 72 2c 20 69 3c 70 49 64 78 2d 3e 6e 4b 65 79  er, i<pIdx->nKey
98e0: 43 6f 6c 2c 20 36 29 3b 0a 20 20 20 20 20 20 20  Col, 6);.       
98f0: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
9900: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
9910: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
9920: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a   pParse->nMem);.
9930: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9940: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
9950: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58  se PragTyp_INDEX
9960: 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68  _LIST: if( zRigh
9970: 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  t ){.    Index *
9980: 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20  pIdx;.    Table 
9990: 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69  *pTab;.    int i
99a0: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
99b0: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
99c0: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
99d0: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
99e0: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
99f0: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
9a00: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9a10: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
9a20: 20 35 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73   5);.      pPars
9a30: 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20 20 20  e->nMem = 5;.   
9a40: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
9a50: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
9a60: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  e, iDb);.      s
9a70: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
9a80: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
9a90: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
9aa0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9ab0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9ac0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
9ad0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
9ae0: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
9af0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
9b00: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9b10: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
9b20: 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65 22  E_NAME, "unique"
9b30: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9b40: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9b50: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
9b60: 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   3, COLNAME_NAME
9b70: 2c 20 22 6f 72 69 67 69 6e 22 2c 20 53 51 4c 49  , "origin", SQLI
9b80: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9b90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9ba0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f  ColName(v, 4, CO
9bb0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 61 72  LNAME_NAME, "par
9bc0: 74 69 61 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54  tial", SQLITE_ST
9bd0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72  ATIC);.      for
9be0: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
9bf0: 65 78 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70  ex, i=0; pIdx; p
9c00: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
9c10: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63   i++){.        c
9c20: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4f 72 69  onst char *azOri
9c30: 67 69 6e 5b 5d 20 3d 20 7b 20 22 63 22 2c 20 22  gin[] = { "c", "
9c40: 75 22 2c 20 22 70 6b 22 20 7d 3b 0a 20 20 20 20  u", "pk" };.    
9c50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9c60: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
9c70: 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20  ger, i, 1);.    
9c80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9c90: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
9ca0: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49  ng8, 0, 2, 0, pI
9cb0: 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  dx->zName, 0);. 
9cc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9cd0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
9ce0: 6e 74 65 67 65 72 2c 20 49 73 55 6e 69 71 75 65  nteger, IsUnique
9cf0: 49 6e 64 65 78 28 70 49 64 78 29 2c 20 33 29 3b  Index(pIdx), 3);
9d00: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9d10: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
9d20: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20  _String8, 0, 4, 
9d30: 30 2c 20 61 7a 4f 72 69 67 69 6e 5b 70 49 64 78  0, azOrigin[pIdx
9d40: 2d 3e 69 64 78 54 79 70 65 5d 2c 20 30 29 3b 0a  ->idxType], 0);.
9d50: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9d60: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9d70: 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 70  Integer, pIdx->p
9d80: 50 61 72 74 49 64 78 57 68 65 72 65 21 3d 30 2c  PartIdxWhere!=0,
9d90: 20 35 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   5);.        sql
9da0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9db0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9dc0: 31 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 5);.      }. 
9dd0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
9de0: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
9df0: 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54 3a  p_DATABASE_LIST:
9e00: 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20   {.    int i;.  
9e10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9e20: 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
9e30: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
9e40: 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 3;.    sqlite3
9e50: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9e60: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
9e70: 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45  E, "seq", SQLITE
9e80: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
9e90: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9ea0: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
9eb0: 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20  E_NAME, "name", 
9ec0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9ed0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9ee0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
9ef0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66  COLNAME_NAME, "f
9f00: 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ile", SQLITE_STA
9f10: 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  TIC);.    for(i=
9f20: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
9f30: 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  +){.      if( db
9f40: 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20  ->aDb[i].pBt==0 
9f50: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
9f60: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44    assert( db->aD
9f70: 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b  b[i].zName!=0 );
9f80: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9f90: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
9fa0: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
9fb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9fc0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
9fd0: 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 64  ing8, 0, 2, 0, d
9fe0: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
9ff0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
a000: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
a010: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
a020: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
a030: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46  sqlite3BtreeGetF
a040: 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b  ilename(db->aDb[
a050: 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20 20  i].pBt), 0);.   
a060: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a070: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
a080: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20  tRow, 1, 3);.   
a090: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
a0a0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
a0b0: 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20  COLLATION_LIST: 
a0c0: 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  {.    int i = 0;
a0d0: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70  .    HashElem *p
a0e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
a0f0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32  eSetNumCols(v, 2
a100: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
a110: 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c  Mem = 2;.    sql
a120: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a130: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
a140: 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51  _NAME, "seq", SQ
a150: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
a160: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a170: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
a180: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
a190: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
a1a0: 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71  C);.    for(p=sq
a1b0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
a1c0: 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b  b->aCollSeq); p;
a1d0: 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   p=sqliteHashNex
a1e0: 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c  t(p)){.      Col
a1f0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43  lSeq *pColl = (C
a200: 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48  ollSeq *)sqliteH
a210: 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20  ashData(p);.    
a220: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a230: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
a240: 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20 20 20  r, i++, 1);.    
a250: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a260: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
a270: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c  8, 0, 2, 0, pCol
a280: 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  l->zName, 0);.  
a290: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a2a0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
a2b0: 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20  ltRow, 1, 2);.  
a2c0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
a2d0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
a2e0: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
a2f0: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
a300: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
a310: 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65  REIGN_KEY.  case
a320: 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e   PragTyp_FOREIGN
a330: 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a  _KEY_LIST: if( z
a340: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65  Right ){.    FKe
a350: 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c  y *pFK;.    Tabl
a360: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61  e *pTab;.    pTa
a370: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
a380: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
a390: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
a3a0: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  Tab ){.      v =
a3b0: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
a3c0: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70  pParse);.      p
a3d0: 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79  FK = pTab->pFKey
a3e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20  ;.      if( pFK 
a3f0: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  ){.        int i
a400: 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20 73   = 0; .        s
a410: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
a420: 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20 20 20  Cols(v, 8);.    
a430: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
a440: 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73 71   = 8;.        sq
a450: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
a460: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
a470: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  b);.        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 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
a4a0: 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53 51 4c 49  NAME, "id", SQLI
a4b0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
a4c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
a4d0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
a4e0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
a4f0: 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  eq", SQLITE_STAT
a500: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
a510: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a520: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
a530: 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20  _NAME, "table", 
a540: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
a550: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a560: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
a570: 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   3, COLNAME_NAME
a580: 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54 45  , "from", SQLITE
a590: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
a5a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a5b0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f  ColName(v, 4, CO
a5c0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f 22  LNAME_NAME, "to"
a5d0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
a5e0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
a5f0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
a600: 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 5, COLNAME_NA
a610: 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c  ME, "on_update",
a620: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
a630: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a640: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
a650: 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 6, COLNAME_NAM
a660: 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 20  E, "on_delete", 
a670: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
a680: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a690: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
a6a0: 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   7, COLNAME_NAME
a6b0: 2c 20 22 6d 61 74 63 68 22 2c 20 53 51 4c 49 54  , "match", SQLIT
a6c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
a6d0: 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20     while(pFK){. 
a6e0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a           int j;.
a6f0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
a700: 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20  0; j<pFK->nCol; 
a710: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
a720: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d 20 70    char *zCol = p
a730: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c  FK->aCol[j].zCol
a740: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68  ;.            ch
a750: 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d 20  ar *zOnDelete = 
a760: 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61  (char *)actionNa
a770: 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b  me(pFK->aAction[
a780: 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  0]);.           
a790: 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61 74 65   char *zOnUpdate
a7a0: 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f   = (char *)actio
a7b0: 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69  nName(pFK->aActi
a7c0: 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  on[1]);.        
a7d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a7e0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
a7f0: 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20  ger, i, 1);.    
a800: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a810: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
a820: 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29 3b 0a  Integer, j, 2);.
a830: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a840: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
a850: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
a860: 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20  3, 0, pFK->zTo, 
a870: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
a880: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a890: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
a8a0: 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20 20   0, 4, 0,.      
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8c0: 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43          pTab->aC
a8d0: 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e  ol[pFK->aCol[j].
a8e0: 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29  iFrom].zName, 0)
a8f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
a900: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
a910: 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74 72  v, zCol ? OP_Str
a920: 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c 20  ing8 : OP_Null, 
a930: 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20 30  0, 5, 0, zCol, 0
a940: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
a950: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
a960: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
a970: 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70 64 61  0, 6, 0, zOnUpda
a980: 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  te, 0);.        
a990: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a9a0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
a9b0: 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20 7a 4f  ng8, 0, 7, 0, zO
a9c0: 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20 20 20  nDelete, 0);.   
a9d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a9e0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
a9f0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 38 2c 20  _String8, 0, 8, 
aa00: 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a 20  0, "NONE", 0);. 
aa10: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
aa20: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
aa30: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
aa40: 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d   8);.          }
aa50: 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a  .          ++i;.
aa60: 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d 20            pFK = 
aa70: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a  pFK->pNextFrom;.
aa80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
aa90: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
aaa0: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21  eak;.#endif /* !
aab0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
aac0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
aad0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
aae0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
aaf0: 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51 4c  _KEY.#ifndef SQL
ab00: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
ab10: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
ab20: 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43  FOREIGN_KEY_CHEC
ab30: 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70  K: {.    FKey *p
ab40: 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  FK;             
ab50: 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  /* A foreign key
ab60: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
ab70: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
ab80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69            /* Chi
ab90: 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e  ld table contain
aba0: 20 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65   "REFERENCES" ke
abb0: 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62  yword */.    Tab
abc0: 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20  le *pParent;    
abd0: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61      /* Parent ta
abe0: 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20 70  ble that child p
abf0: 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20  oints to */.    
ac00: 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20  Index *pIdx;    
ac10: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
ac20: 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74 61  in the parent ta
ac30: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
ac40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ac50: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
ac60: 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20  r:  Foreign key 
ac70: 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20  number for pTab 
ac80: 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20  */.    int j;   
ac90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aca0: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20   Loop counter:  
acb0: 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72  Field of the for
acc0: 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20  eign key */.    
acd0: 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20  HashElem *k;    
ace0: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
acf0: 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61  ounter:  Next ta
ad00: 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f  ble in schema */
ad10: 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20  .    int x;     
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72              /* r
ad30: 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a  esult variable *
ad40: 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
ad50: 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ult;         /* 
ad60: 33 20 72 65 67 69 73 74 65 72 73 20 74 6f 20 68  3 registers to h
ad70: 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77  old a result row
ad80: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b   */.    int regK
ad90: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ey;            /
ada0: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f  * Register to ho
adb0: 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b  ld key for check
adc0: 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20  ing the FK */.  
add0: 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20    int regRow;   
ade0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
adf0: 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20  sters to hold a 
ae00: 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f  row from pTab */
ae10: 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70  .    int addrTop
ae20: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
ae30: 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65  op of a loop che
ae40: 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65  cking foreign ke
ae50: 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  ys */.    int ad
ae60: 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20  drOk;           
ae70: 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66   /* Jump here if
ae80: 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a   the key is OK *
ae90: 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c  /.    int *aiCol
aea0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
aeb0: 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20  child to parent 
aec0: 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a  column mapping *
aed0: 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74  /..    regResult
aee0: 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b   = pParse->nMem+
aef0: 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  1;.    pParse->n
af00: 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65  Mem += 4;.    re
af10: 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d  gKey = ++pParse-
af20: 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f  >nMem;.    regRo
af30: 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  w = ++pParse->nM
af40: 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69  em;.    v = sqli
af50: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
af60: 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  e);.    sqlite3V
af70: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
af80: 20 34 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   4);.    sqlite3
af90: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
afa0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
afb0: 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49  E, "table", SQLI
afc0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
afd0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
afe0: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
aff0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77 69 64  AME_NAME, "rowid
b000: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
b010: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
b020: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
b030: 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
b040: 20 22 70 61 72 65 6e 74 22 2c 20 53 51 4c 49 54   "parent", SQLIT
b050: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
b060: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
b070: 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41  Name(v, 3, COLNA
b080: 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64 22 2c  ME_NAME, "fkid",
b090: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
b0a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65  .    sqlite3Code
b0b0: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
b0c0: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b  rse, iDb);.    k
b0d0: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69 72   = sqliteHashFir
b0e0: 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d  st(&db->aDb[iDb]
b0f0: 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73  .pSchema->tblHas
b100: 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 6b  h);.    while( k
b110: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52   ){.      if( zR
b120: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20 20  ight ){.        
b130: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f  pTab = sqlite3Lo
b140: 63 61 74 65 54 61 62 6c 65 28 70 50 61 72 73 65  cateTable(pParse
b150: 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  , 0, zRight, zDb
b160: 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30  );.        k = 0
b170: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
b180: 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 28 54         pTab = (T
b190: 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68  able*)sqliteHash
b1a0: 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20 20  Data(k);.       
b1b0: 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 4e   k = sqliteHashN
b1c0: 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  ext(k);.      }.
b1d0: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d        if( pTab==
b1e0: 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79  0 || pTab->pFKey
b1f0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
b200: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62        sqlite3Tab
b210: 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69  leLock(pParse, i
b220: 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20  Db, pTab->tnum, 
b230: 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b  0, pTab->zName);
b240: 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d  .      if( pTab-
b250: 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61  >nCol+regRow>pPa
b260: 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72  rse->nMem ) pPar
b270: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d  se->nMem = pTab-
b280: 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a  >nCol + regRow;.
b290: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
b2a0: 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30  nTable(pParse, 0
b2b0: 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f  , iDb, pTab, OP_
b2c0: 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20  OpenRead);.     
b2d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b2e0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
b2f0: 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2c 20  , 0, regResult, 
b300: 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a  0, pTab->zName,.
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b320: 20 20 20 20 20 20 20 20 50 34 5f 54 52 41 4e 53          P4_TRANS
b330: 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 66 6f 72  IENT);.      for
b340: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
b350: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
b360: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
b370: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
b380: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
b390: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
b3a0: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
b3b0: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
b3c0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
b3d0: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
b3e0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
b3f0: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
b400: 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d  e, iDb, pParent-
b410: 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e  >tnum, 0, pParen
b420: 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  t->zName);.     
b430: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
b440: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
b450: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
b460: 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20  , &pIdx, 0);.   
b470: 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b       if( x==0 ){
b480: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
b490: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
b4a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
b4b0: 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69  nTable(pParse, i
b4c0: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20  , iDb, pParent, 
b4d0: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
b4e0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
b4f0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b500: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
b510: 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20  OP_OpenRead, i, 
b520: 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29  pIdx->tnum, iDb)
b530: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
b540: 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65  lite3VdbeSetP4Ke
b550: 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49  yInfo(pParse, pI
b560: 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  dx);.          }
b570: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
b580: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b            k = 0;
b590: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
b5a0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
b5b0: 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
b5c0: 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30  ( pParse->nErr>0
b5d0: 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20   || pFK==0 );.  
b5e0: 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72      if( pFK ) br
b5f0: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  eak;.      if( p
b600: 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20  Parse->nTab<i ) 
b610: 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69  pParse->nTab = i
b620: 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20  ;.      addrTop 
b630: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
b640: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op1(v, OP_Rewind
b650: 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 0); VdbeCovera
b660: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72  ge(v);.      for
b670: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
b680: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
b690: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
b6a0: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
b6b0: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
b6c0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
b6d0: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
b6e0: 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20       pIdx = 0;. 
b6f0: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20         aiCols = 
b700: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  0;.        if( p
b710: 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20  Parent ){.      
b720: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
b730: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
b740: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
b750: 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c  K, &pIdx, &aiCol
b760: 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  s);.          as
b770: 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20  sert( x==0 );.  
b780: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
b790: 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33  addrOk = sqlite3
b7a0: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
b7b0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
b7c0: 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30  arent && pIdx==0
b7d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e   ){.          in
b7e0: 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43  t iKey = pFK->aC
b7f0: 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20  ol[0].iFrom;.   
b800: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69         assert( i
b810: 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70  Key>=0 && iKey<p
b820: 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20  Tab->nCol );.   
b830: 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 21         if( iKey!
b840: 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a  =pTab->iPKey ){.
b850: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b860: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
b870: 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69   OP_Column, 0, i
b880: 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  Key, regRow);.  
b890: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b8a0: 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76  3ColumnDefault(v
b8b0: 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65  , pTab, iKey, re
b8c0: 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20  gRow);.         
b8d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b8e0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
b8f0: 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f  l, regRow, addrO
b900: 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  k); VdbeCoverage
b910: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
b920: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b930: 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49  p2(v, OP_MustBeI
b940: 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20 20  nt, regRow, .   
b950: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b960: 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64  te3VdbeCurrentAd
b970: 64 72 28 76 29 2b 33 29 3b 20 56 64 62 65 43 6f  dr(v)+3); VdbeCo
b980: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
b990: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
b9a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b9b0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b9c0: 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77  Rowid, 0, regRow
b9d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
b9e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b9f0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
ba00: 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30  _NotExists, i, 0
ba10: 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65 43  , regRow); VdbeC
ba20: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ba30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ba40: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f  eAddOp2(v, OP_Go
ba50: 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a  to, 0, addrOk);.
ba60: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ba70: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
ba80: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
ba90: 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20  entAddr(v)-2);. 
baa0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
bab0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
bac0: 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b   j<pFK->nCol; j+
bad0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
bae0: 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
baf0: 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
bb00: 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20  v, pTab, 0,.    
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb20: 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f          aiCols ?
bb30: 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b   aiCols[j] : pFK
bb40: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c  ->aCol[j].iFrom,
bb50: 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20   regRow+j);.    
bb60: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bb70: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
bb80: 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a  IsNull, regRow+j
bb90: 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43  , addrOk); VdbeC
bba0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
bbb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
bbc0: 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b    if( pParent ){
bbd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
bbe0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
bbf0: 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c  , OP_MakeRecord,
bc00: 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43   regRow, pFK->nC
bc10: 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20  ol, regKey,.    
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc30: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
bc40: 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
bc50: 72 28 76 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e  r(v,pIdx), pFK->
bc60: 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20  nCol);.         
bc70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bc80: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
bc90: 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20  und, i, addrOk, 
bca0: 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20  regKey, 0);.    
bcb0: 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65          VdbeCove
bcc0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
bcd0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
bce0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
bcf0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
bd00: 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75  owid, 0, regResu
bd10: 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73  lt+1);.        s
bd20: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
bd30: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
bd40: 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c 20  0, regResult+2, 
bd50: 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  0, .            
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46                pF
bd70: 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52 41 4e 53  K->zTo, P4_TRANS
bd80: 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 73  IENT);.        s
bd90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
bda0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
bdb0: 69 2d 31 2c 20 72 65 67 52 65 73 75 6c 74 2b 33  i-1, regResult+3
bdc0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
bdd0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
bde0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65  OP_ResultRow, re
bdf0: 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20  gResult, 4);.   
be00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
be10: 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20  ResolveLabel(v, 
be20: 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20  addrOk);.       
be30: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
be40: 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20  b, aiCols);.    
be50: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
be60: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
be70: 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54  P_Next, 0, addrT
be80: 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72  op+1); VdbeCover
be90: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
bea0: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
beb0: 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20  e(v, addrTop);. 
bec0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
bed0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  ;.#endif /* !def
bee0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
bef0: 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e  _TRIGGER) */.#en
bf00: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
bf10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
bf20: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
bf30: 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61  ndef NDEBUG.  ca
bf40: 73 65 20 50 72 61 67 54 79 70 5f 50 41 52 53 45  se PragTyp_PARSE
bf50: 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69  R_TRACE: {.    i
bf60: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
bf70: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
bf80: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
bf90: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73   0) ){.        s
bfa0: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
bfb0: 65 28 73 74 64 65 72 72 2c 20 22 70 61 72 73 65  e(stderr, "parse
bfc0: 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  r: ");.      }el
bfd0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
bfe0: 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 30  te3ParserTrace(0
bff0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 0);.      }.  
c000: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
c010: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65  .#endif..  /* Re
c020: 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45  install the LIKE
c030: 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69   and GLOB functi
c040: 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e  ons.  The varian
c050: 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75  t of LIKE.  ** u
c060: 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65  sed will be case
c070: 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f   sensitive or no
c080: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  t depending on t
c090: 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63  he RHS..  */.  c
c0a0: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 53 45  ase PragTyp_CASE
c0b0: 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a  _SENSITIVE_LIKE:
c0c0: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
c0d0: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
c0e0: 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
c0f0: 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69  nctions(db, sqli
c100: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
c110: 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d  ight, 0));.    }
c120: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23  .  }.  break;..#
c130: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e  ifndef SQLITE_IN
c140: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
c150: 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65  ROR_MAX.# define
c160: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
c170: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
c180: 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69  X 100.#endif..#i
c190: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c1a0: 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
c1b0: 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71  K.  /* Pragma "q
c1c0: 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 72  uick_check" is r
c1d0: 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f  educed version o
c1e0: 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74  f .  ** integrit
c1f0: 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64  y_check designed
c200: 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20   to detect most 
c210: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
c220: 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74  ion.  ** without
c230: 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65   most of the ove
c240: 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20  rhead of a full 
c250: 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e  integrity-check.
c260: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
c270: 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43  gTyp_INTEGRITY_C
c280: 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20  HECK: {.    int 
c290: 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72  i, j, addr, mxEr
c2a0: 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20  r;..    /* Code 
c2b0: 74 68 61 74 20 61 70 70 65 61 72 73 20 61 74 20  that appears at 
c2c0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
c2d0: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e 20  ntegrity check. 
c2e0: 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20   If no error.   
c2f0: 20 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61 76   ** messages hav
c300: 65 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65 64  e been generated
c310: 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74  , output OK.  Ot
c320: 68 65 72 77 69 73 65 20 6f 75 74 70 75 74 20 74  herwise output t
c330: 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72 20  he.    ** error 
c340: 6d 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20  message.    */. 
c350: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
c360: 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f  int iLn = VDBE_O
c370: 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b  FFSET_LINENO(2);
c380: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
c390: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64  t VdbeOpList end
c3a0: 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Code[] = {.     
c3b0: 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20 20 20   { OP_IfNeg,    
c3c0: 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20     1, 0,        
c3d0: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
c3e0: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
c3f0: 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20  8,     0, 3,    
c400: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20      0},    /* 1 
c410: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  */.      { OP_Re
c420: 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c  sultRow,   3, 1,
c430: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
c440: 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51 75  };..    int isQu
c450: 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54 6f  ick = (sqlite3To
c460: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
c470: 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  ='q');..    /* I
c480: 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d  f the PRAGMA com
c490: 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65 20  mand was of the 
c4a0: 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64 62  form "PRAGMA <db
c4b0: 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  >.integrity_chec
c4c0: 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20  k",.    ** then 
c4d0: 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 74 68  iDb is set to th
c4e0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
c4f0: 61 74 61 62 61 73 65 20 69 64 65 6e 74 69 66 69  atabase identifi
c500: 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20  ed by <db>..    
c510: 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  ** In this case,
c520: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f   the integrity o
c530: 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20 6f  f database iDb o
c540: 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65 64 20  nly is verified 
c550: 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44  by.    ** the VD
c560: 42 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f 77  BE created below
c570: 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
c580: 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
c590: 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69  e command was si
c5a0: 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e 74  mply "PRAGMA int
c5b0: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28 6f  egrity_check" (o
c5c0: 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d 41  r.    ** "PRAGMA
c5d0: 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20   quick_check"), 
c5e0: 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20  then iDb is set 
c5f0: 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63 61  to 0. In this ca
c600: 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20 20  se, set iDb.    
c610: 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20 74  ** to -1 here, t
c620: 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20  o indicate that 
c630: 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64 20  the VDBE should 
c640: 76 65 72 69 66 79 20 74 68 65 20 69 6e 74 65 67  verify the integ
c650: 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61  rity.    ** of a
c660: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
c670: 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61  bases.  */.    a
c680: 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29 3b  ssert( iDb>=0 );
c690: 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
c6a0: 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29  ==0 || pId2->z )
c6b0: 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  ;.    if( pId2->
c6c0: 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31 3b  z==0 ) iDb = -1;
c6d0: 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
c6e0: 69 7a 65 20 74 68 65 20 56 44 42 45 20 70 72 6f  ize the VDBE pro
c6f0: 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72  gram */.    pPar
c700: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20  se->nMem = 6;.  
c710: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c720: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
c730: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c740: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
c750: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e  OLNAME_NAME, "in
c760: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 20  tegrity_check", 
c770: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
c780: 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20  .    /* Set the 
c790: 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f  maximum error co
c7a0: 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72  unt */.    mxErr
c7b0: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
c7c0: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
c7d0: 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  MAX;.    if( zRi
c7e0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
c7f0: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
c800: 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20  ght, &mxErr);.  
c810: 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30      if( mxErr<=0
c820: 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72   ){.        mxEr
c830: 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  r = SQLITE_INTEG
c840: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
c850: 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _MAX;.      }.  
c860: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
c870: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c880: 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20  Integer, mxErr, 
c890: 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68  1);  /* reg[1] h
c8a0: 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74  olds errors left
c8b0: 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61   */..    /* Do a
c8c0: 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
c8d0: 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61  k on each databa
c8e0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66  se file */.    f
c8f0: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
c900: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48  b; i++){.      H
c910: 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20  ashElem *x;.    
c920: 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20    Hash *pTbls;. 
c930: 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30       int cnt = 0
c940: 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49  ;..      if( OMI
c950: 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31  T_TEMPDB && i==1
c960: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
c970: 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26     if( iDb>=0 &&
c980: 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e   i!=iDb ) contin
c990: 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74  ue;..      sqlit
c9a0: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
c9b0: 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20  ma(pParse, i);. 
c9c0: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
c9d0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
c9e0: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f   OP_IfPos, 1); /
c9f0: 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66  * Halt if out of
ca00: 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20   errors */.     
ca10: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
ca20: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
ca30: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
ca40: 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
ca50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
ca60: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
ca70: 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e  ..      /* Do an
ca80: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
ca90: 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20   of the B-Tree. 
caa0: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
cab0: 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e   Begin by fillin
cac0: 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33  g registers 2, 3
cad0: 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72  , ... with the r
cae0: 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72  oot pages number
caf0: 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61  s.      ** for a
cb00: 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ll tables and in
cb10: 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74  dices in the dat
cb20: 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a  abase..      */.
cb30: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
cb40: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
cb50: 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29  Held(db, i, 0) )
cb60: 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20  ;.      pTbls = 
cb70: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68  &db->aDb[i].pSch
cb80: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20  ema->tblHash;.  
cb90: 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65      for(x=sqlite
cba0: 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29  HashFirst(pTbls)
cbb0: 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ; x; x=sqliteHas
cbc0: 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
cbd0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
cbe0: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
cbf0: 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
cc00: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20  x *pIdx;.       
cc10: 20 69 66 28 20 48 61 73 52 6f 77 69 64 28 70 54   if( HasRowid(pT
cc20: 61 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ab) ){.         
cc30: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cc40: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
cc50: 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b  , pTab->tnum, 2+
cc60: 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  cnt);.          
cc70: 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20  VdbeComment((v, 
cc80: 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  "%s", pTab->zNam
cc90: 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63  e));.          c
cca0: 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
ccb0: 20 20 20 20 20 20 20 20 66 6f 72 28 70 49 64 78          for(pIdx
ccc0: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
ccd0: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
cce0: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
ccf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cd00: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
cd10: 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32  r, pIdx->tnum, 2
cd20: 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  +cnt);.         
cd30: 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c   VdbeComment((v,
cd40: 20 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e 61   "%s", pIdx->zNa
cd50: 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  me));.          
cd60: 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  cnt++;.        }
cd70: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
cd80: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66  /* Make sure suf
cd90: 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f  ficient number o
cda0: 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76 65  f registers have
cdb0: 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
cdc0: 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  */.      pParse-
cdd0: 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61  >nMem = MAX( pPa
cde0: 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38  rse->nMem, cnt+8
cdf0: 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f   );..      /* Do
ce00: 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65   the b-tree inte
ce10: 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a  grity checks */.
ce20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ce30: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e  eAddOp3(v, OP_In
ce40: 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e  tegrityCk, 2, cn
ce50: 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  t, 1);.      sql
ce60: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35  ite3VdbeChangeP5
ce70: 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20 20  (v, (u8)i);.    
ce80: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
ce90: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
cea0: 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62  _IsNull, 2); Vdb
ceb0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
cec0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ced0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
cee0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20  ng8, 0, 3, 0,.  
cef0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50         sqlite3MP
cf00: 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69  rintf(db, "*** i
cf10: 6e 20 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a  n database %s **
cf20: 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  *\n", db->aDb[i]
cf30: 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20  .zName),.       
cf40: 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20    P4_DYNAMIC);. 
cf50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cf60: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76  AddOp3(v, OP_Mov
cf70: 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20  e, 2, 4, 1);.   
cf80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cf90: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
cfa0: 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20  t, 4, 3, 2);.   
cfb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cfc0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
cfd0: 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20  tRow, 2, 1);.   
cfe0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
cff0: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
d000: 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  ..      /* Make 
d010: 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64  sure all the ind
d020: 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75  ices are constru
d030: 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  cted correctly..
d040: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66        */.      f
d050: 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46  or(x=sqliteHashF
d060: 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26  irst(pTbls); x &
d070: 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71  & !isQuick; x=sq
d080: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29  liteHashNext(x))
d090: 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20  {.        Table 
d0a0: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
d0b0: 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20  shData(x);.     
d0c0: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20     Index *pIdx, 
d0d0: 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e  *pPk;.        In
d0e0: 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b  dex *pPrior = 0;
d0f0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f  .        int loo
d100: 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e  pTop;.        in
d110: 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64 78  t iDataCur, iIdx
d120: 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  Cur;.        int
d130: 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20   r1 = -1;..     
d140: 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e     if( pTab->pIn
d150: 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  dex==0 ) continu
d160: 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d  e;.        pPk =
d170: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
d180: 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69  ? 0 : sqlite3Pri
d190: 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61  maryKeyIndex(pTa
d1a0: 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72  b);.        addr
d1b0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
d1c0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
d1d0: 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69  , 1);  /* Stop i
d1e0: 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20  f out of errors 
d1f0: 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 43  */.        VdbeC
d200: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
d210: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d220: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
d230: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
d240: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
d250: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
d260: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
d270: 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61  prCacheClear(pPa
d280: 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71  rse);.        sq
d290: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
d2a0: 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c  dIndices(pParse,
d2b0: 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65   pTab, OP_OpenRe
d2c0: 61 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ad,.            
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2e0: 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69 44         1, 0, &iD
d2f0: 61 74 61 43 75 72 2c 20 26 69 49 64 78 43 75 72  ataCur, &iIdxCur
d300: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d310: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d320: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37  OP_Integer, 0, 7
d330: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
d340: 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
d350: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
d360: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
d370: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  ++){.          s
d380: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d390: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
d3a0: 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65  0, 8+j); /* inde
d3b0: 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65  x entries counte
d3c0: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  r */.        }. 
d3d0: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e         pParse->n
d3e0: 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65  Mem = MAX(pParse
d3f0: 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20  ->nMem, 8+j);.  
d400: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d410: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
d420: 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20  wind, iDataCur, 
d430: 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  0); VdbeCoverage
d440: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f  (v);.        loo
d450: 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64  pTop = sqlite3Vd
d460: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
d470: 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20  ddImm, 7, 1);.  
d480: 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20        /* Verify 
d490: 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c  that all NOT NUL
d4a0: 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79  L columns really
d4b0: 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f   are NOT NULL */
d4c0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
d4d0: 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20  ; j<pTab->nCol; 
d4e0: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
d4f0: 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20  char *zErr;.    
d500: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20        int jmp2, 
d510: 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp3;.          
d520: 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b  if( j==pTab->iPK
d530: 65 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  ey ) continue;. 
d540: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61           if( pTa
d550: 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75  b->aCol[j].notNu
d560: 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ll==0 ) continue
d570: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d580: 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
d590: 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70  lumnOfTable(v, p
d5a0: 54 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a  Tab, iDataCur, j
d5b0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
d5c0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
d5d0: 65 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59  eP5(v, OPFLAG_TY
d5e0: 50 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20  PEOFARG);.      
d5f0: 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74      jmp2 = sqlit
d600: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
d610: 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20  OP_NotNull, 3); 
d620: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d630: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d640: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d650: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
d660: 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20  ); /* Decrement 
d670: 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20  error limit */. 
d680: 20 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20           zErr = 
d690: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
d6a0: 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69  b, "NULL value i
d6b0: 6e 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e  n %s.%s", pTab->
d6c0: 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6e0: 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b       pTab->aCol[
d6f0: 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  j].zName);.     
d700: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d710: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
d720: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a  ing8, 0, 3, 0, z
d730: 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29  Err, P4_DYNAMIC)
d740: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d750: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d760: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33   OP_ResultRow, 3
d770: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
d780: 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp3 = sqlite3Vd
d790: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
d7a0: 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f  fPos, 1); VdbeCo
d7b0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d7c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d7d0: 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c  AddOp0(v, OP_Hal
d7e0: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
d7f0: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
d800: 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20  e(v, jmp2);.    
d810: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d820: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
d830: 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  3);.        }.  
d840: 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74        /* Validat
d850: 65 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  e index entries 
d860: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
d870: 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  row */.        f
d880: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
d890: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
d8a0: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
d8b0: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
d8c0: 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70     int jmp2, jmp
d8d0: 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20  3, jmp4, jmp5;. 
d8e0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55           int ckU
d8f0: 6e 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62  niq = sqlite3Vdb
d900: 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
d910: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b           if( pPk
d920: 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75  ==pIdx ) continu
d930: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20  e;.          r1 
d940: 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  = sqlite3Generat
d950: 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65  eIndexKey(pParse
d960: 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43 75 72  , pIdx, iDataCur
d970: 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20  , 0, 0, &jmp3,. 
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9a0: 20 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31        pPrior, r1
d9b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 72  );.          pPr
d9c0: 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20  ior = pIdx;.    
d9d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d9e0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
d9f0: 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20  dImm, 8+j, 1);  
da00: 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74  /* increment ent
da10: 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20  ry count */.    
da20: 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20        /* Verify 
da30: 74 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e  that an index en
da40: 74 72 79 20 65 78 69 73 74 73 20 66 6f 72 20 74  try exists for t
da50: 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
da60: 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20   row */.        
da70: 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33    jmp2 = sqlite3
da80: 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c  VdbeAddOp4Int(v,
da90: 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43   OP_Found, iIdxC
daa0: 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31  ur+j, ckUniq, r1
dab0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
dac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dad0: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43          pIdx->nC
dae0: 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65  olumn); VdbeCove
daf0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
db00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
db10: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
db20: 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65  m, 1, -1); /* De
db30: 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69  crement error li
db40: 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  mit */.         
db50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
db60: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
db70: 2c 20 30 2c 20 33 2c 20 30 2c 20 22 72 6f 77 20  , 0, 3, 0, "row 
db80: 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
db90: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
dba0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
dbb0: 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33  _Concat, 7, 3, 3
dbc0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
dbd0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
dbe0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
dbf0: 20 34 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20   4, 0, .        
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc10: 20 20 20 20 22 20 6d 69 73 73 69 6e 67 20 66 72      " missing fr
dc20: 6f 6d 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53  om index ", P4_S
dc30: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
dc40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
dc50: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
dc60: 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 4, 3, 3);.    
dc70: 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c        jmp5 = sql
dc80: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
dc90: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
dca0: 20 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   4, 0,.         
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcc0: 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
dcd0: 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49  zName, P4_TRANSI
dce0: 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ENT);.          
dcf0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
dd00: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
dd10: 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20  4, 3, 3);.      
dd20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
dd30: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
dd40: 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20  ltRow, 3, 1);.  
dd50: 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73          jmp4 = s
dd60: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
dd70: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
dd80: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
dd90: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
dda0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76  ite3VdbeAddOp0(v
ddb0: 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20  , OP_Halt);.    
ddc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ddd0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
dde0: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  2);.          /*
ddf0: 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64 65   For UNIQUE inde
de00: 78 65 73 2c 20 76 65 72 69 66 79 20 74 68 61 74  xes, verify that
de10: 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20   only one entry 
de20: 65 78 69 73 74 73 20 77 69 74 68 20 74 68 65 0a  exists with the.
de30: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72            ** cur
de40: 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65  rent key.  The e
de50: 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65 20 69  ntry is unique i
de60: 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e  f (1) any column
de70: 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   is NULL.       
de80: 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68 65     ** or (2) the
de90: 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73 20   next entry has 
dea0: 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79 20  a different key 
deb0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
dec0: 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70   IsUniqueIndex(p
ded0: 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Idx) ){.        
dee0: 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d      int uniqOk =
def0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
df00: 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
df10: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a        int jmp6;.
df20: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
df30: 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  kk;.            
df40: 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64  for(kk=0; kk<pId
df50: 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b  x->nKeyCol; kk++
df60: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
df70: 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64 78   int iCol = pIdx
df80: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a  ->aiColumn[kk];.
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
dfa0: 73 65 72 74 28 20 69 43 6f 6c 3e 3d 30 20 26 26  sert( iCol>=0 &&
dfb0: 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c   iCol<pTab->nCol
dfc0: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   );.            
dfd0: 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c    if( pTab->aCol
dfe0: 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20 29  [iCol].notNull )
dff0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
e000: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e010: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e020: 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c 20  _IsNull, r1+kk, 
e030: 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20  uniqOk);.       
e040: 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
e050: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
e060: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
e070: 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65 33    jmp6 = sqlite3
e080: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
e090: 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b 6a  _Next, iIdxCur+j
e0a0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
e0b0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
e0c0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e0d0: 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c  2(v, OP_Goto, 0,
e0e0: 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20   uniqOk);.      
e0f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e100: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
e110: 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  6);.            
e120: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e130: 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47 54  4Int(v, OP_IdxGT
e140: 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e 69  , iIdxCur+j, uni
e150: 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20 20  qOk, r1,.       
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e170: 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
e180: 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65 43 6f  nKeyCol); VdbeCo
e190: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
e1a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e1b0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
e1c0: 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f  ddImm, 1, -1); /
e1d0: 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f  * Decrement erro
e1e0: 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20  r limit */.     
e1f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e200: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
e210: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
e220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
e240: 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79  non-unique entry
e250: 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f   in index ", P4_
e260: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
e270: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e280: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74  AddOp2(v, OP_Got
e290: 6f 2c 20 30 2c 20 6a 6d 70 35 29 3b 0a 20 20 20  o, 0, jmp5);.   
e2a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e2b0: 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c  VdbeResolveLabel
e2c0: 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20  (v, uniqOk);.   
e2d0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e2e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
e2f0: 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b  mpHere(v, jmp4);
e300: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
e310: 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
e320: 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d  Label(pParse, jm
e330: 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p3);.        }. 
e340: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e350: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e  beAddOp2(v, OP_N
e360: 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c  ext, iDataCur, l
e370: 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76  oopTop); VdbeCov
e380: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
e390: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
e3a0: 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70  pHere(v, loopTop
e3b0: 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  -1);.#ifndef SQL
e3c0: 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
e3d0: 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69  UNT.        sqli
e3e0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
e3f0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
e400: 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20  2, 0, .         
e410: 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6f              "wro
e420: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
e430: 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53  in index ", P4_S
e440: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
e450: 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
e460: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
e470: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
e480: 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
e490: 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64      if( pPk==pId
e4a0: 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  x ) continue;.  
e4b0: 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
e4c0: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
e4d0: 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20  tAddr(v);.      
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 49 66 50 6f  ddOp2(v, OP_IfPo
e500: 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20 56  s, 1, addr+2); V
e510: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
e520: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e530: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e540: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
e550: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e560: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e570: 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72 2b  _Count, iIdxCur+
e580: 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 3);.         
e590: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e5a0: 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a  p3(v, OP_Eq, 8+j
e5b0: 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56 64  , addr+8, 3); Vd
e5c0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
e5d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e5e0: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
e5f0: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b  SQLITE_NOTNULL);
e600: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
e610: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e620: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
e630: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
e640: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
e650: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
e660: 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61   3, 0, pIdx->zNa
e670: 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54  me, P4_TRANSIENT
e680: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
e690: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
e6a0: 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20  , OP_Concat, 3, 
e6b0: 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 20  2, 7);.         
e6c0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e6d0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
e6e0: 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 7, 1);.     
e6f0: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
e700: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
e710: 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d  COUNT */.      }
e720: 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64 72   .    }.    addr
e730: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
e740: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
e750: 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65  Size(endCode), e
e760: 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20  ndCode, iLn);.  
e770: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
e780: 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2c 20 2d  ngeP3(v, addr, -
e790: 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71 6c 69  mxErr);.    sqli
e7a0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
e7b0: 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 73 71  v, addr);.    sq
e7c0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
e7d0: 34 28 76 2c 20 61 64 64 72 2b 31 2c 20 22 6f 6b  4(v, addr+1, "ok
e7e0: 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
e7f0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
e800: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
e810: 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
e820: 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  K */..#ifndef SQ
e830: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
e840: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
e850: 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a  MA encoding.  **
e860: 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69     PRAGMA encodi
e870: 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75 74  ng = "utf-8"|"ut
e880: 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65 22  f-16"|"utf-16le"
e890: 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a 2a  |"utf-16be".  **
e8a0: 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69 72  .  ** In its fir
e8b0: 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70 72  st form, this pr
e8c0: 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68 65  agma returns the
e8d0: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65   encoding of the
e8e0: 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61 62   main.  ** datab
e8f0: 61 73 65 2e 20 49 66 20 74 68 65 20 64 61 74 61  ase. If the data
e900: 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69 74  base is not init
e910: 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20 69  ialized, it is i
e920: 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a  nitialized now..
e930: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65    **.  ** The se
e940: 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 69  cond form of thi
e950: 73 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e 6f  s pragma is a no
e960: 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e 20  -op if the main 
e970: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20  database file.  
e980: 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65 61  ** has not alrea
e990: 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  dy been initiali
e9a0: 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  zed. In this cas
e9b0: 65 20 69 74 20 73 65 74 73 20 74 68 65 20 64 65  e it sets the de
e9c0: 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f 64  fault.  ** encod
e9d0: 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ing that will be
e9e0: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61   used for the ma
e9f0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
ea00: 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a 20   if a new file. 
ea10: 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e 20   ** is created. 
ea20: 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d  If an existing m
ea30: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
ea40: 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68 65  e is opened, the
ea50: 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75  n the.  ** defau
ea60: 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  lt text encoding
ea70: 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e   for the existin
ea80: 67 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73  g database is us
ea90: 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  ed..  ** .  ** I
eaa0: 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77 20  n all cases new 
eab0: 64 61 74 61 62 61 73 65 73 20 63 72 65 61 74 65  databases create
eac0: 64 20 75 73 69 6e 67 20 74 68 65 20 41 54 54 41  d using the ATTA
ead0: 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a 20  CH command are. 
eae0: 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20 75   ** created to u
eaf0: 73 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61  se the same defa
eb00: 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ult text encodin
eb10: 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 61  g as the main da
eb20: 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a 20  tabase. If.  ** 
eb30: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
eb40: 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 69  e has not been i
eb50: 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f 6f  nitialized and/o
eb60: 72 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 41  r created when A
eb70: 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65 78  TTACH.  ** is ex
eb80: 65 63 75 74 65 64 2c 20 74 68 69 73 20 69 73 20  ecuted, this is 
eb90: 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20  done before the 
eba0: 41 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f 6e  ATTACH operation
ebb0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74  ..  **.  ** In t
ebc0: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74  he second form t
ebd0: 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20  his pragma sets 
ebe0: 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  the text encodin
ebf0: 67 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 0a  g to be used in.
ec00: 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61 73    ** new databas
ec10: 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20  e files created 
ec20: 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62  using this datab
ec30: 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20 69  ase handle. It i
ec40: 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65 66  s only.  ** usef
ec50: 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69 6d  ul if invoked im
ec60: 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
ec70: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
ec80: 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  e i.  */.  case 
ec90: 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e 47  PragTyp_ENCODING
eca0: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
ecb0: 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e  onst struct EncN
ecc0: 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61 72  ame {.      char
ecd0: 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 75   *zName;.      u
ece0: 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e 63  8 enc;.    } enc
ecf0: 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20 20  names[] = {.    
ed00: 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20 20    { "UTF8",     
ed10: 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20  SQLITE_UTF8     
ed20: 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55     },.      { "U
ed30: 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54 45  TF-8",    SQLITE
ed40: 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 20  _UTF8        }, 
ed50: 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
ed60: 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20 20  ent [1] */.     
ed70: 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20 53   { "UTF-16le", S
ed80: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20  QLITE_UTF16LE   
ed90: 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
eda0: 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a   element [2] */.
edb0: 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 62        { "UTF-16b
edc0: 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  e", SQLITE_UTF16
edd0: 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75  BE     },  /* Mu
ede0: 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 33  st be element [3
edf0: 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
ee00: 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45 5f  F16le",  SQLITE_
ee10: 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20  UTF16LE     },. 
ee20: 20 20 20 20 20 7b 20 22 55 54 46 31 36 62 65 22       { "UTF16be"
ee30: 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  ,  SQLITE_UTF16B
ee40: 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b  E     },.      {
ee50: 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20 20   "UTF-16",   0  
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee70: 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  }, /* SQLITE_UTF
ee80: 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20  16NATIVE */.    
ee90: 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20 20    { "UTF16",    
eea0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
eeb0: 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f     }, /* SQLITE_
eec0: 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20  UTF16NATIVE */. 
eed0: 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20 20       { 0, 0 }.  
eee0: 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20 73    };.    const s
eef0: 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70  truct EncName *p
ef00: 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  Enc;.    if( !zR
ef10: 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22 50  ight ){    /* "P
ef20: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22 20  RAGMA encoding" 
ef30: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  */.      if( sql
ef40: 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70  ite3ReadSchema(p
ef50: 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72  Parse) ) goto pr
ef60: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20  agma_out;.      
ef70: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
ef80: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
ef90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
efa0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
efb0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 65 6e  OLNAME_NAME, "en
efc0: 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54 45 5f  coding", SQLITE_
efd0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
efe0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
eff0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
f000: 30 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73  0, 1);.      ass
f010: 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51  ert( encnames[SQ
f020: 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d  LITE_UTF8].enc==
f030: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20  SQLITE_UTF8 );. 
f040: 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63       assert( enc
f050: 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46  names[SQLITE_UTF
f060: 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  16LE].enc==SQLIT
f070: 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20  E_UTF16LE );.   
f080: 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61     assert( encna
f090: 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36  mes[SQLITE_UTF16
f0a0: 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  BE].enc==SQLITE_
f0b0: 55 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20  UTF16BE );.     
f0c0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
f0d0: 67 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e 63 6e  geP4(v, -1, encn
f0e0: 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d  ames[ENC(pParse-
f0f0: 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f  >db)].zName, P4_
f100: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
f110: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f120: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
f130: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 65 6c  , 1, 1);.    }el
f140: 73 65 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  se{             
f150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50             /* "P
f160: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d  RAGMA encoding =
f170: 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f   XXX" */.      /
f180: 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68  * Only change th
f190: 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74  e value of sqlit
f1a0: 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61 74  e.enc if the dat
f1b0: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20  abase handle is 
f1c0: 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69  not.      ** ini
f1d0: 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65  tialized. If the
f1e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 65   main database e
f1f0: 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73  xists, the new s
f200: 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a  qlite.enc value.
f210: 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65        ** will be
f220: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68 65   overwritten whe
f230: 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20  n the schema is 
f240: 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20  next loaded. If 
f250: 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20  it does not.    
f260: 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69    ** already exi
f270: 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20  sts, it will be 
f280: 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74  created to use t
f290: 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20  he new encoding 
f2a0: 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a  value..      */.
f2b0: 20 20 20 20 20 20 69 66 28 20 0a 20 20 20 20 20        if( .     
f2c0: 20 20 20 21 28 44 62 48 61 73 50 72 6f 70 65 72     !(DbHasProper
f2d0: 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68  ty(db, 0, DB_Sch
f2e0: 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a  emaLoaded)) || .
f2f0: 20 20 20 20 20 20 20 20 44 62 48 61 73 50 72 6f          DbHasPro
f300: 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f  perty(db, 0, DB_
f310: 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b  Empty) .      ){
f320: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e  .        for(pEn
f330: 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20  c=&encnames[0]; 
f340: 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e  pEnc->zName; pEn
f350: 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  c++){.          
f360: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
f370: 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45  rICmp(zRight, pE
f380: 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20  nc->zName) ){.  
f390: 20 20 20 20 20 20 20 20 20 20 53 43 48 45 4d 41            SCHEMA
f3a0: 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e 43 28 64  _ENC(db) = ENC(d
f3b0: 62 29 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20  b) =.           
f3c0: 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20 3f       pEnc->enc ?
f3d0: 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c   pEnc->enc : SQL
f3e0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b  ITE_UTF16NATIVE;
f3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
f400: 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ak;.          }.
f410: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
f420: 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61    if( !pEnc->zNa
f430: 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  me ){.          
f440: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
f450: 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f  pParse, "unsuppo
f460: 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25  rted encoding: %
f470: 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20  s", zRight);.   
f480: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
f490: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
f4a0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
f4b0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
f4c0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
f4d0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
f4e0: 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f  SION_PRAGMAS.  /
f4f0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
f500: 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d  [database.]schem
f510: 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20  a_version.  **  
f520: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
f530: 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  e.]schema_versio
f540: 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20  n = <integer>.  
f550: 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
f560: 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72   [database.]user
f570: 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  _version.  **   
f580: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
f590: 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  .]user_version =
f5a0: 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
f5b0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
f5c0: 61 74 61 62 61 73 65 2e 5d 66 72 65 65 6c 69 73  atabase.]freelis
f5d0: 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74 65 67  t_count = <integ
f5e0: 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  er>.  **.  **   
f5f0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
f600: 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  .]application_id
f610: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
f620: 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63  database.]applic
f630: 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65  ation_id = <inte
f640: 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ger>.  **.  ** T
f650: 68 65 20 70 72 61 67 6d 61 27 73 20 73 63 68 65  he pragma's sche
f660: 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 75  ma_version and u
f670: 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65 20  ser_version are 
f680: 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20 67  used to set or g
f690: 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  et.  ** the valu
f6a0: 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2d  e of the schema-
f6b0: 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72  version and user
f6c0: 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65 63  -version, respec
f6d0: 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a  tively. Both.  *
f6e0: 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  * the schema-ver
f6f0: 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73 65  sion and the use
f700: 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33 32  r-version are 32
f710: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
f720: 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64  gers.  ** stored
f730: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
f740: 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20   header..  **.  
f750: 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63 6f  ** The schema-co
f760: 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79 20  okie is usually 
f770: 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 64  only manipulated
f780: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
f790: 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69  QLite. It.  ** i
f7a0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
f7b0: 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65 72   SQLite whenever
f7c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
f7d0: 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65 64  hema is modified
f7e0: 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74 69   (by.  ** creati
f7f0: 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20 61  ng or dropping a
f800: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 29   table or index)
f810: 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72  . The schema ver
f820: 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 0a  sion is used by.
f830: 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63 68    ** SQLite each
f840: 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73   time a query is
f850: 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73   executed to ens
f860: 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ure that the int
f870: 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a  ernal cache.  **
f880: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 75   of the schema u
f890: 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69  sed when compili
f8a0: 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79  ng the SQL query
f8b0: 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68   matches the sch
f8c0: 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20  ema of.  ** the 
f8d0: 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73 74  database against
f8e0: 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69   which the compi
f8f0: 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63 74  led query is act
f900: 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a  ually executed..
f910: 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67 20    ** Subverting 
f920: 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 62  this mechanism b
f930: 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41 20  y using "PRAGMA 
f940: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20  schema_version" 
f950: 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74  to modify.  ** t
f960: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
f970: 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79  n is potentially
f980: 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d   dangerous and m
f990: 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67 72  ay lead to progr
f9a0: 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73 20  am.  ** crashes 
f9b0: 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  or database corr
f9c0: 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74 68  uption. Use with
f9d0: 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20   caution!.  **. 
f9e0: 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65 72   ** The user-ver
f9f0: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64  sion is not used
fa00: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
fa10: 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62 65  QLite. It may be
fa20: 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61 70   used by.  ** ap
fa30: 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 61  plications for a
fa40: 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f  ny purpose..  */
fa50: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
fa60: 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a  HEADER_VALUE: {.
fa70: 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 20      int iCookie 
fa80: 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b  = pPragma->iArg;
fa90: 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6f 6b 69    /* Which cooki
faa0: 65 20 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69  e to read or wri
fab0: 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  te */.    sqlite
fac0: 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
fad0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , iDb);.    if( 
fae0: 7a 52 69 67 68 74 20 26 26 20 28 70 50 72 61 67  zRight && (pPrag
faf0: 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20  ma->mPragFlag & 
fb00: 50 72 61 67 46 6c 61 67 5f 52 65 61 64 4f 6e 6c  PragFlag_ReadOnl
fb10: 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  y)==0 ){.      /
fb20: 2a 20 57 72 69 74 65 20 74 68 65 20 73 70 65 63  * Write the spec
fb30: 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c  ified cookie val
fb40: 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74  ue */.      stat
fb50: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
fb60: 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20  ist setCookie[] 
fb70: 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
fb80: 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
fb90: 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
fba0: 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 0 */.        
fbb0: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
fbc0: 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c       0,  1,  0},
fbd0: 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20      /* 1 */.    
fbe0: 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b      { OP_SetCook
fbf0: 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20  ie,      0,  0, 
fc00: 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a   1},    /* 2 */.
fc10: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69        };.      i
fc20: 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65  nt addr = sqlite
fc30: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
fc40: 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43  , ArraySize(setC
fc50: 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69  ookie), setCooki
fc60: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
fc70: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
fc80: 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
fc90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fca0: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
fcb0: 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  r+1, sqlite3Atoi
fcc0: 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20  (zRight));.     
fcd0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
fce0: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c 20  geP1(v, addr+2, 
fcf0: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
fd00: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
fd10: 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b  v, addr+2, iCook
fd20: 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ie);.    }else{.
fd30: 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68        /* Read th
fd40: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b  e specified cook
fd50: 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ie value */.    
fd60: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
fd70: 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f  dbeOpList readCo
fd80: 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  okie[] = {.     
fd90: 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
fda0: 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20  ion,     0,  0, 
fdb0: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
fdc0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61          { OP_Rea
fdd0: 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  dCookie,      0,
fde0: 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
fdf0: 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  1 */.        { O
fe00: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20  P_ResultRow,    
fe10: 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20     1,  1,  0}.  
fe20: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
fe30: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
fe40: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
fe50: 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f  ArraySize(readCo
fe60: 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69  okie), readCooki
fe70: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
fe80: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
fe90: 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
fea0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
feb0: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
fec0: 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+1, iDb);.     
fed0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
fee0: 67 65 50 33 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP3(v, addr+1, 
fef0: 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20  iCookie);.      
ff00: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
ff10: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
ff20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
ff30: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
ff40: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65  OLNAME_NAME, zLe
ff50: 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  ft, SQLITE_TRANS
ff60: 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  IENT);.    }.  }
ff70: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
ff80: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
ff90: 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
ffa0: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
ffb0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
ffc0: 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
ffd0: 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  GS.  /*.  **   P
ffe0: 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70  RAGMA compile_op
fff0: 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tions.  **.  ** 
10000 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73  Return the names
10010 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d   of all compile-
10020 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65  time options use
10030 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c  d in this build,
10040 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e  .  ** one option
10050 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20   per row..  */. 
10060 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f   case PragTyp_CO
10070 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b  MPILE_OPTIONS: {
10080 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a  .    int i = 0;.
10090 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
100a0 7a 4f 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  zOpt;.    sqlite
100b0 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
100c0 76 2c 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 1);.    pPars
100d0 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20  e->nMem = 1;.   
100e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
100f0 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
10100 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70  NAME_NAME, "comp
10110 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c  ile_option", SQL
10120 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
10130 20 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20   while( (zOpt = 
10140 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
10150 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21  ption_get(i++))!
10160 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
10170 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
10180 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
10190 31 2c 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a  1, 0, zOpt, 0);.
101a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
101b0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
101c0 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
101d0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
101e0 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
101f0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
10200 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a  OPTION_DIAGS */.
10210 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10220 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20  OMIT_WAL.  /*.  
10230 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
10240 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b  abase.]wal_check
10250 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c  point = passive|
10260 66 75 6c 6c 7c 72 65 73 74 61 72 74 7c 74 72 75  full|restart|tru
10270 6e 63 61 74 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ncate.  **.  ** 
10280 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20 64  Checkpoint the d
10290 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20  atabase..  */.  
102a0 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c  case PragTyp_WAL
102b0 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20  _CHECKPOINT: {. 
102c0 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49     int iBt = (pI
102d0 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45  d2->z?iDb:SQLITE
102e0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a  _MAX_ATTACHED);.
102f0 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
10300 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
10310 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69  T_PASSIVE;.    i
10320 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
10330 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
10340 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66  rICmp(zRight, "f
10350 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
10360 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
10370 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
10380 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  LL;.      }else 
10390 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
103a0 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74  mp(zRight, "rest
103b0 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  art")==0 ){.    
103c0 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
103d0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
103e0 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c  START;.      }el
103f0 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
10400 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 74  rICmp(zRight, "t
10410 72 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a  runcate")==0 ){.
10420 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
10430 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
10440 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20 20  T_TRUNCATE;.    
10450 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
10460 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
10470 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70  ols(v, 3);.    p
10480 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
10490 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
104a0 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
104b0 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
104c0 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54  busy", SQLITE_ST
104d0 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
104e0 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
104f0 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
10500 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49  AME, "log", SQLI
10510 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
10520 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
10530 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
10540 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b  AME_NAME, "check
10550 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45  pointed", SQLITE
10560 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73  _STATIC);..    s
10570 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
10580 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  (v, OP_Checkpoin
10590 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31  t, iBt, eMode, 1
105a0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
105b0 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
105c0 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
105d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
105e0 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
105f0 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
10600 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  oint.  **   PRAG
10610 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  MA wal_autocheck
10620 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  point = N.  **. 
10630 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20   ** Configure a 
10640 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10650 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  ion to automatic
10660 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20  ally checkpoint 
10670 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
10680 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69  after accumulati
10690 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74  ng N frames in t
106a0 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79  he log. Or query
106b0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
106c0 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e   value.  ** of N
106d0 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
106e0 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48  agTyp_WAL_AUTOCH
106f0 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20  ECKPOINT: {.    
10700 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
10710 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f      sqlite3_wal_
10720 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64  autocheckpoint(d
10730 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
10740 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
10750 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
10760 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f  nt(pParse, "wal_
10770 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c  autocheckpoint",
10780 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61   .       db->xWa
10790 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74  lCallback==sqlit
107a0 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
107b0 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53   ? .           S
107c0 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
107d0 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20  (db->pWalArg) : 
107e0 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
107f0 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
10800 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e  **  PRAGMA shrin
10810 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20  k_memory.  **.  
10820 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
10830 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35 2d 34 36  N-OF: R-23445-46
10840 31 30 39 20 54 68 69 73 20 70 72 61 67 6d 61 20  109 This pragma 
10850 63 61 75 73 65 73 20 74 68 65 20 64 61 74 61 62  causes the datab
10860 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74  ase.  ** connect
10870 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20 69 74 20  ion on which it 
10880 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 66 72  is invoked to fr
10890 65 65 20 75 70 20 61 73 20 6d 75 63 68 20 6d 65  ee up as much me
108a0 6d 6f 72 79 20 61 73 20 69 74 0a 20 20 2a 2a 20  mory as it.  ** 
108b0 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69 6e 67 20  can, by calling 
108c0 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61  sqlite3_db_relea
108d0 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a 20 20 2a  se_memory()..  *
108e0 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
108f0 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20  _SHRINK_MEMORY: 
10900 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  {.    sqlite3_db
10910 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
10920 64 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  db);.    break;.
10930 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
10940 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d   PRAGMA busy_tim
10950 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  eout.  **   PRAG
10960 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  MA busy_timeout 
10970 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61  = N.  **.  ** Ca
10980 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  ll sqlite3_busy_
10990 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20  timeout(db, N). 
109a0 20 52 65 74 75 72 6e 20 74 68 65 20 63 75 72 72   Return the curr
109b0 65 6e 74 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  ent timeout valu
109c0 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73  e.  ** if one is
109d0 20 73 65 74 2e 20 20 49 66 20 6e 6f 20 62 75 73   set.  If no bus
109e0 79 20 68 61 6e 64 6c 65 72 20 6f 72 20 61 20 64  y handler or a d
109f0 69 66 66 65 72 65 6e 74 20 62 75 73 79 20 68 61  ifferent busy ha
10a00 6e 64 6c 65 72 20 69 73 20 73 65 74 0a 20 20 2a  ndler is set.  *
10a10 2a 20 74 68 65 6e 20 30 20 69 73 20 72 65 74 75  * then 0 is retu
10a20 72 6e 65 64 2e 20 20 53 65 74 74 69 6e 67 20 74  rned.  Setting t
10a30 68 65 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  he busy_timeout 
10a40 74 6f 20 30 20 6f 72 20 6e 65 67 61 74 69 76 65  to 0 or negative
10a50 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 73 20 74  .  ** disables t
10a60 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f  he timeout..  */
10a70 0a 20 20 2f 2a 63 61 73 65 20 50 72 61 67 54 79  .  /*case PragTy
10a80 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f  p_BUSY_TIMEOUT*/
10a90 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
10aa0 61 73 73 65 72 74 28 20 70 50 72 61 67 6d 61 2d  assert( pPragma-
10ab0 3e 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67 54  >ePragTyp==PragT
10ac0 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 20  yp_BUSY_TIMEOUT 
10ad0 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
10ae0 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
10af0 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
10b00 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28  db, sqlite3Atoi(
10b10 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a  zRight));.    }.
10b20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
10b30 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 69 6d  Int(pParse, "tim
10b40 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79  eout",  db->busy
10b50 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72  Timeout);.    br
10b60 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
10b70 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66   **   PRAGMA sof
10b80 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a  t_heap_limit.  *
10b90 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f  *   PRAGMA soft_
10ba0 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20  heap_limit = N. 
10bb0 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45   **.  ** IMPLEME
10bc0 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36  NTATION-OF: R-26
10bd0 33 34 33 2d 34 35 39 33 30 20 54 68 69 73 20 70  343-45930 This p
10be0 72 61 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74 68  ragma invokes th
10bf0 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73  e.  ** sqlite3_s
10c00 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
10c10 28 29 20 69 6e 74 65 72 66 61 63 65 20 77 69 74  () interface wit
10c20 68 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 4e  h the argument N
10c30 2c 20 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20 73  , if N is.  ** s
10c40 70 65 63 69 66 69 65 64 20 61 6e 64 20 69 73 20  pecified and is 
10c50 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69  a non-negative i
10c60 6e 74 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d 50  nteger..  ** IMP
10c70 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
10c80 52 2d 36 34 34 35 31 2d 30 37 31 36 33 20 54 68  R-64451-07163 Th
10c90 65 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  e soft_heap_limi
10ca0 74 20 70 72 61 67 6d 61 20 61 6c 77 61 79 73 0a  t pragma always.
10cb0 20 20 2a 2a 20 72 65 74 75 72 6e 73 20 74 68 65    ** returns the
10cc0 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 74 68   same integer th
10cd0 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
10ce0 72 6e 65 64 20 62 79 20 74 68 65 0a 20 20 2a 2a  rned by the.  **
10cf0 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
10d00 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20 43  ap_limit64(-1) C
10d10 2d 6c 61 6e 67 75 61 67 65 20 66 75 6e 63 74 69  -language functi
10d20 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  on..  */.  case 
10d30 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41  PragTyp_SOFT_HEA
10d40 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73  P_LIMIT: {.    s
10d50 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a  qlite3_int64 N;.
10d60 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26      if( zRight &
10d70 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  & sqlite3DecOrHe
10d80 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26  xToI64(zRight, &
10d90 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  N)==SQLITE_OK ){
10da0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
10db0 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
10dc0 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  (N);.    }.    r
10dd0 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
10de0 50 61 72 73 65 2c 20 22 73 6f 66 74 5f 68 65 61  Parse, "soft_hea
10df0 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69 74  p_limit",  sqlit
10e00 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
10e10 69 74 36 34 28 2d 31 29 29 3b 0a 20 20 20 20 62  it64(-1));.    b
10e20 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
10e30 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68    **   PRAGMA th
10e40 72 65 61 64 73 0a 20 20 2a 2a 20 20 20 50 52 41  reads.  **   PRA
10e50 47 4d 41 20 74 68 72 65 61 64 73 20 3d 20 4e 0a  GMA threads = N.
10e60 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67    **.  ** Config
10e70 75 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ure the maximum 
10e80 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65 72  number of worker
10e90 20 74 68 72 65 61 64 73 2e 20 20 52 65 74 75 72   threads.  Retur
10ea0 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20 6d  n the new.  ** m
10eb0 61 78 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d 69  aximum, which mi
10ec0 67 68 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e  ght be less than
10ed0 20 72 65 71 75 65 73 74 65 64 2e 0a 20 20 2a 2f   requested..  */
10ee0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10ef0 54 48 52 45 41 44 53 3a 20 7b 0a 20 20 20 20 73  THREADS: {.    s
10f00 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a  qlite3_int64 N;.
10f10 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 0a 20      if( zRight. 
10f20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 44 65      && sqlite3De
10f30 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67  cOrHexToI64(zRig
10f40 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f  ht, &N)==SQLITE_
10f50 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30 0a  OK.     && N>=0.
10f60 20 20 20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c      ){.      sql
10f70 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53  ite3_limit(db, S
10f80 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
10f90 45 52 5f 54 48 52 45 41 44 53 2c 20 28 69 6e 74  ER_THREADS, (int
10fa0 29 28 4e 26 30 78 37 66 66 66 66 66 66 66 29 29  )(N&0x7fffffff))
10fb0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
10fc0 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
10fd0 73 65 2c 20 22 74 68 72 65 61 64 73 22 2c 0a 20  se, "threads",. 
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ff0 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
11000 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49  (db, SQLITE_LIMI
11010 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
11020 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61  , -1));.    brea
11030 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69  k;.  }..#if defi
11040 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
11050 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
11060 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20  ITE_TEST).  /*. 
11070 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63   ** Report the c
11080 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20  urrent state of 
11090 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c  file logs for al
110a0 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f  l databases.  */
110b0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
110c0 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20  LOCK_STATUS: {. 
110d0 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
110e0 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f  char *const azLo
110f0 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  ckName[] = {.   
11100 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22     "unlocked", "
11110 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76  shared", "reserv
11120 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20  ed", "pending", 
11130 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20  "exclusive".    
11140 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
11150 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
11160 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20  NumCols(v, 2);. 
11170 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
11180 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 2;.    sqlite3
11190 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
111a0 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
111b0 45 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20 53  E, "database", S
111c0 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
111d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
111e0 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
111f0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74  OLNAME_NAME, "st
11200 61 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  atus", SQLITE_ST
11210 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
11220 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
11230 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65  ++){.      Btree
11240 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e   *pBt;.      con
11250 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20  st char *zState 
11260 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20  = "unknown";.   
11270 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
11280 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  if( db->aDb[i].z
11290 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  Name==0 ) contin
112a0 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
112b0 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
112c0 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
112d0 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a   0, db->aDb[i].z
112e0 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29  Name, P4_STATIC)
112f0 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62  ;.      pBt = db
11300 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20  ->aDb[i].pBt;.  
11310 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c      if( pBt==0 |
11320 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  | sqlite3BtreePa
11330 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20  ger(pBt)==0 ){. 
11340 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
11350 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20  "closed";.      
11360 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
11370 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
11380 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69  b, i ? db->aDb[i
11390 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20  ].zName : 0, .  
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f     SQLITE_FCNTL_
113d0 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d  LOCKSTATE, &j)==
113e0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
113f0 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61        zState = a
11400 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20  zLockName[j];.  
11410 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
11420 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
11430 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
11440 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34  2, 0, zState, P4
11450 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
11460 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11470 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
11480 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
11490 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
114a0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
114b0 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
114c0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45   case PragTyp_KE
114d0 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
114e0 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65  ght ) sqlite3_ke
114f0 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52  y_v2(db, zDb, zR
11500 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72  ight, sqlite3Str
11510 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a  len30(zRight));.
11520 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
11530 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45   case PragTyp_RE
11540 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
11550 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f  Right ) sqlite3_
11560 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
11570 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65  , zRight, sqlite
11580 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
11590 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
115a0 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79   }.  case PragTy
115b0 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20  p_HEXKEY: {.    
115c0 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
115d0 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20      u8 iByte;.  
115e0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
115f0 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a   char zKey[40];.
11600 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69        for(i=0, i
11610 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  Byte=0; i<sizeof
11620 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69  (zKey)*2 && sqli
11630 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67  te3Isxdigit(zRig
11640 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  ht[i]); i++){.  
11650 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69        iByte = (i
11660 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74  Byte<<4) + sqlit
11670 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68  e3HexToInt(zRigh
11680 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  t[i]);.        i
11690 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b  f( (i&1)!=0 ) zK
116a0 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b  ey[i/2] = iByte;
116b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
116c0 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30  f( (zLeft[3] & 0
116d0 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20  xf)==0xb ){.    
116e0 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f      sqlite3_key_
116f0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79  v2(db, zDb, zKey
11700 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65  , i/2);.      }e
11710 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
11720 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62  ite3_rekey_v2(db
11730 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
11740 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
11750 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
11760 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
11770 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
11780 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  DEC) || defined(
11790 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
117a0 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67  ROD).  case Prag
117b0 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54  Typ_ACTIVATE_EXT
117c0 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69  ENSIONS: if( zRi
117d0 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51  ght ){.#ifdef SQ
117e0 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
117f0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
11800 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
11810 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a  see-", 4)==0 ){.
11820 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
11830 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67  tivate_see(&zRig
11840 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[4]);.    }.#e
11850 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
11860 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a  TE_ENABLE_CEROD.
11870 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
11880 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
11890 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20  "cerod-", 6)==0 
118a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
118b0 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28  _activate_cerod(
118c0 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20  &zRight[6]);.   
118d0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
118e0 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
118f0 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65   } /* End of the
11900 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a   PRAGMA switch *
11910 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20  /..pragma_out:. 
11920 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
11930 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c  b, zLeft);.  sql
11940 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
11950 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69  Right);.}..#endi
11960 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
11970 5f 50 52 41 47 4d 41 20 2a 2f 0a                 _PRAGMA */.