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

Artifact 8875d32d54530300e6aa31a9d5426b2088a69b12:


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 2f 2a  sqliteInt.h"../*
01d0: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
01e0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
01f0: 73 20 61 20 73 61 66 65 74 79 20 6c 65 76 65 6c  s a safety level
0200: 2e 20 20 52 65 74 75 72 6e 20 30 20 66 6f 72 20  .  Return 0 for 
0210: 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e  OFF,.** 1 for ON
0220: 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e 64 20 32   or NORMAL and 2
0230: 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52 65 74 75   for FULL.  Retu
0240: 72 6e 20 31 20 66 6f 72 20 61 6e 20 65 6d 70 74  rn 1 for an empt
0250: 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65 63 6f 67  y or .** unrecog
0260: 6e 69 7a 65 64 20 73 74 72 69 6e 67 20 61 72 67  nized string arg
0270: 75 6d 65 6e 74 2e 20 20 54 68 65 20 46 55 4c 4c  ument.  The FULL
0280: 20 6f 70 74 69 6f 6e 20 69 73 20 64 69 73 61 6c   option is disal
0290: 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74 68 65 20  lowed.** if the 
02a0: 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61 6d 65 74  omitFull paramet
02b0: 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e  er it 1..**.** N
02c0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 76 61 6c  ote that the val
02d0: 75 65 73 20 72 65 74 75 72 6e 65 64 20 61 72 65  ues returned are
02e0: 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74 20 74   one less that t
02f0: 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 2a  he values that.*
0300: 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61 73 73  * should be pass
0310: 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65 33 42  ed into sqlite3B
0320: 74 72 65 65 53 65 74 53 61 66 65 74 79 4c 65 76  treeSetSafetyLev
0330: 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20 64 6f  el().  The is do
0340: 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74  ne.** to support
0350: 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f 64 65   legacy SQL code
0360: 2e 20 20 54 68 65 20 73 61 66 65 74 79 20 6c 65  .  The safety le
0370: 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65 20 62  vel used to be b
0380: 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c  oolean.** and ol
0390: 64 65 72 20 73 63 72 69 70 74 73 20 6d 61 79 20  der scripts may 
03a0: 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62 65 72  have used number
03b0: 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e 64 20  s 0 for OFF and 
03c0: 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61  1 for ON..*/.sta
03d0: 74 69 63 20 75 38 20 67 65 74 53 61 66 65 74 79  tic u8 getSafety
03e0: 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63 68 61 72  Level(const char
03f0: 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c   *z, int omitFul
0400: 6c 2c 20 69 6e 74 20 64 66 6c 74 29 7b 0a 20 20  l, int dflt){.  
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 32             /* 12
0430: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37 38  3456789 12345678
0440: 39 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  9 */.  static co
0450: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
0460: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
0470: 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20 73 74 61  truefull";.  sta
0480: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 4f 66  tic const u8 iOf
0490: 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20 31 2c 20  fset[] = {0, 1, 
04a0: 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20 31 36 7d  2, 4, 9, 12, 16}
04b0: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
04c0: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
04d0: 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20 33 2c 20  {2, 2, 3, 5, 3, 
04e0: 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20  4, 4};.  static 
04f0: 63 6f 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b  const u8 iValue[
0500: 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 30  ] =  {1, 0, 0, 0
0510: 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20 20 69 6e  , 1, 1, 2};.  in
0520: 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20 73 71  t i, n;.  if( sq
0530: 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a 29  lite3Isdigit(*z)
0540: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28   ){.    return (
0550: 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  u8)sqlite3Atoi(z
0560: 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 71 6c  );.  }.  n = sql
0570: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29 3b  ite3Strlen30(z);
0580: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72  .  for(i=0; i<Ar
0590: 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74 68 29  raySize(iLength)
05a0: 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b 2b 29 7b  -omitFull; i++){
05b0: 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67 74 68  .    if( iLength
05c0: 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69 74 65  [i]==n && sqlite
05d0: 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65 78 74  3StrNICmp(&zText
05e0: 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a 2c 6e  [iOffset[i]],z,n
05f0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65  )==0 ){.      re
0600: 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b 0a  turn iValue[i];.
0610: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
0620: 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn dflt;.}../*.*
0630: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
0640: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20  given string as 
0650: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
0660: 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47 65  .*/.u8 sqlite3Ge
0670: 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
0680: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64 66 6c 74  har *z, int dflt
0690: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
06a0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
06b0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
06c0: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
06d0: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
06e0: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
06f0: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
0700: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
0710: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
0720: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
0730: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
0740: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
0750: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
0760: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
0770: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
0780: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
0790: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
07a0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
07b0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
07c0: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
07d0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
07e0: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
07f0: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
0800: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
0810: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
0820: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0830: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
0840: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
0850: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0860: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
0870: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0880: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
0890: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
08a0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
08b0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
08c0: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
08d0: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
08e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
08f0: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
0900: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0910: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
0920: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
0930: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
0940: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
0950: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
0960: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
0970: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
0980: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
0990: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
09a0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
09b0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
09c0: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
09d0: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
09e0: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
09f0: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
0a00: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
0a10: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
0a20: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0a30: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
0a40: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0a50: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
0a60: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
0a70: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
0a80: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
0a90: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0aa0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
0ab0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
0ac0: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
0ad0: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
0ae0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
0af0: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
0b00: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
0b10: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
0b20: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
0b30: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
0b40: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0b50: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
0b60: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
0b70: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
0b80: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
0b90: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
0ba0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
0bb0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
0bc0: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
0bd0: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
0be0: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
0bf0: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
0c00: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
0c10: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
0c20: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
0c30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
0c40: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
0c50: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
0c60: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
0c70: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
0c80: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
0c90: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
0ca0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
0cb0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
0cc0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
0cd0: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
0ce0: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
0cf0: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
0d00: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
0d10: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
0d20: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
0d30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
0d40: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
0d50: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
0d60: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
0d70: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
0d80: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
0d90: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
0da0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
0db0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
0dc0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
0dd0: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
0de0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
0df0: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
0e00: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
0e10: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
0e20: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
0e30: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
0e40: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
0e50: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
0e60: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
0e70: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
0e80: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
0e90: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
0ea0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
0eb0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
0ec0: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
0ed0: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
0ee0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
0ef0: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
0f00: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0f10: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
0f20: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
0f30: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
0f40: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
0f50: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
0f60: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
0f70: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
0f80: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
0f90: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
0fa0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
0fb0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
0fc0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
0fd0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
0fe0: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
0ff0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1000: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
1010: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
1020: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1030: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
1040: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
1050: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
1060: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
1070: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
1080: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
1090: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
10a0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
10b0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
10c0: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
10d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
10e0: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
10f0: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
1100: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
1110: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1120: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
1130: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
1140: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
1150: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
1160: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
1170: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
1180: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
1190: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
11a0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
11b0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
11c0: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
11d0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
11e0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
11f0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
1200: 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65  ../*.** Generate
1210: 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20   code to return 
1220: 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  a single integer
1230: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
1240: 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e  c void returnSin
1250: 67 6c 65 49 6e 74 28 50 61 72 73 65 20 2a 70 50  gleInt(Parse *pP
1260: 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
1270: 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34 20 76 61   *zLabel, i64 va
1280: 6c 75 65 29 7b 0a 20 20 56 64 62 65 20 2a 76 20  lue){.  Vdbe *v 
1290: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
12a0: 28 70 50 61 72 73 65 29 3b 0a 20 20 69 6e 74 20  (pParse);.  int 
12b0: 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  mem = ++pParse->
12c0: 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a 70 49 36  nMem;.  i64 *pI6
12d0: 34 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  4 = sqlite3DbMal
12e0: 6c 6f 63 52 61 77 28 70 50 61 72 73 65 2d 3e 64  locRaw(pParse->d
12f0: 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65 29  b, sizeof(value)
1300: 29 3b 0a 20 20 69 66 28 20 70 49 36 34 20 29 7b  );.  if( pI64 ){
1310: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 49 36 34  .    memcpy(pI64
1320: 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a 65 6f 66  , &value, sizeof
1330: 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d 0a 20 20  (value));.  }.  
1340: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
1350: 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  4(v, OP_Int64, 0
1360: 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68 61 72 2a  , mem, 0, (char*
1370: 29 70 49 36 34 2c 20 50 34 5f 49 4e 54 36 34 29  )pI64, P4_INT64)
1380: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  ;.  sqlite3VdbeS
1390: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
13a0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
13b0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
13c0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 61  OLNAME_NAME, zLa
13d0: 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  bel, SQLITE_STAT
13e0: 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  IC);.  sqlite3Vd
13f0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
1400: 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31  esultRow, mem, 1
1410: 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  );.}..#ifndef SQ
1420: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
1430: 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 43 68 65  RAGMAS./*.** Che
1440: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 7a 52 69  ck to see if zRi
1450: 67 68 74 20 61 6e 64 20 7a 4c 65 66 74 20 72 65  ght and zLeft re
1460: 66 65 72 20 74 6f 20 61 20 70 72 61 67 6d 61 20  fer to a pragma 
1470: 74 68 61 74 20 71 75 65 72 69 65 73 0a 2a 2a 20  that queries.** 
1480: 6f 72 20 63 68 61 6e 67 65 73 20 6f 6e 65 20 6f  or changes one o
1490: 66 20 74 68 65 20 66 6c 61 67 73 20 69 6e 20 64  f the flags in d
14a0: 62 2d 3e 66 6c 61 67 73 2e 20 20 52 65 74 75 72  b->flags.  Retur
14b0: 6e 20 31 20 69 66 20 73 6f 20 61 6e 64 20 30 20  n 1 if so and 0 
14c0: 69 66 20 6e 6f 74 2e 0a 2a 2a 20 41 6c 73 6f 2c  if not..** Also,
14d0: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 70   implement the p
14e0: 72 61 67 6d 61 2e 0a 2a 2f 0a 73 74 61 74 69 63  ragma..*/.static
14f0: 20 69 6e 74 20 66 6c 61 67 50 72 61 67 6d 61 28   int flagPragma(
1500: 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
1510: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74  onst char *zLeft
1520: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52  , const char *zR
1530: 69 67 68 74 29 7b 0a 20 20 73 74 61 74 69 63 20  ight){.  static 
1540: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50 72  const struct sPr
1550: 61 67 6d 61 54 79 70 65 20 7b 0a 20 20 20 20 63  agmaType {.    c
1560: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
1570: 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  ;  /* Name of th
1580: 65 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20 20 20  e pragma */.    
1590: 69 6e 74 20 6d 61 73 6b 3b 20 20 20 20 20 20 20  int mask;       
15a0: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 66 6f 72 20      /* Mask for 
15b0: 74 68 65 20 64 62 2d 3e 66 6c 61 67 73 20 76 61  the db->flags va
15c0: 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 50 72 61 67  lue */.  } aPrag
15d0: 6d 61 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22  ma[] = {.    { "
15e0: 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  full_column_name
15f0: 73 22 2c 20 20 20 20 20 20 20 20 53 51 4c 49 54  s",        SQLIT
1600: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
1610: 7d 2c 0a 20 20 20 20 7b 20 22 73 68 6f 72 74 5f  },.    { "short_
1620: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 20 20  column_names",  
1630: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 68 6f 72       SQLITE_Shor
1640: 74 43 6f 6c 4e 61 6d 65 73 20 7d 2c 0a 20 20 20  tColNames },.   
1650: 20 7b 20 22 63 6f 75 6e 74 5f 63 68 61 6e 67 65   { "count_change
1660: 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 53  s",            S
1670: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
1680: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 65 6d      },.    { "em
1690: 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62  pty_result_callb
16a0: 61 63 6b 73 22 2c 20 20 20 53 51 4c 49 54 45 5f  acks",   SQLITE_
16b0: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 7d 2c  NullCallback  },
16c0: 0a 20 20 20 20 7b 20 22 6c 65 67 61 63 79 5f 66  .    { "legacy_f
16d0: 69 6c 65 5f 66 6f 72 6d 61 74 22 2c 20 20 20 20  ile_format",    
16e0: 20 20 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79     SQLITE_Legacy
16f0: 46 69 6c 65 46 6d 74 20 7d 2c 0a 20 20 20 20 7b  FileFmt },.    {
1700: 20 22 66 75 6c 6c 66 73 79 6e 63 22 2c 20 20 20   "fullfsync",   
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1720: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
1730: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 63 68 65 63    },.    { "chec
1740: 6b 70 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63  kpoint_fullfsync
1750: 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6b  ",     SQLITE_Ck
1760: 70 74 46 75 6c 6c 46 53 79 6e 63 20 7d 2c 0a 20  ptFullFSync },. 
1770: 20 20 20 7b 20 22 72 65 76 65 72 73 65 5f 75 6e     { "reverse_un
1780: 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 22  ordered_selects"
1790: 2c 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  , SQLITE_Reverse
17a0: 4f 72 64 65 72 20 20 7d 2c 0a 23 69 66 6e 64 65  Order  },.#ifnde
17b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
17c0: 54 4f 4d 41 54 49 43 5f 49 4e 44 45 58 0a 20 20  TOMATIC_INDEX.  
17d0: 20 20 7b 20 22 61 75 74 6f 6d 61 74 69 63 5f 69    { "automatic_i
17e0: 6e 64 65 78 22 2c 20 20 20 20 20 20 20 20 20 20  ndex",          
17f0: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
1800: 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 23       },.#endif.#
1810: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1820: 55 47 0a 20 20 20 20 7b 20 22 73 71 6c 5f 74 72  UG.    { "sql_tr
1830: 61 63 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ace",           
1840: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 71 6c 54       SQLITE_SqlT
1850: 72 61 63 65 20 20 20 20 20 20 7d 2c 0a 20 20 20  race      },.   
1860: 20 7b 20 22 76 64 62 65 5f 6c 69 73 74 69 6e 67   { "vdbe_listing
1870: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 53  ",             S
1880: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
1890: 67 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 76 64  g   },.    { "vd
18a0: 62 65 5f 74 72 61 63 65 22 2c 20 20 20 20 20 20  be_trace",      
18b0: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
18c0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 7d 2c  VdbeTrace     },
18d0: 0a 20 20 20 20 7b 20 22 76 64 62 65 5f 61 64 64  .    { "vdbe_add
18e0: 6f 70 74 72 61 63 65 22 2c 20 20 20 20 20 20 20  optrace",       
18f0: 20 20 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64     SQLITE_VdbeAd
1900: 64 6f 70 54 72 61 63 65 7d 2c 0a 20 20 20 20 7b  dopTrace},.    {
1910: 20 22 76 64 62 65 5f 64 65 62 75 67 22 2c 20 20   "vdbe_debug",  
1920: 20 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63    SQLITE_SqlTrac
1930: 65 20 7c 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  e | SQLITE_VdbeL
1940: 69 73 74 69 6e 67 0a 20 20 20 20 20 20 20 20 20  isting.         
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 20 20 20 20 7c 20 53 51 4c 49 54 45 5f 56        | SQLITE_V
1970: 64 62 65 54 72 61 63 65 20 20 20 20 20 20 7d 2c  dbeTrace      },
1980: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1990: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43  SQLITE_OMIT_CHEC
19a0: 4b 0a 20 20 20 20 7b 20 22 69 67 6e 6f 72 65 5f  K.    { "ignore_
19b0: 63 68 65 63 6b 5f 63 6f 6e 73 74 72 61 69 6e 74  check_constraint
19c0: 73 22 2c 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72  s", SQLITE_Ignor
19d0: 65 43 68 65 63 6b 73 20 20 7d 2c 0a 23 65 6e 64  eChecks  },.#end
19e0: 69 66 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  if.    /* The fo
19f0: 6c 6c 6f 77 69 6e 67 20 69 73 20 56 45 52 59 20  llowing is VERY 
1a00: 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 2a 2f 0a  experimental */.
1a10: 20 20 20 20 7b 20 22 77 72 69 74 61 62 6c 65 5f      { "writable_
1a20: 73 63 68 65 6d 61 22 2c 20 20 20 20 20 20 20 20  schema",        
1a30: 20 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63    SQLITE_WriteSc
1a40: 68 65 6d 61 7c 53 51 4c 49 54 45 5f 52 65 63 6f  hema|SQLITE_Reco
1a50: 76 65 72 79 4d 6f 64 65 20 7d 2c 0a 0a 20 20 20  veryMode },..   
1a60: 20 2f 2a 20 54 4f 44 4f 3a 20 4d 61 79 62 65 20   /* TODO: Maybe 
1a70: 69 74 20 73 68 6f 75 6c 64 6e 27 74 20 62 65 20  it shouldn't be 
1a80: 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 68 61 6e  possible to chan
1a90: 67 65 20 74 68 65 20 52 65 61 64 55 6e 63 6f 6d  ge the ReadUncom
1aa0: 6d 69 74 74 65 64 0a 20 20 20 20 2a 2a 20 66 6c  mitted.    ** fl
1ab0: 61 67 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ag if there are 
1ac0: 61 6e 79 20 61 63 74 69 76 65 20 73 74 61 74 65  any active state
1ad0: 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20 7b 20  ments. */.    { 
1ae0: 22 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  "read_uncommitte
1af0: 64 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49  d",         SQLI
1b00: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
1b10: 65 64 20 7d 2c 0a 20 20 20 20 7b 20 22 72 65 63  ed },.    { "rec
1b20: 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
1b30: 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 52  ,       SQLITE_R
1b40: 65 63 54 72 69 67 67 65 72 73 20 7d 2c 0a 0a 20  ecTriggers },.. 
1b50: 20 20 20 2f 2a 20 54 68 69 73 20 66 6c 61 67 20     /* This flag 
1b60: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  may only be set 
1b70: 69 66 20 62 6f 74 68 20 66 6f 72 65 69 67 6e 2d  if both foreign-
1b80: 6b 65 79 20 61 6e 64 20 74 72 69 67 67 65 72 20  key and trigger 
1b90: 73 75 70 70 6f 72 74 0a 20 20 20 20 2a 2a 20 61  support.    ** a
1ba0: 72 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  re present in th
1bb0: 65 20 62 75 69 6c 64 2e 20 20 2a 2f 0a 23 69 66  e build.  */.#if
1bc0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1bd0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1be0: 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
1bf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
1c00: 45 52 29 0a 20 20 20 20 7b 20 22 66 6f 72 65 69  ER).    { "forei
1c10: 67 6e 5f 6b 65 79 73 22 2c 20 20 20 20 20 20 20  gn_keys",       
1c20: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 6f 72        SQLITE_For
1c30: 65 69 67 6e 4b 65 79 73 20 7d 2c 0a 23 65 6e 64  eignKeys },.#end
1c40: 69 66 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b  if.  };.  int i;
1c50: 0a 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  .  const struct 
1c60: 73 50 72 61 67 6d 61 54 79 70 65 20 2a 70 3b 0a  sPragmaType *p;.
1c70: 20 20 66 6f 72 28 69 3d 30 2c 20 70 3d 61 50 72    for(i=0, p=aPr
1c80: 61 67 6d 61 3b 20 69 3c 41 72 72 61 79 53 69 7a  agma; i<ArraySiz
1c90: 65 28 61 50 72 61 67 6d 61 29 3b 20 69 2b 2b 2c  e(aPragma); i++,
1ca0: 20 70 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 73   p++){.    if( s
1cb0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
1cc0: 65 66 74 2c 20 70 2d 3e 7a 4e 61 6d 65 29 3d 3d  eft, p->zName)==
1cd0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
1ce0: 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d  e3 *db = pParse-
1cf0: 3e 64 62 3b 0a 20 20 20 20 20 20 56 64 62 65 20  >db;.      Vdbe 
1d00: 2a 76 3b 0a 20 20 20 20 20 20 76 20 3d 20 73 71  *v;.      v = sq
1d10: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
1d20: 72 73 65 29 3b 0a 20 20 20 20 20 20 61 73 73 65  rse);.      asse
1d30: 72 74 28 20 76 21 3d 30 20 29 3b 20 20 2f 2a 20  rt( v!=0 );  /* 
1d40: 41 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  Already allocate
1d50: 64 20 62 79 20 73 71 6c 69 74 65 33 50 72 61 67  d by sqlite3Prag
1d60: 6d 61 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66  ma() */.      if
1d70: 28 20 41 4c 57 41 59 53 28 76 29 20 29 7b 0a 20  ( ALWAYS(v) ){. 
1d80: 20 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68         if( zRigh
1d90: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
1da0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
1db0: 74 28 70 50 61 72 73 65 2c 20 70 2d 3e 7a 4e 61  t(pParse, p->zNa
1dc0: 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  me, (db->flags &
1dd0: 20 70 2d 3e 6d 61 73 6b 29 21 3d 30 20 29 3b 0a   p->mask)!=0 );.
1de0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1df0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6d 61 73           int mas
1e00: 6b 20 3d 20 70 2d 3e 6d 61 73 6b 3b 20 20 20 20  k = p->mask;    
1e10: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1e20: 20 62 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20   bits to set or 
1e30: 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20  clear. */.      
1e40: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f      if( db->auto
1e50: 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20  Commit==0 ){.   
1e60: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65           /* Fore
1e70: 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20  ign key support 
1e80: 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c  may not be enabl
1e90: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77  ed or disabled w
1ea0: 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20  hile not.       
1eb0: 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d       ** in auto-
1ec0: 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f  commit mode.  */
1ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 73  .            mas
1ee0: 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f  k &= ~(SQLITE_Fo
1ef0: 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20  reignKeys);.    
1f00: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
1f10: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
1f20: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
1f30: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20   0) ){.         
1f40: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
1f50: 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  mask;.          
1f60: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1f70: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
1f80: 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 20  ~mask;.         
1f90: 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   }..          /*
1fa0: 20 4d 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61   Many of the fla
1fb0: 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79  g-pragmas modify
1fc0: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1fd0: 74 65 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a  ted by the SQL .
1fe0: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 6f 6d            ** com
1ff0: 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74  piler (eg. count
2000: 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64  _changes). So ad
2010: 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65  d an opcode to e
2020: 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20  xpire all.      
2030: 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20      ** compiled 
2040: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61  SQL statements a
2050: 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61  fter modifying a
2060: 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20   pragma value.. 
2070: 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20           */.    
2080: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2090: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78  eAddOp2(v, OP_Ex
20a0: 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20  pire, 0, 0);.   
20b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
20c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
20d0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
20e0: 72 6e 20 30 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  rn 0;.}.#endif /
20f0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  * SQLITE_OMIT_FL
2100: 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 2f  AG_PRAGMAS */../
2110: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75  *.** Return a hu
2120: 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d  man-readable nam
2130: 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69  e for a constrai
2140: 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63  nt resolution ac
2150: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
2160: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2170: 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20  EIGN_KEY.static 
2180: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69  const char *acti
2190: 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e  onName(u8 action
21a0: 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ){.  const char 
21b0: 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68  *zName;.  switch
21c0: 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  ( action ){.    
21d0: 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a  case OE_SetNull:
21e0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e    zName = "SET N
21f0: 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65  ULL";        bre
2200: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f  ak;.    case OE_
2210: 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20  SetDflt:  zName 
2220: 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b  = "SET DEFAULT";
2230: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2240: 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a  case OE_Cascade:
2250: 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41    zName = "CASCA
2260: 44 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65  DE";         bre
2270: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f  ak;.    case OE_
2280: 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20  Restrict: zName 
2290: 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20  = "RESTRICT";   
22a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
22b0: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20  default:        
22c0: 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43    zName = "NO AC
22d0: 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20  TION";  .       
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
22f0: 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f  ssert( action==O
2300: 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b  E_None ); break;
2310: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e  .  }.  return zN
2320: 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  ame;.}.#endif...
2330: 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  /*.** Parameter 
2340: 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e  eMode must be on
2350: 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a  e of the PAGER_J
2360: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63  OURNALMODE_XXX c
2370: 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69  onstants.** defi
2380: 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20  ned in pager.h. 
2390: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65  This function re
23a0: 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69  turns the associ
23b0: 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a  ated lowercase.*
23c0: 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e  * journal-mode n
23d0: 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  ame..*/.const ch
23e0: 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ar *sqlite3Journ
23f0: 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65  alModename(int e
2400: 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20  Mode){.  static 
2410: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d  char * const azM
2420: 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20  odeName[] = {.  
2430: 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72    "delete", "per
2440: 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74  sist", "off", "t
2450: 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72  runcate", "memor
2460: 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  y".#ifndef SQLIT
2470: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20  E_OMIT_WAL.     
2480: 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20  , "wal".#endif. 
2490: 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   };.  assert( PA
24a0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
24b0: 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61  DELETE==0 );.  a
24c0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
24d0: 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
24e0: 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
24f0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
2500: 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61  DE_OFF==2 );.  a
2510: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
2520: 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
2530: 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74  E==3 );.  assert
2540: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
2550: 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b  ODE_MEMORY==4 );
2560: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
2570: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2580: 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==5 );.  assert(
2590: 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f   eMode>=0 && eMo
25a0: 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a  de<=ArraySize(az
25b0: 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20  ModeName) );..  
25c0: 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79  if( eMode==Array
25d0: 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29  Size(azModeName)
25e0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72   ) return 0;.  r
25f0: 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65  eturn azModeName
2600: 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a  [eMode];.}../*.*
2610: 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67  * Process a prag
2620: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  ma statement.  .
2630: 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72  **.** Pragmas ar
2640: 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a  e of this form:.
2650: 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d  **.**      PRAGM
2660: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20  A [database.]id 
2670: 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20  [= value].**.** 
2680: 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d  The identifier m
2690: 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73  ight also be a s
26a0: 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75  tring.  The valu
26b0: 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61  e is a string, a
26c0: 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72  nd.** identifier
26d0: 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20  , or a number.  
26e0: 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20  If minusFlag is 
26f0: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76  true, then the v
2700: 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d  alue is.** a num
2710: 62 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65  ber that was pre
2720: 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73  ceded by a minus
2730: 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   sign..**.** If 
2740: 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73  the left side is
2750: 20 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74   "database.id" t
2760: 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20  hen pId1 is the 
2770: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a  database name.**
2780: 20 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65   and pId2 is the
2790: 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66   id.  If the lef
27a0: 74 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22  t side is just "
27b0: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
27c0: 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70   the.** id and p
27d0: 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79  Id2 is any empty
27e0: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64   string..*/.void
27f0: 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a   sqlite3Pragma(.
2800: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c    Parse *pParse,
2810: 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c   .  Token *pId1,
2820: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
2830: 20 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61   part of [databa
2840: 73 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a  se.]id field */.
2850: 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20    Token *pId2,  
2860: 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20        /* Second 
2870: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
2880: 65 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20  e.]id field, or 
2890: 4e 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  NULL */.  Token 
28a0: 2a 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a  *pValue,      /*
28b0: 20 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75   Token for <valu
28c0: 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  e>, or NULL */. 
28d0: 20 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20   int minusFlag  
28e0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
28f0: 61 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65  a '-' sign prece
2900: 64 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29  ded <value> */.)
2910: 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20  {.  char *zLeft 
2920: 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  = 0;       /* Nu
2930: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l-terminated UTF
2940: 2d 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a  -8 string <id> *
2950: 2f 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74  /.  char *zRight
2960: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
2970: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l-terminated UTF
2980: 2d 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65  -8 string <value
2990: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
29a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20  const char *zDb 
29b0: 3d 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61  = 0;   /* The da
29c0: 74 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20  tabase name */. 
29d0: 20 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20   Token *pId;    
29e0: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
29f0: 65 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e  er to <id> token
2a00: 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a20: 44 61 74 61 62 61 73 65 20 69 6e 64 65 78 20 66  Database index f
2a30: 6f 72 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f  or <database> */
2a40: 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b  .  char *aFcntl[
2a50: 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67  4];       /* Arg
2a60: 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f  ument to SQLITE_
2a70: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a  FCNTL_PRAGMA */.
2a80: 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2aa0: 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66  * return value f
2ab0: 6f 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  orm SQLITE_FCNTL
2ac0: 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c  _PRAGMA */.  sql
2ad0: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
2ae0: 65 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65  e->db;    /* The
2af0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
2b00: 74 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44  tion */.  Db *pD
2b10: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
2b20: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70         /* The sp
2b30: 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
2b40: 62 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a  being pragmaed *
2b50: 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 70 50  /.  Vdbe *v = pP
2b60: 61 72 73 65 2d 3e 70 56 64 62 65 20 3d 20 73 71  arse->pVdbe = sq
2b70: 6c 69 74 65 33 56 64 62 65 43 72 65 61 74 65 28  lite3VdbeCreate(
2b80: 64 62 29 3b 20 20 2f 2a 20 50 72 65 70 61 72 65  db);  /* Prepare
2b90: 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 0a  d statement */..
2ba0: 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74    if( v==0 ) ret
2bb0: 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  urn;.  sqlite3Vd
2bc0: 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29  beRunOnlyOnce(v)
2bd0: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  ;.  pParse->nMem
2be0: 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65   = 2;..  /* Inte
2bf0: 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62  rpret the [datab
2c00: 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68  ase.] part of th
2c10: 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  e pragma stateme
2c20: 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20  nt. iDb is the. 
2c30: 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ** index of the
2c40: 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70   database this p
2c50: 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61  ragma is being a
2c60: 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e  pplied to in db.
2c70: 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20  aDb[]. */.  iDb 
2c80: 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  = sqlite3TwoPart
2c90: 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64  Name(pParse, pId
2ca0: 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a  1, pId2, &pId);.
2cb0: 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65    if( iDb<0 ) re
2cc0: 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64  turn;.  pDb = &d
2cd0: 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20  b->aDb[iDb];..  
2ce0: 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64  /* If the temp d
2cf0: 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e  atabase has been
2d00: 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65   explicitly name
2d10: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
2d20: 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d   .  ** pragma, m
2d30: 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f  ake sure it is o
2d40: 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28  pen. .  */.  if(
2d50: 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74   iDb==1 && sqlit
2d60: 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
2d70: 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  se(pParse) ){.  
2d80: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
2d90: 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33   zLeft = sqlite3
2da0: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
2db0: 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a  , pId);.  if( !z
2dc0: 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20  Left ) return;. 
2dd0: 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29   if( minusFlag )
2de0: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
2df0: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2e00: 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29  , "-%T", pValue)
2e10: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  ;.  }else{.    z
2e20: 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e  Right = sqlite3N
2e30: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
2e40: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20   pValue);.  }.. 
2e50: 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b   assert( pId2 );
2e60: 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e  .  zDb = pId2->n
2e70: 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20  >0 ? pDb->zName 
2e80: 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  : 0;.  if( sqlit
2e90: 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72  e3AuthCheck(pPar
2ea0: 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d  se, SQLITE_PRAGM
2eb0: 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  A, zLeft, zRight
2ec0: 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f  , zDb) ){.    go
2ed0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2ee0: 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e   }..  /* Send an
2ef0: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2f00: 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f  AGMA file-contro
2f10: 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  l to the underly
2f20: 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e  ing VFS.  ** con
2f30: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20  nection.  If it 
2f40: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
2f50: 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74  K, then assume t
2f60: 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a  hat the VFS.  **
2f70: 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61   handled the pra
2f80: 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65  gma and generate
2f90: 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65   a no-op prepare
2fa0: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a  d statement..  *
2fb0: 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d 20  /.  aFcntl[0] = 
2fc0: 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20 3d  0;.  aFcntl[1] =
2fd0: 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74 6c   zLeft;.  aFcntl
2fe0: 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20  [2] = zRight;.  
2ff0: 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a 20  aFcntl[3] = 0;. 
3000: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
3010: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 63  .nBusy = 0;.  rc
3020: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f   = sqlite3_file_
3030: 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c  control(db, zDb,
3040: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
3050: 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46 63  AGMA, (void*)aFc
3060: 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ntl);.  if( rc==
3070: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3080: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
3090: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65 6d 20  {.      int mem 
30a0: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
30b0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
30c0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
30d0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65 6d 2c  String8, 0, mem,
30e0: 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20 30   0, aFcntl[0], 0
30f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3100: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
3110: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
3120: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
3130: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
3140: 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22 2c 20  NAME, "result", 
3150: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
3160: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3170: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
3180: 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31 29  sultRow, mem, 1)
3190: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
31a0: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
31b0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
31c0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc!=SQLITE_NO
31d0: 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 69 66  TFOUND ){.    if
31e0: 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20  ( aFcntl[0] ){. 
31f0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
3200: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 25 73  rMsg(pParse, "%s
3210: 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20  ", aFcntl[0]);. 
3220: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
3230: 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20  e(aFcntl[0]);.  
3240: 20 20 7d 0a 20 20 20 20 70 50 61 72 73 65 2d 3e    }.    pParse->
3250: 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72  nErr++;.    pPar
3260: 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 7d  se->rc = rc;.  }
3270: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 20  else.           
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3290: 20 0a 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64   . .#if !defined
32a0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
32b0: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21  ER_PRAGMAS) && !
32c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
32d0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a  MIT_DEPRECATED).
32e0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
32f0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65 66  A [database.]def
3300: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a  ault_cache_size.
3310: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
3320: 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f  tabase.]default_
3330: 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a  cache_size=N.  *
3340: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
3350: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
3360: 65 20 63 75 72 72 65 6e 74 20 70 65 72 73 69 73  e current persis
3370: 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72  tent setting for
3380: 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63   the.  ** page c
3390: 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20  ache size.  The 
33a0: 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69  value returned i
33b0: 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
33c0: 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67  mber of.  ** pag
33d0: 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63  es in the page c
33e0: 61 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e  ache.  The secon
33f0: 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68  d form sets both
3400: 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a   the current.  *
3410: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
3420: 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  e value and the 
3430: 70 65 72 73 69 73 74 65 6e 74 20 70 61 67 65 20  persistent page 
3440: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
3450: 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  .  ** stored in 
3460: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3470: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64  e..  **.  ** Old
3480: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
3490: 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74 20  QLite would set 
34a0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
34b0: 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a  e size to a.  **
34c0: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
34d0: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79 6e   to indicate syn
34e0: 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54  chronous=OFF.  T
34f0: 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63 68  hese days, synch
3500: 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61  ronous.  ** is a
3510: 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66 61  lways on by defa
3520: 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ult regardless o
3530: 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68  f the sign of th
3540: 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a  e default cache.
3550: 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74 20    ** size.  But 
3560: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b 65  continue to take
3570: 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   the absolute va
3580: 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 61 75  lue of the defau
3590: 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69  lt cache.  ** si
35a0: 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61 6c  ze of historical
35b0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a   compatibility..
35c0: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
35d0: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
35e0: 22 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  "default_cache_s
35f0: 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ize")==0 ){.    
3600: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
3610: 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68 65  eOpList getCache
3620: 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Size[] = {.     
3630: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
3640: 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20  n, 0, 0,        
3650: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
3660: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
3670: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52   */.      { OP_R
3680: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31  eadCookie,  0, 1
3690: 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 44  ,        BTREE_D
36a0: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
36b0: 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  E},  /* 1 */.   
36c0: 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20     { OP_IfPos,  
36d0: 20 20 20 20 20 31 2c 20 37 2c 20 20 20 20 20 20       1, 7,      
36e0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
36f0: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c  _Integer,     0,
3700: 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   2,        0},. 
3710: 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61       { OP_Subtra
3720: 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20  ct,    1, 2,    
3730: 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20      1},.      { 
3740: 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20  OP_IfPos,       
3750: 31 2c 20 37 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 7,        0},
3760: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65  .      { OP_Inte
3770: 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20  ger,     0, 1,  
3780: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20        0},       
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a0: 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20    /* 6 */.      
37b0: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
37c0: 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20 30    1, 1,        0
37d0: 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  },.    };.    in
37e0: 74 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20  t addr;.    if( 
37f0: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
3800: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
3810: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
3820: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
3830: 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20  Btree(v, iDb);. 
3840: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
3850: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
3860: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
3870: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
3880: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
3890: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
38a0: 41 4d 45 2c 20 22 63 61 63 68 65 5f 73 69 7a 65  AME, "cache_size
38b0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
38c0: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
38d0: 3e 6e 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20 20 20  >nMem += 2;.    
38e0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
38f0: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
3900: 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61   ArraySize(getCa
3910: 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63  cheSize), getCac
3920: 68 65 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 73  heSize);.      s
3930: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
3940: 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
3950: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3960: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
3970: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
3980: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
3990: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 36  angeP1(v, addr+6
39a0: 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  , SQLITE_DEFAULT
39b0: 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a 20 20  _CACHE_SIZE);.  
39c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
39d0: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
39e0: 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65  3AbsInt32(sqlite
39f0: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
3a00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67        sqlite3Beg
3a10: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
3a20: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29  (pParse, 0, iDb)
3a30: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3a40: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
3a50: 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 31  Integer, size, 1
3a60: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3a70: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
3a80: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c  _SetCookie, iDb,
3a90: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
3aa0: 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b 0a 20  ACHE_SIZE, 1);. 
3ab0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
3ac0: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
3ad0: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
3ae0: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53  );.      pDb->pS
3af0: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
3b00: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
3b10: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
3b20: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
3b30: 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t, pDb->pSchema-
3b40: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
3b50: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
3b60: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
3b70: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3b80: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
3b90: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
3ba0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3bb0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
3bc0: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
3bd0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
3be0: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
3bf0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
3c00: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
3c10: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
3c20: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
3c30: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
3c40: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
3c50: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
3c60: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
3c70: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3c80: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
3c90: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
3ca0: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
3cb0: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
3cc0: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
3cd0: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
3ce0: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
3cf0: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ted..  */.  if( 
3d00: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
3d10: 4c 65 66 74 2c 22 70 61 67 65 5f 73 69 7a 65 22  Left,"page_size"
3d20: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 42 74 72 65  )==0 ){.    Btre
3d30: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
3d40: 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  t;.    assert( p
3d50: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
3d60: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
3d70: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57    int size = ALW
3d80: 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74  AYS(pBt) ? sqlit
3d90: 65 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69  e3BtreeGetPageSi
3da0: 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20  ze(pBt) : 0;.   
3db0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
3dc0: 6e 74 28 70 50 61 72 73 65 2c 20 22 70 61 67 65  nt(pParse, "page
3dd0: 5f 73 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20  _size", size);. 
3de0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3df0: 2f 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61  /* Malloc may fa
3e00: 69 6c 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20  il when setting 
3e10: 74 68 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61  the page-size, a
3e20: 73 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  s there is an in
3e30: 74 65 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20  ternal.      ** 
3e40: 62 75 66 66 65 72 20 74 68 61 74 20 74 68 65 20  buffer that the 
3e50: 70 61 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73  pager module res
3e60: 69 7a 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74  izes using sqlit
3e70: 65 33 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20  e3_realloc()..  
3e80: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d      */.      db-
3e90: 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20  >nextPagesize = 
3ea0: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
3eb0: 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53  ht);.      if( S
3ec0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c  QLITE_NOMEM==sql
3ed0: 69 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65  ite3BtreeSetPage
3ee0: 53 69 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65  Size(pBt, db->ne
3ef0: 78 74 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29  xtPagesize,-1,0)
3f00: 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
3f10: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
3f20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
3f30: 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20    }else..  /*.  
3f40: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
3f50: 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c  base.]secure_del
3f60: 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ete.  **  PRAGMA
3f70: 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75   [database.]secu
3f80: 72 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46  re_delete=ON/OFF
3f90: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
3fa0: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
3fb0: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  s the current se
3fc0: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
3fd0: 2a 2a 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65  ** secure_delete
3fe0: 20 66 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f   flag.  The seco
3ff0: 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20  nd form changes 
4000: 74 68 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74  the secure_delet
4010: 65 0a 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74  e.  ** flag sett
4020: 69 6e 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20  ing and reports 
4030: 74 68 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20  thenew value..  
4040: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
4050: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 73  StrICmp(zLeft,"s
4060: 65 63 75 72 65 5f 64 65 6c 65 74 65 22 29 3d 3d  ecure_delete")==
4070: 30 20 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  0 ){.    Btree *
4080: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
4090: 20 20 20 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a      int b = -1;.
40a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
40b0: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  =0 );.    if( zR
40c0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 62 20  ight ){.      b 
40d0: 3d 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  = sqlite3GetBool
40e0: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 3b 0a  ean(zRight, 0);.
40f0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49      }.    if( pI
4100: 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d 30  d2->n==0 && b>=0
4110: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
4120: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30  ;.      for(ii=0
4130: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
4140: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
4150: 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65 44  ite3BtreeSecureD
4160: 65 6c 65 74 65 28 64 62 2d 3e 61 44 62 5b 69 69  elete(db->aDb[ii
4170: 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 20  ].pBt, b);.     
4180: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 20 3d   }.    }.    b =
4190: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63   sqlite3BtreeSec
41a0: 75 72 65 44 65 6c 65 74 65 28 70 42 74 2c 20 62  ureDelete(pBt, b
41b0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e  );.    returnSin
41c0: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
41d0: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22 2c 20  secure_delete", 
41e0: 62 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f  b);.  }else..  /
41f0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
4200: 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61  database.]max_pa
4210: 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50  ge_count.  **  P
4220: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
4230: 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d  ]max_page_count=
4240: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
4250: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
4260: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
4270: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
4280: 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62   ** maximum numb
4290: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
42a0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
42b0: 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65 63  .  The .  ** sec
42c0: 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70 74  ond form attempt
42d0: 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69 73  s to change this
42e0: 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68 0a   setting.  Both.
42f0: 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75 72    ** forms retur
4300: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  n the current se
4310: 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tting..  **.  **
4320: 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   The absolute va
4330: 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65 64  lue of N is used
4340: 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63  .  This is undoc
4350: 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67 68  umented and migh
4360: 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20 20  t.  ** change.  
4370: 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  The only purpose
4380: 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
4390: 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74 65  n easy way to te
43a0: 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69  st.  ** the sqli
43b0: 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66 75  te3AbsInt32() fu
43c0: 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  nction..  **.  *
43d0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
43e0: 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75 6e 74 0a  ase.]page_count.
43f0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
4400: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
4410: 61 67 65 73 20 69 6e 20 74 68 65 20 73 70 65 63  ages in the spec
4420: 69 66 69 65 64 20 64 61 74 61 62 61 73 65 2e 0a  ified database..
4430: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
4440: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
4450: 22 70 61 67 65 5f 63 6f 75 6e 74 22 29 3d 3d 30  "page_count")==0
4460: 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 53 74  .   || sqlite3St
4470: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 6d 61 78  rICmp(zLeft,"max
4480: 5f 70 61 67 65 5f 63 6f 75 6e 74 22 29 3d 3d 30  _page_count")==0
4490: 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 52  .  ){.    int iR
44a0: 65 67 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  eg;.    if( sqli
44b0: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
44c0: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
44d0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 73 71 6c  gma_out;.    sql
44e0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
44f0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
4500: 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b  );.    iReg = ++
4510: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20  pParse->nMem;.  
4520: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c    if( sqlite3Tol
4530: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
4540: 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  'p' ){.      sql
4550: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
4560: 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20  , OP_Pagecount, 
4570: 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20  iDb, iReg);.    
4580: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
4590: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
45a0: 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69  , OP_MaxPgcnt, i
45b0: 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20  Db, iReg, .     
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45d0: 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74     sqlite3AbsInt
45e0: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
45f0: 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a  Right)));.    }.
4600: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
4610: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
4620: 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b  ltRow, iReg, 1);
4630: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4640: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
4650: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4660: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
4670: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
4680: 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
4690: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73  ANSIENT);.  }els
46a0: 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  e..  /*.  **  PR
46b0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
46c0: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a  locking_mode.  *
46d0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
46e0: 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ase.]locking_mod
46f0: 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c  e = (normal|excl
4700: 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 69 66  usive).  */.  if
4710: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
4720: 28 7a 4c 65 66 74 2c 22 6c 6f 63 6b 69 6e 67 5f  (zLeft,"locking_
4730: 6d 6f 64 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  mode")==0 ){.   
4740: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65   const char *zRe
4750: 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20  t = "normal";.  
4760: 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65    int eMode = ge
4770: 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69  tLockingMode(zRi
4780: 67 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70  ght);..    if( p
4790: 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f  Id2->n==0 && eMo
47a0: 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  de==PAGER_LOCKIN
47b0: 47 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20  GMODE_QUERY ){. 
47c0: 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22       /* Simple "
47d0: 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d  PRAGMA locking_m
47e0: 6f 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e  ode;" statement.
47f0: 20 54 68 69 73 20 69 73 20 61 20 71 75 65 72 79   This is a query
4800: 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68   for.      ** th
4810: 65 20 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c  e current defaul
4820: 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28  t locking mode (
4830: 77 68 69 63 68 20 6d 61 79 20 62 65 20 64 69 66  which may be dif
4840: 66 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20  ferent to.      
4850: 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d  ** the locking-m
4860: 6f 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20  ode of the main 
4870: 64 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20  database)..     
4880: 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20   */.      eMode 
4890: 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f  = db->dfltLockMo
48a0: 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  de;.    }else{. 
48b0: 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67       Pager *pPag
48c0: 65 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49  er;.      if( pI
48d0: 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  d2->n==0 ){.    
48e0: 20 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69      /* This indi
48f0: 63 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61  cates that no da
4900: 74 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20  tabase name was 
4910: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
4920: 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20  t.        ** of 
4930: 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61  the PRAGMA comma
4940: 6e 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  nd. In this case
4950: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64   the locking-mod
4960: 65 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20  e must be.      
4970: 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20    ** set on all 
4980: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
4990: 65 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74  es, as well as t
49a0: 68 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e  he main db file.
49b0: 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  .        **.    
49c0: 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65      ** Also, the
49d0: 20 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63   sqlite3.dfltLoc
49e0: 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69  kMode variable i
49f0: 73 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20  s set so that.  
4a00: 20 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62        ** any sub
4a10: 73 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68  sequently attach
4a20: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6c 73  ed databases als
4a30: 6f 20 75 73 65 20 74 68 65 20 73 70 65 63 69 66  o use the specif
4a40: 69 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c  ied.        ** l
4a50: 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20  ocking mode..   
4a60: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
4a70: 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20  int ii;.        
4a80: 61 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d  assert(pDb==&db-
4a90: 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20  >aDb[0]);.      
4aa0: 20 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64    for(ii=2; ii<d
4ab0: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
4ac0: 20 20 20 20 20 20 20 20 20 70 50 61 67 65 72 20           pPager 
4ad0: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
4ae0: 67 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ger(db->aDb[ii].
4af0: 70 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  pBt);.          
4b00: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
4b10: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
4b20: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20  eMode);.        
4b30: 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66  }.        db->df
4b40: 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38  ltLockMode = (u8
4b50: 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a  )eMode;.      }.
4b60: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
4b70: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
4b80: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
4b90: 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65    eMode = sqlite
4ba0: 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64  3PagerLockingMod
4bb0: 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29  e(pPager, eMode)
4bc0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73  ;.    }..    ass
4bd0: 65 72 74 28 65 4d 6f 64 65 3d 3d 50 41 47 45 52  ert(eMode==PAGER
4be0: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52  _LOCKINGMODE_NOR
4bf0: 4d 41 4c 7c 7c 65 4d 6f 64 65 3d 3d 50 41 47 45  MAL||eMode==PAGE
4c00: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58  R_LOCKINGMODE_EX
4c10: 43 4c 55 53 49 56 45 29 3b 0a 20 20 20 20 69 66  CLUSIVE);.    if
4c20: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
4c30: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55  OCKINGMODE_EXCLU
4c40: 53 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52  SIVE ){.      zR
4c50: 65 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22  et = "exclusive"
4c60: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
4c70: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
4c80: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  s(v, 1);.    sql
4c90: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
4ca0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
4cb0: 5f 4e 41 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f  _NAME, "locking_
4cc0: 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  mode", SQLITE_ST
4cd0: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
4ce0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
4cf0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
4d00: 2c 20 30 2c 20 7a 52 65 74 2c 20 30 29 3b 0a 20  , 0, zRet, 0);. 
4d10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
4d20: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
4d30: 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 7d  tRow, 1, 1);.  }
4d40: 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  else..  /*.  ** 
4d50: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
4d60: 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a  e.]journal_mode.
4d70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
4d80: 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f  tabase.]journal_
4d90: 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20  mode =.  **     
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4db0: 20 28 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74   (delete|persist
4dc0: 7c 6f 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65  |off|truncate|me
4dd0: 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20  mory|wal|off).  
4de0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
4df0: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 6a  StrICmp(zLeft,"j
4e00: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 29 3d 3d 30  ournal_mode")==0
4e10: 20 29 7b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64   ){.    int eMod
4e20: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65  e;        /* One
4e30: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
4e40: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 73 79  URNALMODE_XXX sy
4e50: 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20 20 69 6e 74  mbols */.    int
4e60: 20 69 69 3b 20 20 20 20 20 20 20 20 20 20 20 2f   ii;           /
4e70: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
4e80: 2f 0a 0a 20 20 20 20 2f 2a 20 46 6f 72 63 65 20  /..    /* Force 
4e90: 74 68 65 20 73 63 68 65 6d 61 20 74 6f 20 62 65  the schema to be
4ea0: 20 6c 6f 61 64 65 64 20 6f 6e 20 61 6c 6c 20 64   loaded on all d
4eb0: 61 74 61 62 61 73 65 73 2e 20 20 54 68 69 73 20  atabases.  This 
4ec0: 63 61 75 73 65 73 20 61 6c 6c 0a 20 20 20 20 2a  causes all.    *
4ed0: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  * database files
4ee0: 20 74 6f 20 62 65 20 6f 70 65 6e 65 64 20 61 6e   to be opened an
4ef0: 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  d the journal_mo
4f00: 64 65 73 20 73 65 74 2e 20 20 54 68 69 73 20 69  des set.  This i
4f10: 73 0a 20 20 20 20 2a 2a 20 6e 65 63 65 73 73 61  s.    ** necessa
4f20: 72 79 20 62 65 63 61 75 73 65 20 73 75 62 73 65  ry because subse
4f30: 71 75 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  quent processing
4f40: 20 6d 75 73 74 20 6b 6e 6f 77 20 69 66 20 74 68   must know if th
4f50: 65 20 64 61 74 61 62 61 73 65 73 0a 20 20 20 20  e databases.    
4f60: 2a 2a 20 61 72 65 20 69 6e 20 57 41 4c 20 6d 6f  ** are in WAL mo
4f70: 64 65 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 73  de. */.    if( s
4f80: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
4f90: 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20  (pParse) ){.    
4fa0: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
4fb0: 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  t;.    }..    sq
4fc0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
4fd0: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73  ols(v, 1);.    s
4fe0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
4ff0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
5000: 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f 75 72 6e 61  ME_NAME, "journa
5010: 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f  l_mode", SQLITE_
5020: 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 69 66  STATIC);..    if
5030: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
5040: 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65       /* If there
5050: 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70   is no "=MODE" p
5060: 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d  art of the pragm
5070: 61 2c 20 64 6f 20 61 20 71 75 65 72 79 20 66 6f  a, do a query fo
5080: 72 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 63  r the.      ** c
5090: 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20  urrent mode */. 
50a0: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47       eMode = PAG
50b0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
50c0: 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  UERY;.    }else{
50d0: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
50e0: 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20  r *zMode;.      
50f0: 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33 53  int n = sqlite3S
5100: 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 3b  trlen30(zRight);
5110: 0a 20 20 20 20 20 20 66 6f 72 28 65 4d 6f 64 65  .      for(eMode
5120: 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c  =0; (zMode = sql
5130: 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
5140: 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20  ame(eMode))!=0; 
5150: 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20  eMode++){.      
5160: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
5170: 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d  NICmp(zRight, zM
5180: 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65  ode, n)==0 ) bre
5190: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
51a0: 20 20 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a    if( !zMode ){.
51b0: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
51c0: 65 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 64  e "=MODE" part d
51d0: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e  oes not match an
51e0: 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20  y known journal 
51f0: 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a  mode,.        **
5200: 20 74 68 65 6e 20 64 6f 20 61 20 71 75 65 72 79   then do a query
5210: 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f 64   */.        eMod
5220: 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  e = PAGER_JOURNA
5230: 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20  LMODE_QUERY;.   
5240: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5250: 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  f( eMode==PAGER_
5260: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
5270: 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20  Y && pId2->n==0 
5280: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76  ){.      /* Conv
5290: 65 72 74 20 22 50 52 41 47 4d 41 20 6a 6f 75 72  ert "PRAGMA jour
52a0: 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22  nal_mode" into "
52b0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
52c0: 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20  nal_mode" */.   
52d0: 20 20 20 69 44 62 20 3d 20 30 3b 0a 20 20 20 20     iDb = 0;.    
52e0: 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20    pId2->n = 1;. 
52f0: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d     }.    for(ii=
5300: 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30  db->nDb-1; ii>=0
5310: 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69  ; ii--){.      i
5320: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
5330: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
5340: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
5350: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5360: 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
5370: 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 73 71   ii);.        sq
5380: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
5390: 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64  v, OP_JournalMod
53a0: 65 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29  e, ii, 1, eMode)
53b0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
53c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
53d0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
53e0: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
53f0: 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  }else..  /*.  **
5400: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
5410: 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  se.]journal_size
5420: 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41  _limit.  **  PRA
5430: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a  GMA [database.]j
5440: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
5450: 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65  t=N.  **.  ** Ge
5460: 74 20 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a  t or set the siz
5470: 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62  e limit on rollb
5480: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
5490: 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  s..  */.  if( sq
54a0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
54b0: 66 74 2c 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  ft,"journal_size
54c0: 5f 6c 69 6d 69 74 22 29 3d 3d 30 20 29 7b 0a 20  _limit")==0 ){. 
54d0: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
54e0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
54f0: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
5500: 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d      i64 iLimit =
5510: 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69   -2;.    if( zRi
5520: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
5530: 69 74 65 33 41 74 6f 69 36 34 28 7a 52 69 67 68  ite3Atoi64(zRigh
5540: 74 2c 20 26 69 4c 69 6d 69 74 2c 20 31 30 30 30  t, &iLimit, 1000
5550: 30 30 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  000, SQLITE_UTF8
5560: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69  );.      if( iLi
5570: 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20  mit<-1 ) iLimit 
5580: 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  = -1;.    }.    
5590: 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65 33  iLimit = sqlite3
55a0: 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65  PagerJournalSize
55b0: 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69 4c  Limit(pPager, iL
55c0: 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75 72  imit);.    retur
55d0: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
55e0: 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  e, "journal_size
55f0: 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d 69 74 29  _limit", iLimit)
5600: 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 65 6e 64 69  ;.  }else..#endi
5610: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
5620: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
5630: 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  /..  /*.  **  PR
5640: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
5650: 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a  auto_vacuum.  **
5660: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
5670: 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d  se.]auto_vacuum=
5680: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
5690: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
56a0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
56b0: 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70   'auto-vacuum' p
56c0: 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54  arameter..  ** T
56d0: 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20  he value is one 
56e0: 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55  of:  0 NONE 1 FU
56f0: 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c  LL 2 INCREMENTAL
5700: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
5710: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
5720: 43 55 55 4d 0a 20 20 69 66 28 20 73 71 6c 69 74  CUUM.  if( sqlit
5730: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
5740: 22 61 75 74 6f 5f 76 61 63 75 75 6d 22 29 3d 3d  "auto_vacuum")==
5750: 30 20 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  0 ){.    Btree *
5760: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
5770: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
5780: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 73 71  =0 );.    if( sq
5790: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
57a0: 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20 20  pParse) ){.     
57b0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
57c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
57d0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
57e0: 20 69 6e 74 20 61 75 74 6f 5f 76 61 63 75 75 6d   int auto_vacuum
57f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 41 4c 57 41  ;.      if( ALWA
5800: 59 53 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20  YS(pBt) ){.     
5810: 20 20 20 20 61 75 74 6f 5f 76 61 63 75 75 6d 20      auto_vacuum 
5820: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
5830: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 29  tAutoVacuum(pBt)
5840: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
5850: 20 20 20 20 20 20 20 20 61 75 74 6f 5f 76 61 63          auto_vac
5860: 75 75 6d 20 3d 20 53 51 4c 49 54 45 5f 44 45 46  uum = SQLITE_DEF
5870: 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d 3b  AULT_AUTOVACUUM;
5880: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
5890: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
58a0: 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63  Parse, "auto_vac
58b0: 75 75 6d 22 2c 20 61 75 74 6f 5f 76 61 63 75 75  uum", auto_vacuu
58c0: 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  m);.    }else{. 
58d0: 20 20 20 20 20 69 6e 74 20 65 41 75 74 6f 20 3d       int eAuto =
58e0: 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28 7a   getAutoVacuum(z
58f0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 61 73  Right);.      as
5900: 73 65 72 74 28 20 65 41 75 74 6f 3e 3d 30 20 26  sert( eAuto>=0 &
5910: 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a 20 20  & eAuto<=2 );.  
5920: 20 20 20 20 64 62 2d 3e 6e 65 78 74 41 75 74 6f      db->nextAuto
5930: 76 61 63 20 3d 20 28 75 38 29 65 41 75 74 6f 3b  vac = (u8)eAuto;
5940: 0a 20 20 20 20 20 20 69 66 28 20 41 4c 57 41 59  .      if( ALWAY
5950: 53 28 65 41 75 74 6f 3e 3d 30 29 20 29 7b 0a 20  S(eAuto>=0) ){. 
5960: 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20 53         /* Call S
5970: 65 74 41 75 74 6f 56 61 63 75 75 6d 28 29 20 74  etAutoVacuum() t
5980: 6f 20 73 65 74 20 69 6e 69 74 69 61 6c 69 7a 65  o set initialize
5990: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 61 75   the internal au
59a0: 74 6f 20 61 6e 64 0a 20 20 20 20 20 20 20 20 2a  to and.        *
59b0: 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c  * incr-vacuum fl
59c0: 61 67 73 2e 20 54 68 69 73 20 69 73 20 72 65 71  ags. This is req
59d0: 75 69 72 65 64 20 69 6e 20 63 61 73 65 20 74 68  uired in case th
59e0: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20  is connection.  
59f0: 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73        ** creates
5a00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5a10: 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  le. It is import
5a20: 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63  ant that it is c
5a30: 72 65 61 74 65 64 0a 20 20 20 20 20 20 20 20 2a  reated.        *
5a40: 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  * as an auto-vac
5a50: 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a  uum capable db..
5a60: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
5a70: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
5a80: 74 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75  treeSetAutoVacuu
5a90: 6d 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20  m(pBt, eAuto);. 
5aa0: 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
5ab0: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 28 65 41 75  QLITE_OK && (eAu
5ac0: 74 6f 3d 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d  to==1 || eAuto==
5ad0: 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  2) ){.          
5ae0: 2f 2a 20 57 68 65 6e 20 73 65 74 74 69 6e 67 20  /* When setting 
5af0: 74 68 65 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  the auto_vacuum 
5b00: 6d 6f 64 65 20 74 6f 20 65 69 74 68 65 72 20 22  mode to either "
5b10: 66 75 6c 6c 22 20 6f 72 20 0a 20 20 20 20 20 20  full" or .      
5b20: 20 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d 65 6e      ** "incremen
5b30: 74 61 6c 22 2c 20 77 72 69 74 65 20 74 68 65 20  tal", write the 
5b40: 76 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b 36 5d  value of meta[6]
5b50: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
5b60: 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 69  .          ** fi
5b70: 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74 69  le. Before writi
5b80: 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63  ng to meta[6], c
5b90: 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b 33  heck that meta[3
5ba0: 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 20  ] indicates.    
5bb0: 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
5bc0: 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20  is really is an 
5bd0: 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61  auto-vacuum capa
5be0: 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  ble database..  
5bf0: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
5c00: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
5c10: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74  t VdbeOpList set
5c20: 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20 20 20  Meta6[] = {.    
5c30: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
5c40: 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20  nsaction,    0, 
5c50: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
5c60: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5c70: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
5c80: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
5c90: 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20  ookie,     0,   
5ca0: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
5cb0: 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52   BTREE_LARGEST_R
5cc0: 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20  OOT_PAGE},.     
5cd0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20         { OP_If, 
5ce0: 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 20              1,  
5cf0: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
5d00: 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20            0},   
5d10: 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20   /* 2 */.       
5d20: 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20       { OP_Halt, 
5d30: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
5d40: 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20  _OK, OE_Abort,  
5d50: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
5d60: 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 3 */.         
5d70: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
5d80: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
5d90: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20     1,           
5da0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
5db0: 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  4 */.           
5dc0: 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c   { OP_SetCookie,
5dd0: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
5de0: 20 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55   BTREE_INCR_VACU
5df0: 55 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a 20 35 20  UM, 1},    /* 5 
5e00: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a  */.          };.
5e10: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 41            int iA
5e20: 64 64 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69  ddr;.          i
5e30: 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  Addr = sqlite3Vd
5e40: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
5e50: 72 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61  rraySize(setMeta
5e60: 36 29 2c 20 73 65 74 4d 65 74 61 36 29 3b 0a 20  6), setMeta6);. 
5e70: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
5e80: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5e90: 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20  iAddr, iDb);.   
5ea0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5eb0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
5ec0: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
5ed0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5ee0: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 69 41  beChangeP2(v, iA
5ef0: 64 64 72 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b  ddr+2, iAddr+4);
5f00: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
5f10: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
5f20: 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75 74 6f  , iAddr+4, eAuto
5f30: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  -1);.          s
5f40: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5f50: 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69  P1(v, iAddr+5, i
5f60: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Db);.          s
5f70: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
5f80: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
5f90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
5fa0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
5fb0: 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  dif..  /*.  **  
5fc0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
5fd0: 2e 5d 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61  .]incremental_va
5fe0: 63 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a  cuum(N).  **.  *
5ff0: 2a 20 44 6f 20 4e 20 73 74 65 70 73 20 6f 66 20  * Do N steps of 
6000: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
6010: 75 6d 69 6e 67 20 6f 6e 20 61 20 64 61 74 61 62  uming on a datab
6020: 61 73 65 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65  ase..  */.#ifnde
6030: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
6040: 54 4f 56 41 43 55 55 4d 0a 20 20 69 66 28 20 73  TOVACUUM.  if( s
6050: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
6060: 65 66 74 2c 22 69 6e 63 72 65 6d 65 6e 74 61 6c  eft,"incremental
6070: 5f 76 61 63 75 75 6d 22 29 3d 3d 30 20 29 7b 0a  _vacuum")==0 ){.
6080: 20 20 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20      int iLimit, 
6090: 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20 73 71  addr;.    if( sq
60a0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
60b0: 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20 20  pParse) ){.     
60c0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
60d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
60e0: 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73 71  zRight==0 || !sq
60f0: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52  lite3GetInt32(zR
6100: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20 7c  ight, &iLimit) |
6110: 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a 20  | iLimit<=0 ){. 
6120: 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30 78       iLimit = 0x
6130: 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a  7fffffff;.    }.
6140: 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e      sqlite3Begin
6150: 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70  WriteOperation(p
6160: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a  Parse, 0, iDb);.
6170: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6180: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
6190: 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29 3b  ger, iLimit, 1);
61a0: 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69  .    addr = sqli
61b0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
61c0: 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20   OP_IncrVacuum, 
61d0: 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iDb);.    sqlite
61e0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
61f0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 29 3b  P_ResultRow, 1);
6200: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
6210: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
6220: 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20  Imm, 1, -1);.   
6230: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
6240: 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p2(v, OP_IfPos, 
6250: 31 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 73 71  1, addr);.    sq
6260: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
6270: 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 7d 65  e(v, addr);.  }e
6280: 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  lse.#endif..#ifn
6290: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
62a0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20  PAGER_PRAGMAS.  
62b0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
62c0: 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65  [database.]cache
62d0: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
62e0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61  MA [database.]ca
62f0: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
6300: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
6310: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
6320: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
6330: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
6340: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
6350: 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66  ze. The second f
6360: 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63  orm sets the loc
6370: 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  al.  ** page cac
6380: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  he size value.  
6390: 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  If N is positive
63a0: 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68   then that is th
63b0: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
63c0: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61   pages in the ca
63d0: 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  che.  If N is ne
63e0: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
63f0: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
6400: 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65  pages is adjuste
6410: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61  d so that the ca
6420: 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69  che uses -N kibi
6430: 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65  bytes.  ** of me
6440: 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  mory..  */.  if(
6450: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
6460: 7a 4c 65 66 74 2c 22 63 61 63 68 65 5f 73 69 7a  zLeft,"cache_siz
6470: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  e")==0 ){.    if
6480: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
6490: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
64a0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
64b0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
64c0: 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
64d0: 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
64e0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
64f0: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
6500: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
6510: 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20  , "cache_size", 
6520: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
6530: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
6540: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
6550: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
6560: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
6570: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
6580: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
6590: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
65a0: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
65b0: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
65c0: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
65d0: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  size);.    }.  }
65e0: 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  else..  /*.  ** 
65f0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
6600: 65 2e 5d 6d 6d 61 70 5f 6c 69 6d 69 74 28 4e 29  e.]mmap_limit(N)
6610: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20  .  **.  ** Used 
6620: 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73  to set mapping s
6630: 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d  ize limit. The m
6640: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
6650: 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74  t is.  ** used t
6660: 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72  o limit the aggr
6670: 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c  egate size of al
6680: 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20  l memory mapped 
6690: 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20  regions of the. 
66a0: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c   ** database fil
66b0: 65 2e 20 49 66 20 74 68 69 73 20 70 61 72 61 6d  e. If this param
66c0: 65 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a  eter is set to z
66d0: 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79  ero, then memory
66e0: 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73   mapping.  ** is
66f0: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
6700: 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
6710: 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e  N is measured in
6720: 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a   bytes..  **.  *
6730: 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20  * This value is 
6740: 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75  advisory.  The u
6750: 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73  nderlying VFS is
6760: 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20   free to memory 
6770: 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74  map.  ** as litt
6780: 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73  le or as much as
6790: 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65   it wants.  Exce
67a0: 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20  pt, if N is set 
67b0: 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20  to 0 then the.  
67c0: 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72 73 20  ** upper layers 
67d0: 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b  will never invok
67e0: 65 20 74 68 65 20 78 46 65 74 63 68 20 69 6e 74  e the xFetch int
67f0: 65 72 66 61 63 65 73 20 74 6f 20 74 68 65 20 56  erfaces to the V
6800: 46 53 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  FS..  */.  if( s
6810: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
6820: 65 66 74 2c 22 6d 6d 61 70 5f 6c 69 6d 69 74 22  eft,"mmap_limit"
6830: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  )==0 ){.    asse
6840: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
6850: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
6860: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
6870: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
6880: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
6890: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
68a0: 74 65 33 41 74 6f 69 36 34 28 7a 52 69 67 68 74  te3Atoi64(zRight
68b0: 2c 20 26 73 69 7a 65 2c 20 31 30 30 30 2c 20 53  , &size, 1000, S
68c0: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20  QLITE_UTF8);.   
68d0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
68e0: 65 74 4d 6d 61 70 4c 69 6d 69 74 28 70 44 62 2d  etMmapLimit(pDb-
68f0: 3e 70 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20 20  >pBt, size);.   
6900: 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a   }.  }else..  /*
6910: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
6920: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a 20 20  emp_store.  **  
6930: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6940: 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22 7c 22  re = "default"|"
6950: 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a 20  memory"|"file". 
6960: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
6970: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
6980: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
6990: 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e 20 20  mp_store flag.  
69a0: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
69b0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f  e local value do
69c0: 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e  es not make chan
69d0: 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20  ges to the disk 
69e0: 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64 65 66  file and the def
69f0: 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20  ault.  ** value 
6a00: 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64  will be restored
6a10: 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74   the next time t
6a20: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f  he database is o
6a30: 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  pened..  **.  **
6a40: 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69 73   Note that it is
6a50: 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68   possible for th
6a60: 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c  e library compil
6a70: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74  e-time options t
6a80: 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64 65 20  o.  ** override 
6a90: 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20 20 2a  this setting.  *
6aa0: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  /.  if( sqlite3S
6ab0: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 74  trICmp(zLeft, "t
6ac0: 65 6d 70 5f 73 74 6f 72 65 22 29 3d 3d 30 20 29  emp_store")==0 )
6ad0: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
6ae0: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
6af0: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
6b00: 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c  e, "temp_store",
6b10: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 29   db->temp_store)
6b20: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6b30: 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f     changeTempSto
6b40: 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a 52 69  rage(pParse, zRi
6b50: 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  ght);.    }.  }e
6b60: 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  lse..  /*.  **  
6b70: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6b80: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
6b90: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
6ba0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
6bb0: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
6bc0: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
6bd0: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
6be0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
6bf0: 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f   the temp_store_
6c00: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
6c10: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
6c20: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
6c30: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
6c40: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
6c50: 72 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  r temporary file
6c60: 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20  s..  ** Setting 
6c70: 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67  to a null string
6c80: 20 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20   reverts to the 
6c90: 64 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72  default temporar
6ca0: 79 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72  y directory sear
6cb0: 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70  ch..  ** If temp
6cc0: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
6cd0: 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e  is changed, then
6ce0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
6cf0: 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a  torage..  **.  *
6d00: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  /.  if( sqlite3S
6d10: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 74  trICmp(zLeft, "t
6d20: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6d30: 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ory")==0 ){.    
6d40: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
6d50: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
6d60: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
6d70: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
6d80: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
6d90: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  (v, 1);.        
6da0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
6db0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
6dc0: 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20  AME_NAME, .     
6dd0: 20 20 20 20 20 20 20 22 74 65 6d 70 5f 73 74 6f         "temp_sto
6de0: 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53  re_directory", S
6df0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
6e00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
6e10: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
6e20: 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
6e30: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
6e40: 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20  rectory, 0);.   
6e50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
6e60: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
6e70: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
6e80: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
6e90: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
6ea0: 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20  _OMIT_WSD.      
6eb0: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
6ec0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73  .        int res
6ed0: 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
6ee0: 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64  qlite3OsAccess(d
6ef0: 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c  b->pVfs, zRight,
6f00: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52   SQLITE_ACCESS_R
6f10: 45 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b  EADWRITE, &res);
6f20: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
6f30: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65  =SQLITE_OK || re
6f40: 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
6f50: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
6f60: 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61  g(pParse, "not a
6f70: 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74   writable direct
6f80: 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ory");.         
6f90: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
6fa0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
6fb0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 53 51    }.      if( SQ
6fc0: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
6fd0: 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51  =0.       || (SQ
6fe0: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
6ff0: 3d 31 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73  =1 && db->temp_s
7000: 74 6f 72 65 3c 3d 31 29 0a 20 20 20 20 20 20 20  tore<=1).       
7010: 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f  || (SQLITE_TEMP_
7020: 53 54 4f 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e  STORE==2 && db->
7030: 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20  temp_store==1). 
7040: 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
7050: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
7060: 6f 72 61 67 65 28 70 50 61 72 73 65 29 3b 0a 20  orage(pParse);. 
7070: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
7080: 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65  ite3_free(sqlite
7090: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
70a0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  );.      if( zRi
70b0: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
70c0: 20 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64    sqlite3_temp_d
70d0: 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74  irectory = sqlit
70e0: 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
70f0: 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20   zRight);.      
7100: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
7110: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
7120: 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20  ctory = 0;.     
7130: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
7140: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a  ITE_OMIT_WSD */.
7150: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23      }.  }else..#
7160: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
7170: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7180: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
7190: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
71a0: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
71b0: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
71c0: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
71d0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
71e0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
71f0: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
7200: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
7210: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
7220: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
7230: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
7240: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
7250: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
7260: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
7270: 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63  t.  ** were spec
7280: 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65 6c  ified with a rel
7290: 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20  ative pathname. 
72a0: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
72b0: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
72c0: 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65  s.  ** to the de
72d0: 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 64  fault database d
72e0: 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20  irectory, which 
72f0: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
7300: 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69 74  es specified wit
7310: 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76  h.  ** a relativ
7320: 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62  e path will prob
7330: 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e  ably be based on
7340: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 72   the current dir
7350: 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20  ectory for the. 
7360: 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61   ** process.  Da
7370: 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65 63  tabase file spec
7380: 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61 62  ified with an ab
7390: 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65 20  solute path are 
73a0: 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a  not impacted.  *
73b0: 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69 6e  * by this settin
73c0: 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  g, regardless of
73d0: 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a   its value..  **
73e0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
73f0: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
7400: 2c 20 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  , "data_store_di
7410: 72 65 63 74 6f 72 79 22 29 3d 3d 30 20 29 7b 0a  rectory")==0 ){.
7420: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
7430: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
7440: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
7450: 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ory ){.        s
7460: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
7470: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
7480: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
7490: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
74a0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20  COLNAME_NAME, . 
74b0: 20 20 20 20 20 20 20 20 20 20 20 22 64 61 74 61             "data
74c0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
74d0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
74e0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
74f0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
7500: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
7510: 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 64 61 74  , 0, sqlite3_dat
7520: 61 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b  a_directory, 0);
7530: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
7540: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
7550: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
7560: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
7570: 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51  else{.#ifndef SQ
7580: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
7590: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
75a0: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  ] ){.        int
75b0: 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63   res;.        rc
75c0: 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65   = sqlite3OsAcce
75d0: 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69  ss(db->pVfs, zRi
75e0: 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45  ght, SQLITE_ACCE
75f0: 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72  SS_READWRITE, &r
7600: 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
7610: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
7620: 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  | res==0 ){.    
7630: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
7640: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e  orMsg(pParse, "n
7650: 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69  ot a writable di
7660: 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20  rectory");.     
7670: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
7680: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  _out;.        }.
7690: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
76a0: 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74  lite3_free(sqlit
76b0: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
76c0: 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52  y);.      if( zR
76d0: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
76e0: 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f     sqlite3_data_
76f0: 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69  directory = sqli
7700: 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
7710: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  , zRight);.     
7720: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
7730: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
7740: 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20  ectory = 0;.    
7750: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
7760: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f  LITE_OMIT_WSD */
7770: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23  .    }.  }else.#
7780: 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
7790: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
77a0: 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 29  E_LOCKING_STYLE)
77b0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
77c0: 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 20 20 64  _APPLE__).#    d
77d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
77e0: 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c  BLE_LOCKING_STYL
77f0: 45 20 31 0a 23 20 20 65 6c 73 65 0a 23 20 20 20  E 1.#  else.#   
7800: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
7810: 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
7820: 59 4c 45 20 30 0a 23 20 20 65 6e 64 69 66 0a 23  YLE 0.#  endif.#
7830: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
7840: 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f  _ENABLE_LOCKING_
7850: 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20 20 2a 2a  STYLE.  /*.   **
7860: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
7870: 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f  ase.]lock_proxy_
7880: 66 69 6c 65 0a 20 20 20 2a 2a 20 20 20 50 52 41  file.   **   PRA
7890: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
78a0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d  ock_proxy_file =
78b0: 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f   ":auto:"|"lock_
78c0: 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 20 2a 2a  file_path".   **
78d0: 0a 20 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  .   ** Return or
78e0: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
78f0: 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79  f the lock_proxy
7900: 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61  _file flag.  Cha
7910: 6e 67 69 6e 67 0a 20 20 20 2a 2a 20 74 68 65 20  nging.   ** the 
7920: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
7930: 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65  cific file to be
7940: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
7950: 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e  se access locks.
7960: 0a 20 20 20 2a 2a 0a 20 20 20 2a 2f 0a 20 20 69  .   **.   */.  i
7970: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
7980: 70 28 7a 4c 65 66 74 2c 20 22 6c 6f 63 6b 5f 70  p(zLeft, "lock_p
7990: 72 6f 78 79 5f 66 69 6c 65 22 29 3d 3d 30 20 29  roxy_file")==0 )
79a0: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
79b0: 74 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72  t ){.      Pager
79c0: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
79d0: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
79e0: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68  ->pBt);.      ch
79f0: 61 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70  ar *proxy_file_p
7a00: 61 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  ath = NULL;.    
7a10: 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a    sqlite3_file *
7a20: 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  pFile = sqlite3P
7a30: 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29  agerFile(pPager)
7a40: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
7a50: 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74  sFileControlHint
7a60: 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47  (pFile, SQLITE_G
7a70: 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45  ET_LOCKPROXYFILE
7a80: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70                &p
7aa0: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b  roxy_file_path);
7ab0: 0a 20 20 20 20 20 20 0a 20 20 20 20 20 20 69 66  .      .      if
7ac0: 28 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74  ( proxy_file_pat
7ad0: 68 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  h ){.        sql
7ae0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
7af0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
7b00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7b10: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
7b20: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20  LNAME_NAME, .   
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 6b             "lock
7b50: 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 53 51  _proxy_file", SQ
7b60: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
7b70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7b80: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
7b90: 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
7ba0: 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 2c  proxy_file_path,
7bb0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
7bc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
7bd0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
7be0: 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 1);.      }. 
7bf0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7c00: 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20  Pager *pPager = 
7c10: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
7c20: 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  r(pDb->pBt);.   
7c30: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20     sqlite3_file 
7c40: 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33  *pFile = sqlite3
7c50: 50 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72  PagerFile(pPager
7c60: 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73  );.      int res
7c70: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  ;.      if( zRig
7c80: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
7c90: 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69   res=sqlite3OsFi
7ca0: 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c  leControl(pFile,
7cb0: 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b   SQLITE_SET_LOCK
7cc0: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20   zRight);.      
7d00: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
7d10: 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69   res=sqlite3OsFi
7d20: 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c  leControl(pFile,
7d30: 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b   SQLITE_SET_LOCK
7d40: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d70: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a   NULL);.      }.
7d80: 20 20 20 20 20 20 69 66 28 20 72 65 73 21 3d 53        if( res!=S
7d90: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
7da0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
7db0: 4d 73 67 28 70 50 61 72 73 65 2c 20 22 66 61 69  Msg(pParse, "fai
7dc0: 6c 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20  led to set lock 
7dd0: 70 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20  proxy file");.  
7de0: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
7df0: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  a_out;.      }. 
7e00: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
7e10: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
7e20: 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59  ABLE_LOCKING_STY
7e30: 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20  LE */      .    
7e40: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7e50: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
7e60: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
7e70: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7e80: 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  se.]synchronous=
7e90: 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55  OFF|ON|NORMAL|FU
7ea0: 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  LL.  **.  ** Ret
7eb0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
7ec0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
7ed0: 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c  e synchronous fl
7ee0: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
7ef0: 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  ** the local val
7f00: 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  ue does not make
7f10: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
7f20: 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68  disk file and th
7f30: 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76  e.  ** default v
7f40: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
7f50: 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74  tored the next t
7f60: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
7f70: 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e   is.  ** opened.
7f80: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
7f90: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
7fa0: 2c 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 29 3d  ,"synchronous")=
7fb0: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71  =0 ){.    if( sq
7fc0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
7fd0: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
7fe0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 69  ragma_out;.    i
7ff0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
8000: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
8010: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 73 79 6e  Int(pParse, "syn
8020: 63 68 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e  chronous", pDb->
8030: 73 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b  safety_level-1);
8040: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
8050: 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
8060: 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
8070: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
8080: 28 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20  (pParse, .      
8090: 20 20 20 20 20 20 22 53 61 66 65 74 79 20 6c 65        "Safety le
80a0: 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63  vel may not be c
80b0: 68 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20  hanged inside a 
80c0: 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20  transaction");. 
80d0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
80e0: 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f      pDb->safety_
80f0: 6c 65 76 65 6c 20 3d 20 67 65 74 53 61 66 65 74  level = getSafet
8100: 79 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c 30 2c  yLevel(zRight,0,
8110: 31 29 2b 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20  1)+1;.      }.  
8120: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
8130: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
8140: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
8150: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
8160: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
8170: 47 4d 41 53 0a 20 20 69 66 28 20 66 6c 61 67 50  GMAS.  if( flagP
8180: 72 61 67 6d 61 28 70 50 61 72 73 65 2c 20 7a 4c  ragma(pParse, zL
8190: 65 66 74 2c 20 7a 52 69 67 68 74 29 20 29 7b 0a  eft, zRight) ){.
81a0: 20 20 20 20 2f 2a 20 54 68 65 20 66 6c 61 67 50      /* The flagP
81b0: 72 61 67 6d 61 28 29 20 73 75 62 72 6f 75 74 69  ragma() subrouti
81c0: 6e 65 20 61 6c 73 6f 20 67 65 6e 65 72 61 74 65  ne also generate
81d0: 73 20 61 6e 79 20 6e 65 63 65 73 73 61 72 79 20  s any necessary 
81e0: 63 6f 64 65 0a 20 20 20 20 2a 2a 20 74 68 65 72  code.    ** ther
81f0: 65 20 69 73 20 6e 6f 74 68 69 6e 67 20 6d 6f 72  e is nothing mor
8200: 65 20 74 6f 20 64 6f 20 68 65 72 65 20 2a 2f 0a  e to do here */.
8210: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f    }else.#endif /
8220: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  * SQLITE_OMIT_FL
8230: 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  AG_PRAGMAS */..#
8240: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8250: 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41  IT_SCHEMA_PRAGMA
8260: 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  S.  /*.  **   PR
8270: 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28  AGMA table_info(
8280: 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20  <table>).  **.  
8290: 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 69 6e 67  ** Return a sing
82a0: 6c 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20  le row for each 
82b0: 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61  column of the na
82c0: 6d 65 64 20 74 61 62 6c 65 2e 20 54 68 65 20 63  med table. The c
82d0: 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74  olumns of.  ** t
82e0: 68 65 20 72 65 74 75 72 6e 65 64 20 64 61 74 61  he returned data
82f0: 20 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20   set are:.  **. 
8300: 20 2a 2a 20 63 69 64 3a 20 20 20 20 20 20 20 20   ** cid:        
8310: 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65  Column id (numbe
8320: 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  red from left to
8330: 20 72 69 67 68 74 2c 20 73 74 61 72 74 69 6e 67   right, starting
8340: 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65   at 0).  ** name
8350: 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e  :       Column n
8360: 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20  ame.  ** type:  
8370: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c       Column decl
8380: 61 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20  aration type..  
8390: 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54  ** notnull:    T
83a0: 72 75 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c  rue if 'NOT NULL
83b0: 27 20 69 73 20 70 61 72 74 20 6f 66 20 63 6f 6c  ' is part of col
83c0: 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a  umn declaration.
83d0: 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a    ** dflt_value:
83e0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
83f0: 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ue for the colum
8400: 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a  n, if any..  */.
8410: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
8420: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 74 61 62  ICmp(zLeft, "tab
8430: 6c 65 5f 69 6e 66 6f 22 29 3d 3d 30 20 26 26 20  le_info")==0 && 
8440: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 54 61  zRight ){.    Ta
8450: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69  ble *pTab;.    i
8460: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
8470: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
8480: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
8490: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
84a0: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
84b0: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
84c0: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
84d0: 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20      int i, k;.  
84e0: 20 20 20 20 69 6e 74 20 6e 48 69 64 64 65 6e 20      int nHidden 
84f0: 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d  = 0;.      Colum
8500: 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49  n *pCol;.      I
8510: 6e 64 65 78 20 2a 70 50 6b 3b 0a 20 20 20 20 20  ndex *pPk;.     
8520: 20 66 6f 72 28 70 50 6b 3d 70 54 61 62 2d 3e 70   for(pPk=pTab->p
8530: 49 6e 64 65 78 3b 20 70 50 6b 20 26 26 20 70 50  Index; pPk && pP
8540: 6b 2d 3e 61 75 74 6f 49 6e 64 65 78 21 3d 32 3b  k->autoIndex!=2;
8550: 20 70 50 6b 3d 70 50 6b 2d 3e 70 4e 65 78 74 29   pPk=pPk->pNext)
8560: 7b 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  {}.      sqlite3
8570: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
8580: 2c 20 36 29 3b 0a 20 20 20 20 20 20 70 50 61 72  , 6);.      pPar
8590: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20  se->nMem = 6;.  
85a0: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
85b0: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
85c0: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
85d0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
85e0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
85f0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c  AME_NAME, "cid",
8600: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
8610: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8620: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
8630: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
8640: 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f   "name", SQLITE_
8650: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
8660: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8670: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
8680: 4d 45 5f 4e 41 4d 45 2c 20 22 74 79 70 65 22 2c  ME_NAME, "type",
8690: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
86a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
86b0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
86c0: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
86d0: 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c 49   "notnull", SQLI
86e0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
86f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8700: 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f  ColName(v, 4, CO
8710: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c  LNAME_NAME, "dfl
8720: 74 5f 76 61 6c 75 65 22 2c 20 53 51 4c 49 54 45  t_value", SQLITE
8730: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
8740: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8750: 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e  lName(v, 5, COLN
8760: 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c 20  AME_NAME, "pk", 
8770: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8780: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 69 65        sqlite3Vie
8790: 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
87a0: 70 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a 20  pParse, pTab);. 
87b0: 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 70 43       for(i=0, pC
87c0: 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69  ol=pTab->aCol; i
87d0: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b  <pTab->nCol; i++
87e0: 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20  , pCol++){.     
87f0: 20 20 20 69 66 28 20 49 73 48 69 64 64 65 6e 43     if( IsHiddenC
8800: 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20  olumn(pCol) ){. 
8810: 20 20 20 20 20 20 20 20 20 6e 48 69 64 64 65 6e           nHidden
8820: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f  ++;.          co
8830: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
8840: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
8850: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8860: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 6e 48 69  P_Integer, i-nHi
8870: 64 64 65 6e 2c 20 31 29 3b 0a 20 20 20 20 20 20  dden, 1);.      
8880: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8890: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
88a0: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c  8, 0, 2, 0, pCol
88b0: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
88c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
88d0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
88e0: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
88f0: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e            pCol->
8900: 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54  zType ? pCol->zT
8910: 79 70 65 20 3a 20 22 22 2c 20 30 29 3b 0a 20 20  ype : "", 0);.  
8920: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8930: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
8940: 74 65 67 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f  teger, (pCol->no
8950: 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 29 2c 20  tNull ? 1 : 0), 
8960: 34 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  4);.        if( 
8970: 70 43 6f 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20  pCol->zDflt ){. 
8980: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
8990: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
89a0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20  _String8, 0, 5, 
89b0: 30 2c 20 28 63 68 61 72 2a 29 70 43 6f 6c 2d 3e  0, (char*)pCol->
89c0: 7a 44 66 6c 74 2c 20 30 29 3b 0a 20 20 20 20 20  zDflt, 0);.     
89d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
89e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
89f0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c  ddOp2(v, OP_Null
8a00: 2c 20 30 2c 20 35 29 3b 0a 20 20 20 20 20 20 20  , 0, 5);.       
8a10: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28   }.        if( (
8a20: 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  pCol->colFlags &
8a30: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
8a40: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
8a50: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    k = 0;.       
8a60: 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d   }else if( pPk==
8a70: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
8a80: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
8a90: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
8aa0: 6f 72 28 6b 3d 31 3b 20 41 4c 57 41 59 53 28 6b  or(k=1; ALWAYS(k
8ab0: 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 29 20 26 26  <=pTab->nCol) &&
8ac0: 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b   pPk->aiColumn[k
8ad0: 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20  -1]!=i; k++){}. 
8ae0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
8af0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8b00: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
8b10: 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20 20 20  , k, 6);.       
8b20: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8b30: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
8b40: 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20  ow, 1, 6);.     
8b50: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
8b60: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ..  if( sqlite3S
8b70: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 69  trICmp(zLeft, "i
8b80: 6e 64 65 78 5f 69 6e 66 6f 22 29 3d 3d 30 20 26  ndex_info")==0 &
8b90: 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  & zRight ){.    
8ba0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
8bb0: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
8bc0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61    if( sqlite3Rea
8bd0: 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20  dSchema(pParse) 
8be0: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
8bf0: 74 3b 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71  t;.    pIdx = sq
8c00: 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64  lite3FindIndex(d
8c10: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  b, zRight, zDb);
8c20: 0a 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b  .    if( pIdx ){
8c30: 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
8c40: 20 20 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d      pTab = pIdx-
8c50: 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73  >pTable;.      s
8c60: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
8c70: 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20  Cols(v, 3);.    
8c80: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
8c90: 20 33 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   3;.      sqlite
8ca0: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
8cb0: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
8cc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8cd0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
8ce0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
8cf0: 22 73 65 71 6e 6f 22 2c 20 53 51 4c 49 54 45 5f  "seqno", SQLITE_
8d00: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
8d10: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8d20: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
8d30: 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20  ME_NAME, "cid", 
8d40: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8d50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8d60: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
8d70: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
8d80: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
8d90: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f  TATIC);.      fo
8da0: 72 28 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e 6e  r(i=0; i<pIdx->n
8db0: 43 6f 6c 75 6d 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Column; i++){.  
8dc0: 20 20 20 20 20 20 69 6e 74 20 63 6e 75 6d 20 3d        int cnum =
8dd0: 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b   pIdx->aiColumn[
8de0: 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  i];.        sqli
8df0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8e00: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20   OP_Integer, i, 
8e10: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
8e20: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8e30: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75   OP_Integer, cnu
8e40: 6d 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 61  m, 2);.        a
8e50: 73 73 65 72 74 28 20 70 54 61 62 2d 3e 6e 43 6f  ssert( pTab->nCo
8e60: 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20 20 20 20 20  l>cnum );.      
8e70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8e80: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
8e90: 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 54 61 62  8, 0, 3, 0, pTab
8ea0: 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61  ->aCol[cnum].zNa
8eb0: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
8ec0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8ed0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
8ee0: 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20  w, 1, 3);.      
8ef0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
8f00: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
8f10: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 69 6e  rICmp(zLeft, "in
8f20: 64 65 78 5f 6c 69 73 74 22 29 3d 3d 30 20 26 26  dex_list")==0 &&
8f30: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49   zRight ){.    I
8f40: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
8f50: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
8f60: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
8f70: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
8f80: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
8f90: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
8fa0: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
8fb0: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
8fc0: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
8fd0: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
8fe0: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
8ff0: 3b 0a 20 20 20 20 20 20 70 49 64 78 20 3d 20 70  ;.      pIdx = p
9000: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 0a 20 20 20  Tab->pIndex;.   
9010: 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20     if( pIdx ){. 
9020: 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30         int i = 0
9030: 3b 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ; .        sqlit
9040: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
9050: 28 76 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  (v, 3);.        
9060: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
9070: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9080: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
9090: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
90a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
90b0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
90c0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
90d0: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
90e0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
90f0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9100: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
9110: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
9120: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9130: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9140: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
9150: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
9160: 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c 20 53  AME, "unique", S
9170: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
9180: 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 49 64         while(pId
9190: 78 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  x){.          sq
91a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
91b0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
91c0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
91d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
91e0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
91f0: 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e   0, 2, 0, pIdx->
9200: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
9210: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9220: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
9230: 65 67 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45 72  eger, pIdx->onEr
9240: 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 33 29  ror!=OE_None, 3)
9250: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
9260: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9270: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9280: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
9290: 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70  ++i;.          p
92a0: 49 64 78 20 3d 20 70 49 64 78 2d 3e 70 4e 65 78  Idx = pIdx->pNex
92b0: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
92c0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
92d0: 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  se..  if( sqlite
92e0: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
92f0: 22 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22 29  "database_list")
9300: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ==0 ){.    int i
9310: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
9320: 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72  3ReadSchema(pPar
9330: 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  se) ) goto pragm
9340: 61 5f 6f 75 74 3b 0a 20 20 20 20 73 71 6c 69 74  a_out;.    sqlit
9350: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
9360: 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72  (v, 3);.    pPar
9370: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20  se->nMem = 3;.  
9380: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9390: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
93a0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
93b0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
93c0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
93d0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
93e0: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
93f0: 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f   "name", SQLITE_
9400: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
9410: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
9420: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
9430: 5f 4e 41 4d 45 2c 20 22 66 69 6c 65 22 2c 20 53  _NAME, "file", S
9440: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
9450: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
9460: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
9470: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
9480: 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69  ].pBt==0 ) conti
9490: 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65 72  nue;.      asser
94a0: 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  t( db->aDb[i].zN
94b0: 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  ame!=0 );.      
94c0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
94d0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
94e0: 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71   i, 1);.      sq
94f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
9500: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
9510: 2c 20 32 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b  , 2, 0, db->aDb[
9520: 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  i].zName, 0);.  
9530: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9540: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
9550: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20  ng8, 0, 3, 0,.  
9560: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9570: 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d 65  BtreeGetFilename
9580: 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29  (db->aDb[i].pBt)
9590: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
95a0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
95b0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
95c0: 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  , 3);.    }.  }e
95d0: 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  lse..  if( sqlit
95e0: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
95f0: 20 22 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74   "collation_list
9600: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  ")==0 ){.    int
9610: 20 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73 68   i = 0;.    Hash
9620: 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 73 71 6c  Elem *p;.    sql
9630: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
9640: 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50  ls(v, 2);.    pP
9650: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
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 30 2c 20  etColName(v, 0, 
9680: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
9690: 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  eq", SQLITE_STAT
96a0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
96b0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
96c0: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
96d0: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
96e0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66  E_STATIC);.    f
96f0: 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46  or(p=sqliteHashF
9700: 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  irst(&db->aCollS
9710: 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65  eq); p; p=sqlite
9720: 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20  HashNext(p)){.  
9730: 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f      CollSeq *pCo
9740: 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29  ll = (CollSeq *)
9750: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70  sqliteHashData(p
9760: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9770: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9780: 5f 49 6e 74 65 67 65 72 2c 20 69 2b 2b 2c 20 31  _Integer, i++, 1
9790: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
97a0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
97b0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
97c0: 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c  0, pColl->zName,
97d0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
97e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
97f0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
9800: 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   2);.    }.  }el
9810: 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  se.#endif /* SQL
9820: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
9830: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
9840: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9850: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 69 66  FOREIGN_KEY.  if
9860: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
9870: 28 7a 4c 65 66 74 2c 20 22 66 6f 72 65 69 67 6e  (zLeft, "foreign
9880: 5f 6b 65 79 5f 6c 69 73 74 22 29 3d 3d 30 20 26  _key_list")==0 &
9890: 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  & zRight ){.    
98a0: 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54  FKey *pFK;.    T
98b0: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
98c0: 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53  if( sqlite3ReadS
98d0: 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20  chema(pParse) ) 
98e0: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
98f0: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
9900: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
9910: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
9920: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
9930: 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
9940: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
9950: 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61  .      pFK = pTa
9960: 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20  b->pFKey;.      
9970: 69 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20  if( pFK ){.     
9980: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20     int i = 0; . 
9990: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
99a0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
99b0: 38 29 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72  8);.        pPar
99c0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20  se->nMem = 8;.  
99d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
99e0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
99f0: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
9a00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9a10: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
9a20: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69  COLNAME_NAME, "i
9a30: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
9a40: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
9a50: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
9a60: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
9a70: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
9a80: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9a90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9aa0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
9ab0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9ac0: 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  table", SQLITE_S
9ad0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
9ae0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
9af0: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
9b00: 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d 22  AME_NAME, "from"
9b10: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9b20: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9b30: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9b40: 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 4, COLNAME_NA
9b50: 4d 45 2c 20 22 74 6f 22 2c 20 53 51 4c 49 54 45  ME, "to", SQLITE
9b60: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
9b70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9b80: 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f  ColName(v, 5, CO
9b90: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f  LNAME_NAME, "on_
9ba0: 75 70 64 61 74 65 22 2c 20 53 51 4c 49 54 45 5f  update", SQLITE_
9bb0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
9bc0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9bd0: 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c 20 43 4f 4c  olName(v, 6, COL
9be0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64  NAME_NAME, "on_d
9bf0: 65 6c 65 74 65 22 2c 20 53 51 4c 49 54 45 5f 53  elete", SQLITE_S
9c00: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
9c10: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
9c20: 6c 4e 61 6d 65 28 76 2c 20 37 2c 20 43 4f 4c 4e  lName(v, 7, COLN
9c30: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d 61 74 63 68  AME_NAME, "match
9c40: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9c50: 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  );.        while
9c60: 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20  (pFK){.         
9c70: 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20   int j;.        
9c80: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b    for(j=0; j<pFK
9c90: 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20  ->nCol; j++){.  
9ca0: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
9cb0: 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c  zCol = pFK->aCol
9cc0: 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20 20  [j].zCol;.      
9cd0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 44        char *zOnD
9ce0: 65 6c 65 74 65 20 3d 20 28 63 68 61 72 20 2a 29  elete = (char *)
9cf0: 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e  actionName(pFK->
9d00: 61 41 63 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20  aAction[0]);.   
9d10: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
9d20: 4f 6e 55 70 64 61 74 65 20 3d 20 28 63 68 61 72  OnUpdate = (char
9d30: 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46   *)actionName(pF
9d40: 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a  K->aAction[1]);.
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
9d60: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9d70: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20   OP_Integer, i, 
9d80: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  1);.            
9d90: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9da0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
9db0: 20 6a 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20   j, 2);.        
9dc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9dd0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
9de0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 46  ng8, 0, 3, 0, pF
9df0: 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20  K->zTo, 0);.    
9e00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9e10: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
9e20: 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30  String8, 0, 4, 0
9e30: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e50: 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e  pTab->aCol[pFK->
9e60: 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a  aCol[j].iFrom].z
9e70: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
9e80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9e90: 65 41 64 64 4f 70 34 28 76 2c 20 7a 43 6f 6c 20  eAddOp4(v, zCol 
9ea0: 3f 20 4f 50 5f 53 74 72 69 6e 67 38 20 3a 20 4f  ? OP_String8 : O
9eb0: 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c  P_Null, 0, 5, 0,
9ec0: 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20   zCol, 0);.     
9ed0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9ee0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
9ef0: 74 72 69 6e 67 38 2c 20 30 2c 20 36 2c 20 30 2c  tring8, 0, 6, 0,
9f00: 20 7a 4f 6e 55 70 64 61 74 65 2c 20 30 29 3b 0a   zOnUpdate, 0);.
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
9f20: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
9f30: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
9f40: 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c  7, 0, zOnDelete,
9f50: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
9f60: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9f70: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
9f80: 2c 20 30 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e 45  , 0, 8, 0, "NONE
9f90: 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  ", 0);.         
9fa0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9fb0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9fc0: 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20  tRow, 1, 8);.   
9fd0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9fe0: 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20     ++i;.        
9ff0: 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65    pFK = pFK->pNe
a000: 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  xtFrom;.        
a010: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
a020: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f    }else.#endif /
a030: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
a040: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
a050: 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  EY) */..#ifndef 
a060: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
a070: 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20  IGN_KEY.#ifndef 
a080: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
a090: 47 45 52 0a 20 20 69 66 28 20 73 71 6c 69 74 65  GER.  if( sqlite
a0a0: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
a0b0: 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65  "foreign_key_che
a0c0: 63 6b 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 46  ck")==0 ){.    F
a0d0: 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20  Key *pFK;       
a0e0: 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69        /* A forei
a0f0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
a100: 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  t */.    Table *
a110: 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
a120: 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63  /* Child table c
a130: 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43  ontain "REFERENC
a140: 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20  ES" keyword */. 
a150: 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e     Table *pParen
a160: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72  t;        /* Par
a170: 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20 63  ent table that c
a180: 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a  hild points to *
a190: 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  /.    Index *pId
a1a0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  x;           /* 
a1b0: 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61 72  Index in the par
a1c0: 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  ent table */.   
a1d0: 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
a1e0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
a1f0: 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67  counter:  Foreig
a200: 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72  n key number for
a210: 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74   pTab */.    int
a220: 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
a230: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
a240: 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74  ter:  Field of t
a250: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a  he foreign key *
a260: 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  /.    HashElem *
a270: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  k;           /* 
a280: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e  Loop counter:  N
a290: 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68  ext table in sch
a2a0: 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78  ema */.    int x
a2b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a2c0: 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69    /* result vari
a2d0: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
a2e0: 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20  regResult;      
a2f0: 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72     /* 3 register
a300: 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75  s to hold a resu
a310: 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e  lt row */.    in
a320: 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20  t regKey;       
a330: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
a340: 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72   to hold key for
a350: 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b   checking the FK
a360: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
a370: 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ow;            /
a380: 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f 20 68  * Registers to h
a390: 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70  old a row from p
a3a0: 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  Tab */.    int a
a3b0: 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20  ddrTop;         
a3c0: 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f    /* Top of a lo
a3d0: 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65  op checking fore
a3e0: 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20  ign keys */.    
a3f0: 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20  int addrOk;     
a400: 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
a410: 65 72 65 20 69 66 20 74 68 65 20 6b 65 79 20 69  ere if the key i
a420: 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20  s OK */.    int 
a430: 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20  *aiCols;        
a440: 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70     /* child to p
a450: 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70  arent column map
a460: 70 69 6e 67 20 2a 2f 0a 0a 20 20 20 20 69 66 28  ping */..    if(
a470: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
a480: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
a490: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
a4a0: 20 20 72 65 67 52 65 73 75 6c 74 20 3d 20 70 50    regResult = pP
a4b0: 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20  arse->nMem+1;.  
a4c0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b    pParse->nMem +
a4d0: 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b 65 79 20  = 4;.    regKey 
a4e0: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
a4f0: 3b 0a 20 20 20 20 72 65 67 52 6f 77 20 3d 20 2b  ;.    regRow = +
a500: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
a510: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
a520: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
a530: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a540: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a  tNumCols(v, 4);.
a550: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
a560: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
a570: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
a580: 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  able", SQLITE_ST
a590: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
a5a0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
a5b0: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
a5c0: 41 4d 45 2c 20 22 72 6f 77 69 64 22 2c 20 53 51  AME, "rowid", SQ
a5d0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
a5e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a5f0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
a600: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 61 72  LNAME_NAME, "par
a610: 65 6e 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ent", SQLITE_STA
a620: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
a630: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
a640: 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 3, COLNAME_NA
a650: 4d 45 2c 20 22 66 6b 69 64 22 2c 20 53 51 4c 49  ME, "fkid", SQLI
a660: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
a670: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
a680: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
a690: 69 44 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71  iDb);.    k = sq
a6a0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
a6b0: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68  b->aDb[iDb].pSch
a6c0: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20  ema->tblHash);. 
a6d0: 20 20 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20     while( k ){. 
a6e0: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20       if( zRight 
a6f0: 29 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  ){.        pTab 
a700: 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54  = sqlite3LocateT
a710: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20  able(pParse, 0, 
a720: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
a730: 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20        k = 0;.   
a740: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
a750: 20 20 70 54 61 62 20 3d 20 28 54 61 62 6c 65 2a    pTab = (Table*
a760: 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28  )sqliteHashData(
a770: 6b 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20  k);.        k = 
a780: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 6b  sqliteHashNext(k
a790: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
a7a0: 20 69 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20   if( pTab==0 || 
a7b0: 70 54 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29  pTab->pFKey==0 )
a7c0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
a7d0: 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
a7e0: 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70  k(pParse, iDb, p
a7f0: 54 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54  Tab->tnum, 0, pT
a800: 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  ab->zName);.    
a810: 20 20 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c    if( pTab->nCol
a820: 2b 72 65 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e  +regRow>pParse->
a830: 6e 4d 65 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e  nMem ) pParse->n
a840: 4d 65 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c  Mem = pTab->nCol
a850: 20 2b 20 72 65 67 52 6f 77 3b 0a 20 20 20 20 20   + regRow;.     
a860: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
a870: 65 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62  e(pParse, 0, iDb
a880: 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52  , pTab, OP_OpenR
a890: 65 61 64 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ead);.      sqli
a8a0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
a8b0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
a8c0: 72 65 67 52 65 73 75 6c 74 2c 20 30 2c 20 70 54  regResult, 0, pT
a8d0: 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ab->zName,.     
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8f0: 20 20 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29     P4_TRANSIENT)
a900: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c  ;.      for(i=1,
a910: 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79   pFK=pTab->pFKey
a920: 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d  ; pFK; i++, pFK=
a930: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b  pFK->pNextFrom){
a940: 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74  .        pParent
a950: 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65   = sqlite3Locate
a960: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c  Table(pParse, 0,
a970: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
a980: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
a990: 72 65 6e 74 3d 3d 30 20 29 20 62 72 65 61 6b 3b  rent==0 ) break;
a9a0: 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20  .        pIdx = 
a9b0: 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  0;.        sqlit
a9c0: 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72  e3TableLock(pPar
a9d0: 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74  se, iDb, pParent
a9e0: 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65  ->tnum, 0, pPare
a9f0: 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  nt->zName);.    
aa00: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
aa10: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
aa20: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
aa30: 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20  K, &pIdx, 0);.  
aa40: 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29        if( x==0 )
aa50: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
aa60: 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20  pIdx==0 ){.     
aa70: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70         sqlite3Op
aa80: 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  enTable(pParse, 
aa90: 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c  i, iDb, pParent,
aaa0: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
aab0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 4b 65 79 49              KeyI
aad0: 6e 66 6f 20 2a 70 4b 65 79 20 3d 20 73 71 6c 69  nfo *pKey = sqli
aae0: 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28  te3IndexKeyinfo(
aaf0: 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a 20  pParse, pIdx);. 
ab00: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ab10: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
ab20: 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20  OP_OpenRead, i, 
ab30: 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29  pIdx->tnum, iDb)
ab40: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
ab50: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
ab60: 34 28 76 2c 20 2d 31 2c 20 28 63 68 61 72 2a 29  4(v, -1, (char*)
ab70: 70 4b 65 79 2c 20 50 34 5f 4b 45 59 49 4e 46 4f  pKey, P4_KEYINFO
ab80: 5f 48 41 4e 44 4f 46 46 29 3b 0a 20 20 20 20 20  _HANDOFF);.     
ab90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
aba0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
abb0: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  k = 0;.         
abc0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
abd0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
abe0: 69 66 28 20 70 46 4b 20 29 20 62 72 65 61 6b 3b  if( pFK ) break;
abf0: 0a 20 20 20 20 20 20 69 66 28 20 70 50 61 72 73  .      if( pPars
ac00: 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50 61 72  e->nTab<i ) pPar
ac10: 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20  se->nTab = i;.  
ac20: 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20 73 71      addrTop = sq
ac30: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
ac40: 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29  v, OP_Rewind, 0)
ac50: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c  ;.      for(i=1,
ac60: 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79   pFK=pTab->pFKey
ac70: 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d  ; pFK; i++, pFK=
ac80: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b  pFK->pNextFrom){
ac90: 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74  .        pParent
aca0: 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65   = sqlite3Locate
acb0: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c  Table(pParse, 0,
acc0: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
acd0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
ace0: 20 70 50 61 72 65 6e 74 21 3d 30 20 29 3b 0a 20   pParent!=0 );. 
acf0: 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b         pIdx = 0;
ad00: 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20  .        aiCols 
ad10: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 78 20 3d  = 0;.        x =
ad20: 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
ad30: 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70 50  Index(pParse, pP
ad40: 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64  arent, pFK, &pId
ad50: 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20  x, &aiCols);.   
ad60: 20 20 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d       assert( x==
ad70: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64  0 );.        add
ad80: 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62  rOk = sqlite3Vdb
ad90: 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
ada0: 20 20 20 20 20 20 20 69 66 28 20 70 49 64 78 3d         if( pIdx=
adb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
adc0: 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e  int iKey = pFK->
add0: 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20  aCol[0].iFrom;. 
ade0: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
adf0: 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79   iKey>=0 && iKey
ae00: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20  <pTab->nCol );. 
ae10: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65           if( iKe
ae20: 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29  y!=pTab->iPKey )
ae30: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
ae40: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
ae50: 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c  v, OP_Column, 0,
ae60: 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a   iKey, regRow);.
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
ae80: 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
ae90: 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20  (v, pTab, iKey, 
aea0: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
aeb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aec0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e  AddOp2(v, OP_IsN
aed0: 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64  ull, regRow, add
aee0: 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rOk);.          
aef0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
af00: 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65  Op2(v, OP_MustBe
af10: 49 6e 74 2c 20 72 65 67 52 6f 77 2c 0a 20 20 20  Int, regRow,.   
af20: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
af30: 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64  te3VdbeCurrentAd
af40: 64 72 28 76 29 2b 33 29 3b 0a 20 20 20 20 20 20  dr(v)+3);.      
af50: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
af60: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
af70: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
af80: 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77 29  owid, 0, regRow)
af90: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
afa0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
afb0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
afc0: 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30 2c  NotExists, i, 0,
afd0: 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20   regRow);.      
afe0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
aff0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f  ddOp2(v, OP_Goto
b000: 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20  , 0, addrOk);.  
b010: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b020: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73  dbeJumpHere(v, s
b030: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
b040: 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20  tAddr(v)-2);.   
b050: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
b060: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a        for(j=0; j
b070: 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29  <pFK->nCol; j++)
b080: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
b090: 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
b0a0: 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c  ColumnOfTable(v,
b0b0: 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20   pTab, 0,.      
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61        aiCols ? a
b0e0: 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e  iCols[j] : pFK->
b0f0: 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 2c 20 72  aCol[0].iFrom, r
b100: 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20  egRow+j);.      
b110: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b120: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73  eAddOp2(v, OP_Is
b130: 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20  Null, regRow+j, 
b140: 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20  addrOk);.       
b150: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73     }.          s
b160: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
b170: 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  (v, OP_MakeRecor
b180: 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e  d, regRow, pFK->
b190: 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 29 3b 0a 20  nCol, regKey);. 
b1a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b1b0: 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20  VdbeChangeP4(v, 
b1c0: 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  -1,.            
b1d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e         sqlite3In
b1e0: 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 76  dexAffinityStr(v
b1f0: 2c 70 49 64 78 29 2c 20 50 34 5f 54 52 41 4e 53  ,pIdx), P4_TRANS
b200: 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20  IENT);.         
b210: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b220: 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e  p4Int(v, OP_Foun
b230: 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65  d, i, addrOk, re
b240: 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  gKey, 0);.      
b250: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
b260: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
b270: 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65   OP_Rowid, 0, re
b280: 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20  gResult+1);.    
b290: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b2a0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
b2b0: 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c  ng8, 0, regResul
b2c0: 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  t+2, 0, .       
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2e0: 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f     pFK->zTo, P4_
b2f0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
b300: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b310: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
b320: 67 65 72 2c 20 69 2d 31 2c 20 72 65 67 52 65 73  ger, i-1, regRes
b330: 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20 20 20  ult+3);.        
b340: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b350: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
b360: 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34 29  w, regResult, 4)
b370: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
b380: 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65  3VdbeResolveLabe
b390: 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20  l(v, addrOk);.  
b3a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
b3b0: 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b  ree(db, aiCols);
b3c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
b3d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b3e0: 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20  (v, OP_Next, 0, 
b3f0: 61 64 64 72 54 6f 70 2b 31 29 3b 0a 20 20 20 20  addrTop+1);.    
b400: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
b410: 70 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70  pHere(v, addrTop
b420: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
b430: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
b440: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
b450: 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64  TRIGGER) */.#end
b460: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
b470: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
b480: 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e  GN_KEY) */..#ifn
b490: 64 65 66 20 4e 44 45 42 55 47 0a 20 20 69 66 28  def NDEBUG.  if(
b4a0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
b4b0: 7a 4c 65 66 74 2c 20 22 70 61 72 73 65 72 5f 74  zLeft, "parser_t
b4c0: 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  race")==0 ){.   
b4d0: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
b4e0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
b4f0: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
b500: 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20  t, 0) ){.       
b510: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
b520: 61 63 65 28 73 74 64 65 72 72 2c 20 22 70 61 72  ace(stderr, "par
b530: 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d  ser: ");.      }
b540: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
b550: 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
b560: 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  (0, 0);.      }.
b570: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65      }.  }else.#e
b580: 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73  ndif..  /* Reins
b590: 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e  tall the LIKE an
b5a0: 64 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73  d GLOB functions
b5b0: 2e 20 20 54 68 65 20 76 61 72 69 61 6e 74 20 6f  .  The variant o
b5c0: 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64  f LIKE.  ** used
b5d0: 20 77 69 6c 6c 20 62 65 20 63 61 73 65 20 73 65   will be case se
b5e0: 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f 74 20 64  nsitive or not d
b5f0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
b600: 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  RHS..  */.  if( 
b610: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
b620: 4c 65 66 74 2c 20 22 63 61 73 65 5f 73 65 6e 73  Left, "case_sens
b630: 69 74 69 76 65 5f 6c 69 6b 65 22 29 3d 3d 30 20  itive_like")==0 
b640: 29 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  ){.    if( zRigh
b650: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
b660: 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
b670: 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69  nctions(db, sqli
b680: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
b690: 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d  ight, 0));.    }
b6a0: 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65  .  }else..#ifnde
b6b0: 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  f SQLITE_INTEGRI
b6c0: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
b6d0: 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  AX.# define SQLI
b6e0: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
b6f0: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30  CK_ERROR_MAX 100
b700: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
b710: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
b720: 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f  EGRITY_CHECK.  /
b730: 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f  * Pragma "quick_
b740: 63 68 65 63 6b 22 20 69 73 20 61 6e 20 65 78 70  check" is an exp
b750: 65 72 69 6d 65 6e 74 61 6c 20 72 65 64 75 63 65  erimental reduce
b760: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20  d version of .  
b770: 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  ** integrity_che
b780: 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64  ck designed to d
b790: 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62  etect most datab
b7a0: 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20  ase corruption. 
b7b0: 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74   ** without most
b7c0: 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61 64   of the overhead
b7d0: 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67   of a full integ
b7e0: 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f  rity-check..  */
b7f0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
b800: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 69 6e  rICmp(zLeft, "in
b810: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 29 3d  tegrity_check")=
b820: 3d 30 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  =0.   || sqlite3
b830: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
b840: 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 3d 3d 30  quick_check")==0
b850: 20 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69   .  ){.    int i
b860: 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72 72  , j, addr, mxErr
b870: 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20 74  ;..    /* Code t
b880: 68 61 74 20 61 70 70 65 61 72 73 20 61 74 20 74  hat appears at t
b890: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
b8a0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e 20 20  tegrity check.  
b8b0: 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20 20  If no error.    
b8c0: 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61 76 65  ** messages have
b8d0: 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65 64 2c   been generated,
b8e0: 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74 68   output OK.  Oth
b8f0: 65 72 77 69 73 65 20 6f 75 74 70 75 74 20 74 68  erwise output th
b900: 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72 20 6d  e.    ** error m
b910: 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20 20  essage.    */.  
b920: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
b930: 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64  dbeOpList endCod
b940: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  e[] = {.      { 
b950: 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20  OP_AddImm,      
b960: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 0,        0},
b970: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
b980: 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20 20    { OP_IfNeg,   
b990: 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20      1, 0,       
b9a0: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
b9b0: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
b9c0: 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20  g8,     0, 3,   
b9d0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32       0},    /* 2
b9e0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52   */.      { OP_R
b9f0: 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31  esultRow,   3, 1
ba00: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
ba10: 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51   };..    int isQ
ba20: 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54  uick = (sqlite3T
ba30: 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29  olower(zLeft[0])
ba40: 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20  =='q');..    /* 
ba50: 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f  If the PRAGMA co
ba60: 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65  mmand was of the
ba70: 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64   form "PRAGMA <d
ba80: 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65  b>.integrity_che
ba90: 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e  ck",.    ** then
baa0: 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 74   iDb is set to t
bab0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
bac0: 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69 66  database identif
bad0: 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20  ied by <db>..   
bae0: 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65   ** In this case
baf0: 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  , the integrity 
bb00: 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20  of database iDb 
bb10: 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65 64  only is verified
bb20: 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56   by.    ** the V
bb30: 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f  DBE created belo
bb40: 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  w..    **.    **
bb50: 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74   Otherwise, if t
bb60: 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73  he command was s
bb70: 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e  imply "PRAGMA in
bb80: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28  tegrity_check" (
bb90: 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d  or.    ** "PRAGM
bba0: 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c  A quick_check"),
bbb0: 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74   then iDb is set
bbc0: 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63   to 0. In this c
bbd0: 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20  ase, set iDb.   
bbe0: 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20   ** to -1 here, 
bbf0: 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
bc00: 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64   the VDBE should
bc10: 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74 65   verify the inte
bc20: 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  grity.    ** of 
bc30: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
bc40: 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20  abases.  */.    
bc50: 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29  assert( iDb>=0 )
bc60: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  ;.    assert( iD
bc70: 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20  b==0 || pId2->z 
bc80: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d  );.    if( pId2-
bc90: 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31  >z==0 ) iDb = -1
bca0: 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
bcb0: 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70 72  lize the VDBE pr
bcc0: 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 69 66 28  ogram */.    if(
bcd0: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
bce0: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
bcf0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
bd00: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
bd10: 20 36 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   6;.    sqlite3V
bd20: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
bd30: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
bd40: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
bd50: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
bd60: 45 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68  E, "integrity_ch
bd70: 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  eck", SQLITE_STA
bd80: 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65  TIC);..    /* Se
bd90: 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72  t the maximum er
bda0: 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  ror count */.   
bdb0: 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f   mxErr = SQLITE_
bdc0: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
bdd0: 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69  ERROR_MAX;.    i
bde0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
bdf0: 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74     sqlite3GetInt
be00: 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72  32(zRight, &mxEr
be10: 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78  r);.      if( mx
be20: 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20  Err<=0 ){.      
be30: 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
be40: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
be50: 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
be60: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
be70: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
be80: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d  v, OP_Integer, m
be90: 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65  xErr, 1);  /* re
bea0: 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72  g[1] holds error
beb0: 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f  s left */..    /
bec0: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
bed0: 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20  y check on each 
bee0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
bef0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
bf00: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
bf10: 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78       HashElem *x
bf20: 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70 54  ;.      Hash *pT
bf30: 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 63  bls;.      int c
bf40: 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69  nt = 0;..      i
bf50: 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26  f( OMIT_TEMPDB &
bf60: 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75  & i==1 ) continu
bf70: 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44 62  e;.      if( iDb
bf80: 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29 20  >=0 && i!=iDb ) 
bf90: 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20  continue;..     
bfa0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
bfb0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
bfc0: 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20   i);.      addr 
bfd0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
bfe0: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
bff0: 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20   1); /* Halt if 
c000: 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f  out of errors */
c010: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c020: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
c030: 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
c040: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
c050: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
c060: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20  .      /* Do an 
c070: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
c080: 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20 20  of the B-Tree.  
c090: 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
c0a0: 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67  Begin by filling
c0b0: 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33 2c   registers 2, 3,
c0c0: 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72 6f   ... with the ro
c0d0: 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72 73  ot pages numbers
c0e0: 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c  .      ** for al
c0f0: 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  l tables and ind
c100: 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ices in the data
c110: 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  base..      */. 
c120: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
c130: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
c140: 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29 3b  eld(db, i, 0) );
c150: 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26  .      pTbls = &
c160: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65  db->aDb[i].pSche
c170: 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20  ma->tblHash;.   
c180: 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48     for(x=sqliteH
c190: 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b  ashFirst(pTbls);
c1a0: 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68   x; x=sqliteHash
c1b0: 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
c1c0: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
c1d0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
c1e0: 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
c1f0: 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20   *pIdx;.        
c200: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c210: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c220: 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63   pTab->tnum, 2+c
c230: 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 63 6e 74  nt);.        cnt
c240: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  ++;.        for(
c250: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
c260: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
c270: 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  dx->pNext){.    
c280: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c290: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c2a0: 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75  teger, pIdx->tnu
c2b0: 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20  m, 2+cnt);.     
c2c0: 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20       cnt++;.    
c2d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20      }.      }.. 
c2e0: 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
c2f0: 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75 6d  e sufficient num
c300: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
c310: 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
c320: 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 69 66  ated */.      if
c330: 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3c  ( pParse->nMem <
c340: 20 63 6e 74 2b 34 20 29 7b 0a 20 20 20 20 20 20   cnt+4 ){.      
c350: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
c360: 20 63 6e 74 2b 34 3b 0a 20 20 20 20 20 20 7d 0a   cnt+4;.      }.
c370: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65  .      /* Do the
c380: 20 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74   b-tree integrit
c390: 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20  y checks */.    
c3a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c3b0: 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72  Op3(v, OP_Integr
c3c0: 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31  ityCk, 2, cnt, 1
c3d0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c3e0: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
c3f0: 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64  (u8)i);.      ad
c400: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
c410: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e  AddOp1(v, OP_IsN
c420: 75 6c 6c 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  ull, 2);.      s
c430: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
c440: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c450: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
c460: 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66    sqlite3MPrintf
c470: 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74  (db, "*** in dat
c480: 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c  abase %s ***\n",
c490: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
c4a0: 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f  e),.         P4_
c4b0: 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20  DYNAMIC);.      
c4c0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c4d0: 32 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c  2(v, OP_Move, 2,
c4e0: 20 34 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   4);.      sqlit
c4f0: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
c500: 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c  OP_Concat, 4, 3,
c510: 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   2);.      sqlit
c520: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c530: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c  OP_ResultRow, 2,
c540: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
c550: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
c560: 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20  , addr);..      
c570: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
c580: 20 74 68 65 20 69 6e 64 69 63 65 73 20 61 72 65   the indices are
c590: 20 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72   constructed cor
c5a0: 72 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f  rectly..      */
c5b0: 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c  .      for(x=sql
c5c0: 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62  iteHashFirst(pTb
c5d0: 6c 73 29 3b 20 78 20 26 26 20 21 69 73 51 75 69  ls); x && !isQui
c5e0: 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68  ck; x=sqliteHash
c5f0: 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
c600: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
c610: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
c620: 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
c630: 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20   *pIdx;.        
c640: 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 0a 20 20  int loopTop;..  
c650: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
c660: 70 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74  pIndex==0 ) cont
c670: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 61 64  inue;.        ad
c680: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
c690: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
c6a0: 6f 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70  os, 1);  /* Stop
c6b0: 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72   if out of error
c6c0: 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  s */.        sql
c6d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c6e0: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
c6f0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c700: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
c710: 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20   addr);.        
c720: 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
c730: 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72 73  AndIndices(pPars
c740: 65 2c 20 70 54 61 62 2c 20 31 2c 20 4f 50 5f 4f  e, pTab, 1, OP_O
c750: 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20  penRead);.      
c760: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c770: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c780: 72 2c 20 30 2c 20 32 29 3b 20 20 2f 2a 20 72 65  r, 0, 2);  /* re
c790: 67 28 32 29 20 77 69 6c 6c 20 63 6f 75 6e 74 20  g(2) will count 
c7a0: 65 6e 74 72 69 65 73 20 2a 2f 0a 20 20 20 20 20  entries */.     
c7b0: 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c     loopTop = sql
c7c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c7d0: 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 31 2c 20  , OP_Rewind, 1, 
c7e0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
c7f0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c800: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 32 2c 20 31   OP_AddImm, 2, 1
c810: 29 3b 20 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e  );   /* incremen
c820: 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f  t entry count */
c830: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
c840: 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  , pIdx=pTab->pIn
c850: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
c860: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b  pIdx->pNext, j++
c870: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
c880: 20 6a 6d 70 32 3b 0a 20 20 20 20 20 20 20 20 20   jmp2;.         
c890: 20 69 6e 74 20 72 31 3b 0a 20 20 20 20 20 20 20   int r1;.       
c8a0: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
c8b0: 56 64 62 65 4f 70 4c 69 73 74 20 69 64 78 45 72  VdbeOpList idxEr
c8c0: 72 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  r[] = {.        
c8d0: 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c      { OP_AddImm,
c8e0: 20 20 20 20 20 20 31 2c 20 2d 31 2c 20 20 30 7d        1, -1,  0}
c8f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  ,.            { 
c900: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20  OP_String8,     
c910: 30 2c 20 20 33 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  3,  0},    /
c920: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 1 */.         
c930: 20 20 20 7b 20 4f 50 5f 52 6f 77 69 64 2c 20 20     { OP_Rowid,  
c940: 20 20 20 20 20 31 2c 20 20 34 2c 20 20 30 7d 2c       1,  4,  0},
c950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
c960: 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30  P_String8,     0
c970: 2c 20 20 35 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  5,  0},    /*
c980: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
c990: 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20    { OP_String8, 
c9a0: 20 20 20 20 30 2c 20 20 36 2c 20 20 30 7d 2c 20      0,  6,  0}, 
c9b0: 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20     /* 4 */.     
c9c0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63         { OP_Conc
c9d0: 61 74 2c 20 20 20 20 20 20 34 2c 20 20 33 2c 20  at,      4,  3, 
c9e0: 20 33 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   3},.           
c9f0: 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20   { OP_Concat,   
ca00: 20 20 20 35 2c 20 20 33 2c 20 20 33 7d 2c 0a 20     5,  3,  3},. 
ca10: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
ca20: 43 6f 6e 63 61 74 2c 20 20 20 20 20 20 36 2c 20  Concat,      6, 
ca30: 20 33 2c 20 20 33 7d 2c 0a 20 20 20 20 20 20 20   3,  3},.       
ca40: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
ca50: 52 6f 77 2c 20 20 20 33 2c 20 20 31 2c 20 20 30  Row,   3,  1,  0
ca60: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  },.            {
ca70: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
ca80: 20 31 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20   1,  0,  0},    
ca90: 2f 2a 20 39 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 9 */.        
caa0: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
cab0: 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d        0,  0,  0}
cac0: 2c 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20  ,.          };. 
cad0: 20 20 20 20 20 20 20 20 20 72 31 20 3d 20 73 71           r1 = sq
cae0: 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
caf0: 65 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49  exKey(pParse, pI
cb00: 64 78 2c 20 31 2c 20 33 2c 20 30 29 3b 0a 20 20  dx, 1, 3, 0);.  
cb10: 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
cb20: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
cb30: 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c  Int(v, OP_Found,
cb40: 20 6a 2b 32 2c 20 30 2c 20 72 31 2c 20 70 49 64   j+2, 0, r1, pId
cb50: 78 2d 3e 6e 43 6f 6c 75 6d 6e 2b 31 29 3b 0a 20  x->nColumn+1);. 
cb60: 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
cb70: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cb80: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
cb90: 65 28 69 64 78 45 72 72 29 2c 20 69 64 78 45 72  e(idxErr), idxEr
cba0: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  r);.          sq
cbb0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
cbc0: 34 28 76 2c 20 61 64 64 72 2b 31 2c 20 22 72 6f  4(v, addr+1, "ro
cbd0: 77 69 64 20 22 2c 20 50 34 5f 53 54 41 54 49 43  wid ", P4_STATIC
cbe0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
cbf0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
cc00: 28 76 2c 20 61 64 64 72 2b 33 2c 20 22 20 6d 69  (v, addr+3, " mi
cc10: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
cc20: 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a   ", P4_STATIC);.
cc30: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cc40: 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
cc50: 20 61 64 64 72 2b 34 2c 20 70 49 64 78 2d 3e 7a   addr+4, pIdx->z
cc60: 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45  Name, P4_TRANSIE
cc70: 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  NT);.          s
cc80: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
cc90: 72 65 28 76 2c 20 61 64 64 72 2b 39 29 3b 0a 20  re(v, addr+9);. 
cca0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ccb0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
ccc0: 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 7d  jmp2);.        }
ccd0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
cce0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ccf0: 5f 4e 65 78 74 2c 20 31 2c 20 6c 6f 6f 70 54 6f  _Next, 1, loopTo
cd00: 70 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  p+1);.        sq
cd10: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
cd20: 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 29 3b 0a 20  e(v, loopTop);. 
cd30: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20         for(j=0, 
cd40: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
cd50: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
cd60: 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b  dx->pNext, j++){
cd70: 0a 20 20 20 20 20 20 20 20 20 20 73 74 61 74 69  .          stati
cd80: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
cd90: 73 74 20 63 6e 74 49 64 78 5b 5d 20 3d 20 7b 0a  st cntIdx[] = {.
cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f               { O
cdb0: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20  P_Integer,      
cdc0: 30 2c 20 20 33 2c 20 20 30 7d 2c 0a 20 20 20 20  0,  3,  0},.    
cdd0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
cde0: 77 69 6e 64 2c 20 20 20 20 20 20 20 30 2c 20 20  wind,       0,  
cdf0: 30 2c 20 20 30 7d 2c 20 20 2f 2a 20 31 20 2a 2f  0,  0},  /* 1 */
ce00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
ce10: 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20  OP_AddImm,      
ce20: 20 33 2c 20 20 31 2c 20 20 30 7d 2c 0a 20 20 20   3,  1,  0},.   
ce30: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 4e            { OP_N
ce40: 65 78 74 2c 20 20 20 20 20 20 20 20 20 30 2c 20  ext,         0, 
ce50: 20 30 2c 20 20 30 7d 2c 20 20 2f 2a 20 33 20 2a   0,  0},  /* 3 *
ce60: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  /.             {
ce70: 20 4f 50 5f 45 71 2c 20 20 20 20 20 20 20 20 20   OP_Eq,         
ce80: 20 20 32 2c 20 20 30 2c 20 20 33 7d 2c 20 20 2f    2,  0,  3},  /
ce90: 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 4 */.         
cea0: 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c      { OP_AddImm,
ceb0: 20 20 20 20 20 20 20 31 2c 20 2d 31 2c 20 20 30         1, -1,  0
cec0: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  },.             
ced0: 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20  { OP_String8,   
cee0: 20 20 20 30 2c 20 20 32 2c 20 20 30 7d 2c 20 20     0,  2,  0},  
cef0: 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 6 */.        
cf00: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
cf10: 38 2c 20 20 20 20 20 20 30 2c 20 20 33 2c 20 20  8,      0,  3,  
cf20: 30 7d 2c 20 20 2f 2a 20 37 20 2a 2f 0a 20 20 20  0},  /* 7 */.   
cf30: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43            { OP_C
cf40: 6f 6e 63 61 74 2c 20 20 20 20 20 20 20 33 2c 20  oncat,       3, 
cf50: 20 32 2c 20 20 32 7d 2c 0a 20 20 20 20 20 20 20   2,  2},.       
cf60: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
cf70: 74 52 6f 77 2c 20 20 20 20 32 2c 20 20 31 2c 20  tRow,    2,  1, 
cf80: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 7d   0},.          }
cf90: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72  ;.          addr
cfa0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
cfb0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
cfc0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
cfd0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cfe0: 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  2(v, OP_Halt, 0,
cff0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   0);.          s
d000: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
d010: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20  re(v, addr);.   
d020: 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
d030: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
d040: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
d050: 63 6e 74 49 64 78 29 2c 20 63 6e 74 49 64 78 29  cntIdx), cntIdx)
d060: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d070: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
d080: 76 2c 20 61 64 64 72 2b 31 2c 20 6a 2b 32 29 3b  v, addr+1, j+2);
d090: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d0a0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
d0b0: 2c 20 61 64 64 72 2b 31 2c 20 61 64 64 72 2b 34  , addr+1, addr+4
d0c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d0d0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
d0e0: 28 76 2c 20 61 64 64 72 2b 33 2c 20 6a 2b 32 29  (v, addr+3, j+2)
d0f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d100: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
d110: 76 2c 20 61 64 64 72 2b 33 2c 20 61 64 64 72 2b  v, addr+3, addr+
d120: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  2);.          sq
d130: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
d140: 65 28 76 2c 20 61 64 64 72 2b 34 29 3b 0a 20 20  e(v, addr+4);.  
d150: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d160: 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61  dbeChangeP4(v, a
d170: 64 64 72 2b 36 2c 20 0a 20 20 20 20 20 20 20 20  ddr+6, .        
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72               "wr
d190: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
d1a0: 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f   in index ", P4_
d1b0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
d1c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
d1d0: 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 37  angeP4(v, addr+7
d1e0: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50  , pIdx->zName, P
d1f0: 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  4_TRANSIENT);.  
d200: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
d210: 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64 72 20  .    }.    addr 
d220: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
d230: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
d240: 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e  ize(endCode), en
d250: 64 43 6f 64 65 29 3b 0a 20 20 20 20 73 71 6c 69  dCode);.    sqli
d260: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
d270: 76 2c 20 61 64 64 72 2c 20 2d 6d 78 45 72 72 29  v, addr, -mxErr)
d280: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
d290: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
d2a0: 72 2b 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  r+1);.    sqlite
d2b0: 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
d2c0: 20 61 64 64 72 2b 32 2c 20 22 6f 6b 22 2c 20 50   addr+2, "ok", P
d2d0: 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 65 6c  4_STATIC);.  }el
d2e0: 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  se.#endif /* SQL
d2f0: 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
d300: 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66  TY_CHECK */..#if
d310: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d320: 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a  _UTF16.  /*.  **
d330: 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69     PRAGMA encodi
d340: 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ng.  **   PRAGMA
d350: 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66   encoding = "utf
d360: 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74  -8"|"utf-16"|"ut
d370: 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62  f-16le"|"utf-16b
d380: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e".  **.  ** In 
d390: 69 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20  its first form, 
d3a0: 74 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75  this pragma retu
d3b0: 72 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  rns the encoding
d3c0: 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a   of the main.  *
d3d0: 2a 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  * database. If t
d3e0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e  he database is n
d3f0: 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20  ot initialized, 
d400: 69 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  it is initialize
d410: 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  d now..  **.  **
d420: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
d430: 20 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61 20   of this pragma 
d440: 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68  is a no-op if th
d450: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
d460: 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f  file.  ** has no
d470: 74 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69  t already been i
d480: 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74  nitialized. In t
d490: 68 69 73 20 63 61 73 65 20 69 74 20 73 65 74 73  his case it sets
d4a0: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
d4b0: 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20  * encoding that 
d4c0: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72  will be used for
d4d0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
d4e0: 73 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77  se file if a new
d4f0: 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72   file.  ** is cr
d500: 65 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69  eated. If an exi
d510: 73 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62  sting main datab
d520: 61 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e  ase file is open
d530: 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  ed, then the.  *
d540: 2a 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65  * default text e
d550: 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20  ncoding for the 
d560: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
d570: 65 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20  e is used..  ** 
d580: 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73  .  ** In all cas
d590: 65 73 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  es new databases
d5a0: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74   created using t
d5b0: 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e  he ATTACH comman
d5c0: 64 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74  d are.  ** creat
d5d0: 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ed to use the sa
d5e0: 6d 65 20 64 65 66 61 75 6c 74 20 74 65 78 74 20  me default text 
d5f0: 65 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20  encoding as the 
d600: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49  main database. I
d610: 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20  f.  ** the main 
d620: 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
d630: 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
d640: 64 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64  d and/or created
d650: 20 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a   when ATTACH.  *
d660: 2a 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74  * is executed, t
d670: 68 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f  his is done befo
d680: 72 65 20 74 68 65 20 41 54 54 41 43 48 20 6f 70  re the ATTACH op
d690: 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20  eration..  **.  
d6a0: 2a 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64  ** In the second
d6b0: 20 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d   form this pragm
d6c0: 61 20 73 65 74 73 20 74 68 65 20 74 65 78 74 20  a sets the text 
d6d0: 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75  encoding to be u
d6e0: 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20  sed in.  ** new 
d6f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63  database files c
d700: 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69  reated using thi
d710: 73 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  s database handl
d720: 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20  e. It is only.  
d730: 2a 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76  ** useful if inv
d740: 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  oked immediately
d750: 20 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20   after the main 
d760: 64 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a  database i.  */.
d770: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
d780: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 65 6e 63  ICmp(zLeft, "enc
d790: 6f 64 69 6e 67 22 29 3d 3d 30 20 29 7b 0a 20 20  oding")==0 ){.  
d7a0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
d7b0: 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a  truct EncName {.
d7c0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d        char *zNam
d7d0: 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b  e;.      u8 enc;
d7e0: 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b  .    } encnames[
d7f0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55  ] = {.      { "U
d800: 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45  TF8",     SQLITE
d810: 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a  _UTF8        },.
d820: 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c        { "UTF-8",
d830: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20      SQLITE_UTF8 
d840: 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75         },  /* Mu
d850: 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31  st be element [1
d860: 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
d870: 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f  F-16le", SQLITE_
d880: 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20  UTF16LE     },  
d890: 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
d8a0: 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [2] */.      
d8b0: 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51  { "UTF-16be", SQ
d8c0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20  LITE_UTF16BE    
d8d0: 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
d8e0: 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20  element [3] */. 
d8f0: 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22       { "UTF16le"
d900: 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ,  SQLITE_UTF16L
d910: 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b  E     },.      {
d920: 20 22 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c   "UTF16be",  SQL
d930: 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20  ITE_UTF16BE     
d940: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  },.      { "UTF-
d950: 31 36 22 2c 20 20 20 30 20 20 20 20 20 20 20 20  16",   0        
d960: 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20            }, /* 
d970: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
d980: 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  VE */.      { "U
d990: 54 46 31 36 22 2c 20 20 20 20 30 20 20 20 20 20  TF16",    0     
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20               }, 
d9b0: 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  /* SQLITE_UTF16N
d9c0: 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b  ATIVE */.      {
d9d0: 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20   0, 0 }.    };. 
d9e0: 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20     const struct 
d9f0: 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20  EncName *pEnc;. 
da00: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
da10: 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20  {    /* "PRAGMA 
da20: 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20  encoding" */.   
da30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
da40: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
da50: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
da60: 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ut;.      sqlite
da70: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
da80: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
da90: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
daa0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
dab0: 5f 4e 41 4d 45 2c 20 22 65 6e 63 6f 64 69 6e 67  _NAME, "encoding
dac0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
dad0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
dae0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
daf0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 29 3b  _String8, 0, 1);
db00: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
db10: 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
db20: 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  TF8].enc==SQLITE
db30: 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20 61  _UTF8 );.      a
db40: 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b  ssert( encnames[
db50: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e  SQLITE_UTF16LE].
db60: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
db70: 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73  6LE );.      ass
db80: 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51  ert( encnames[SQ
db90: 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e  LITE_UTF16BE].en
dba0: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
dbb0: 45 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  E );.      sqlit
dbc0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76  e3VdbeChangeP4(v
dbd0: 2c 20 2d 31 2c 20 65 6e 63 6e 61 6d 65 73 5b 45  , -1, encnames[E
dbe0: 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e  NC(pParse->db)].
dbf0: 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43  zName, P4_STATIC
dc00: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
dc10: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
dc20: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
dc30: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20 20  );.    }else{   
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc50: 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20       /* "PRAGMA 
dc60: 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22 20  encoding = XXX" 
dc70: 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  */.      /* Only
dc80: 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75   change the valu
dc90: 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63 20  e of sqlite.enc 
dca0: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
dcb0: 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20  handle is not.  
dcc0: 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a      ** initializ
dcd0: 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e 20  ed. If the main 
dce0: 64 61 74 61 62 61 73 65 20 65 78 69 73 74 73 2c  database exists,
dcf0: 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 2e   the new sqlite.
dd00: 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20 20  enc value.      
dd10: 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72 77  ** will be overw
dd20: 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65 20  ritten when the 
dd30: 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20 6c  schema is next l
dd40: 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f 65  oaded. If it doe
dd50: 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  s not.      ** a
dd60: 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 69  lready exists, i
dd70: 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65  t will be create
dd80: 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77  d to use the new
dd90: 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e   encoding value.
dda0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
ddb0: 69 66 28 20 0a 20 20 20 20 20 20 20 20 21 28 44  if( .        !(D
ddc0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
ddd0: 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61   0, DB_SchemaLoa
dde0: 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20 20  ded)) || .      
ddf0: 20 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28    DbHasProperty(
de00: 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79 29  db, 0, DB_Empty)
de10: 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20   .      ){.     
de20: 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63     for(pEnc=&enc
de30: 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e  names[0]; pEnc->
de40: 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a  zName; pEnc++){.
de50: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 30 3d            if( 0=
de60: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
de70: 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e  zRight, pEnc->zN
de80: 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ame) ){.        
de90: 20 20 20 20 45 4e 43 28 70 50 61 72 73 65 2d 3e      ENC(pParse->
dea0: 64 62 29 20 3d 20 70 45 6e 63 2d 3e 65 6e 63 20  db) = pEnc->enc 
deb0: 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51  ? pEnc->enc : SQ
dec0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
ded0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
dee0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
def0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
df00: 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e     if( !pEnc->zN
df10: 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ame ){.         
df20: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
df30: 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70  (pParse, "unsupp
df40: 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20  orted encoding: 
df50: 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  %s", zRight);.  
df60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
df70: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65      }.  }else.#e
df80: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
df90: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69  MIT_UTF16 */..#i
dfa0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
dfb0: 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
dfc0: 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
dfd0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
dfe0: 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65  abase.]schema_ve
dff0: 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
e000: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
e010: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
e020: 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
e030: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
e040: 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72  tabase.]user_ver
e050: 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47  sion.  **   PRAG
e060: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73  MA [database.]us
e070: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e  er_version = <in
e080: 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
e090: 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73 63   The pragma's sc
e0a0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64  hema_version and
e0b0: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72   user_version ar
e0c0: 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72  e used to set or
e0d0: 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61   get.  ** the va
e0e0: 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  lue of the schem
e0f0: 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73  a-version and us
e100: 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70  er-version, resp
e110: 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20  ectively. Both. 
e120: 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
e130: 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75  ersion and the u
e140: 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20  ser-version are 
e150: 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  32-bit signed in
e160: 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72  tegers.  ** stor
e170: 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ed in the databa
e180: 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a  se header..  **.
e190: 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d    ** The schema-
e1a0: 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c  cookie is usuall
e1b0: 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74  y only manipulat
e1c0: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
e1d0: 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a   SQLite. It.  **
e1e0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
e1f0: 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76  by SQLite whenev
e200: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
e210: 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69  schema is modifi
e220: 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61  ed (by.  ** crea
e230: 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67  ting or dropping
e240: 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65   a table or inde
e250: 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76  x). The schema v
e260: 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62  ersion is used b
e270: 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61  y.  ** SQLite ea
e280: 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20  ch time a query 
e290: 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65  is executed to e
e2a0: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69  nsure that the i
e2b0: 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20  nternal cache.  
e2c0: 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ** of the schema
e2d0: 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69   used when compi
e2e0: 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65  ling the SQL que
e2f0: 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  ry matches the s
e300: 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68  chema of.  ** th
e310: 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e  e database again
e320: 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  st which the com
e330: 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61  piled query is a
e340: 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64  ctually executed
e350: 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e  ..  ** Subvertin
e360: 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d  g this mechanism
e370: 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d   by using "PRAGM
e380: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
e390: 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a  " to modify.  **
e3a0: 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
e3b0: 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c  ion is potential
e3c0: 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64  ly dangerous and
e3d0: 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f   may lead to pro
e3e0: 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65  gram.  ** crashe
e3f0: 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f  s or database co
e400: 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69  rruption. Use wi
e410: 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a  th caution!.  **
e420: 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76  .  ** The user-v
e430: 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73  ersion is not us
e440: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
e450: 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20   SQLite. It may 
e460: 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  be used by.  ** 
e470: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72  applications for
e480: 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20   any purpose..  
e490: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
e4a0: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
e4b0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 29  schema_version")
e4c0: 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
e4d0: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
e4e0: 20 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 29   "user_version")
e4f0: 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
e500: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
e510: 20 22 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74   "freelist_count
e520: 22 29 3d 3d 30 20 0a 20 20 29 7b 0a 20 20 20 20  ")==0 .  ){.    
e530: 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 20 20 20 2f  int iCookie;   /
e540: 2a 20 43 6f 6f 6b 69 65 20 69 6e 64 65 78 2e 20  * Cookie index. 
e550: 31 20 66 6f 72 20 73 63 68 65 6d 61 2d 63 6f 6f  1 for schema-coo
e560: 6b 69 65 2c 20 36 20 66 6f 72 20 75 73 65 72 2d  kie, 6 for user-
e570: 63 6f 6f 6b 69 65 2e 20 2a 2f 0a 20 20 20 20 73  cookie. */.    s
e580: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
e590: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
e5a0: 20 73 77 69 74 63 68 28 20 7a 4c 65 66 74 5b 30   switch( zLeft[0
e5b0: 5d 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  ] ){.      case 
e5c0: 27 66 27 3a 20 63 61 73 65 20 27 46 27 3a 0a 20  'f': case 'F':. 
e5d0: 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d         iCookie =
e5e0: 20 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45   BTREE_FREE_PAGE
e5f0: 5f 43 4f 55 4e 54 3b 0a 20 20 20 20 20 20 20 20  _COUNT;.        
e600: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
e610: 65 20 27 73 27 3a 20 63 61 73 65 20 27 53 27 3a  e 's': case 'S':
e620: 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65  .        iCookie
e630: 20 3d 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f   = BTREE_SCHEMA_
e640: 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20  VERSION;.       
e650: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 64 65   break;.      de
e660: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 69  fault:.        i
e670: 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 55  Cookie = BTREE_U
e680: 53 45 52 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20  SER_VERSION;.   
e690: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
e6a0: 7d 0a 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  }..    if( zRigh
e6b0: 74 20 26 26 20 69 43 6f 6f 6b 69 65 21 3d 42 54  t && iCookie!=BT
e6c0: 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f  REE_FREE_PAGE_CO
e6d0: 55 4e 54 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  UNT ){.      /* 
e6e0: 57 72 69 74 65 20 74 68 65 20 73 70 65 63 69 66  Write the specif
e6f0: 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65  ied cookie value
e700: 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
e710: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
e720: 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20  t setCookie[] = 
e730: 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54  {.        { OP_T
e740: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30  ransaction,    0
e750: 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
e760: 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
e770: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
e780: 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
e790: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
e7a0: 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65    { OP_SetCookie
e7b0: 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 31  ,      0,  0,  1
e7c0: 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20  },    /* 2 */.  
e7d0: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
e7e0: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
e7f0: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
e800: 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f  ArraySize(setCoo
e810: 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65 29  kie), setCookie)
e820: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
e830: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
e840: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
e850: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
e860: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
e870: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
e880: 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ht));.      sqli
e890: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
e8a0: 76 2c 20 61 64 64 72 2b 32 2c 20 69 44 62 29 3b  v, addr+2, iDb);
e8b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
e8c0: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64  beChangeP2(v, ad
e8d0: 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a  dr+2, iCookie);.
e8e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e8f0: 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70 65   /* Read the spe
e900: 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61  cified cookie va
e910: 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  lue */.      sta
e920: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
e930: 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b  List readCookie[
e940: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20  ] = {.        { 
e950: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
e960: 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20      0,  0,  0}, 
e970: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
e980: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
e990: 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20  ie,      0,  1, 
e9a0: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
e9b0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73          { OP_Res
e9c0: 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c  ultRow,       1,
e9d0: 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d    1,  0}.      }
e9e0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64 72  ;.      int addr
e9f0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
ea00: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
ea10: 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29  Size(readCookie)
ea20: 2c 20 72 65 61 64 43 6f 6f 6b 69 65 29 3b 0a 20  , readCookie);. 
ea30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ea40: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
ea50: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
ea60: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
ea70: 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 44 62  1(v, addr+1, iDb
ea80: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ea90: 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20  VdbeChangeP3(v, 
eaa0: 61 64 64 72 2b 31 2c 20 69 43 6f 6f 6b 69 65 29  addr+1, iCookie)
eab0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
eac0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
ead0: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
eae0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
eaf0: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
eb00: 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49  AME, zLeft, SQLI
eb10: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
eb20: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
eb30: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
eb40: 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
eb50: 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  N_PRAGMAS */..#i
eb60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
eb70: 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
eb80: 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  DIAGS.  /*.  ** 
eb90: 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65    PRAGMA compile
eba0: 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20  _options.  **.  
ebb0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
ebc0: 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69  mes of all compi
ebd0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options 
ebe0: 75 73 65 64 20 69 6e 20 74 68 69 73 20 62 75 69  used in this bui
ebf0: 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74  ld,.  ** one opt
ec00: 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a  ion per row..  *
ec10: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  /.  if( sqlite3S
ec20: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 63  trICmp(zLeft, "c
ec30: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29  ompile_options")
ec40: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ==0 ){.    int i
ec50: 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20   = 0;.    const 
ec60: 63 68 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20  char *zOpt;.    
ec70: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
ec80: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
ec90: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
eca0: 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  1;.    sqlite3Vd
ecb0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
ecc0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
ecd0: 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e   "compile_option
ece0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
ecf0: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a  );.    while( (z
ed00: 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Opt = sqlite3_co
ed10: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
ed20: 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  i++))!=0 ){.    
ed30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ed40: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
ed50: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74  8, 0, 1, 0, zOpt
ed60: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
ed70: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ed80: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
ed90: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  , 1);.    }.  }e
eda0: 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  lse.#endif /* SQ
edb0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
edc0: 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f  EOPTION_DIAGS */
edd0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
ede0: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20  _OMIT_WAL.  /*. 
edf0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
ee00: 74 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63  tabase.]wal_chec
ee10: 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65  kpoint = passive
ee20: 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74 0a 20 20  |full|restart.  
ee30: 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69  **.  ** Checkpoi
ee40: 6e 74 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  nt the database.
ee50: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
ee60: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
ee70: 2c 20 22 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e  , "wal_checkpoin
ee80: 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e  t")==0 ){.    in
ee90: 74 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a  t iBt = (pId2->z
eea0: 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f  ?iDb:SQLITE_MAX_
eeb0: 41 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69  ATTACHED);.    i
eec0: 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54  nt eMode = SQLIT
eed0: 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
eee0: 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52  SIVE;.    if( zR
eef0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
ef00: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
ef10: 28 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29  (zRight, "full")
ef20: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65  ==0 ){.        e
ef30: 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
ef40: 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20  ECKPOINT_FULL;. 
ef50: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
ef60: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52  qlite3StrICmp(zR
ef70: 69 67 68 74 2c 20 22 72 65 73 74 61 72 74 22 29  ight, "restart")
ef80: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65  ==0 ){.        e
ef90: 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
efa0: 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54  ECKPOINT_RESTART
efb0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
efc0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
efd0: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
efe0: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
eff0: 6f 75 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  out;.    sqlite3
f000: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
f010: 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 3);.    pParse
f020: 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
f030: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
f040: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
f050: 41 4d 45 5f 4e 41 4d 45 2c 20 22 62 75 73 79 22  AME_NAME, "busy"
f060: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
f070: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
f080: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
f090: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
f0a0: 22 6c 6f 67 22 2c 20 53 51 4c 49 54 45 5f 53 54  "log", SQLITE_ST
f0b0: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
f0c0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
f0d0: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
f0e0: 41 4d 45 2c 20 22 63 68 65 63 6b 70 6f 69 6e 74  AME, "checkpoint
f0f0: 65 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ed", SQLITE_STAT
f100: 49 43 29 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65  IC);..    sqlite
f110: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
f120: 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42  P_Checkpoint, iB
f130: 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20  t, eMode, 1);.  
f140: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
f150: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
f160: 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 65  Row, 1, 3);.  }e
f170: 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  lse..  /*.  **  
f180: 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f   PRAGMA wal_auto
f190: 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20  checkpoint.  ** 
f1a0: 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74    PRAGMA wal_aut
f1b0: 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a  ocheckpoint = N.
f1c0: 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67    **.  ** Config
f1d0: 75 72 65 20 61 20 64 61 74 61 62 61 73 65 20 63  ure a database c
f1e0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74  onnection to aut
f1f0: 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b  omatically check
f200: 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73 65  point a database
f210: 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75  .  ** after accu
f220: 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65  mulating N frame
f230: 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72  s in the log. Or
f240: 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 20 63   query for the c
f250: 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a  urrent value.  *
f260: 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 69  * of N..  */.  i
f270: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
f280: 70 28 7a 4c 65 66 74 2c 20 22 77 61 6c 5f 61 75  p(zLeft, "wal_au
f290: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 29 3d 3d  tocheckpoint")==
f2a0: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  0 ){.    if( zRi
f2b0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
f2c0: 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65  ite3_wal_autoche
f2d0: 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69  ckpoint(db, sqli
f2e0: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29  te3Atoi(zRight))
f2f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
f300: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
f310: 73 65 2c 20 22 77 61 6c 5f 61 75 74 6f 63 68 65  se, "wal_autoche
f320: 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20 20 20  ckpoint", .     
f330: 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61    db->xWalCallba
f340: 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c 44 65  ck==sqlite3WalDe
f350: 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20 20  faultHook ? .   
f360: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 50          SQLITE_P
f370: 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e 70 57  TR_TO_INT(db->pW
f380: 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20 20 7d  alArg) : 0);.  }
f390: 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  else.#endif..  /
f3a0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73  *.  **  PRAGMA s
f3b0: 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a  hrink_memory.  *
f3c0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 61 67  *.  ** This prag
f3d0: 6d 61 20 61 74 74 65 6d 70 74 73 20 74 6f 20 66  ma attempts to f
f3e0: 72 65 65 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f  ree as much memo
f3f0: 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20 66  ry as possible f
f400: 72 6f 6d 20 74 68 65 0a 20 20 2a 2a 20 63 75 72  rom the.  ** cur
f410: 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f  rent database co
f420: 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20  nnection..  */. 
f430: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
f440: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 73 68 72 69  Cmp(zLeft, "shri
f450: 6e 6b 5f 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  nk_memory")==0 )
f460: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  {.    sqlite3_db
f470: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
f480: 64 62 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  db);.  }else..  
f490: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
f4a0: 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20   busy_timeout.  
f4b0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
f4c0: 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a  _timeout = N.  *
f4d0: 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69  *.  ** Call sqli
f4e0: 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
f4f0: 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e  (db, N).  Return
f500: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d   the current tim
f510: 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20  eout value.  ** 
f520: 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20  if one is set.  
f530: 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c  If no busy handl
f540: 65 72 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e  er or a differen
f550: 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69  t busy handler i
f560: 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20  s set.  ** then 
f570: 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  0 is returned.  
f580: 53 65 74 74 69 6e 67 20 74 68 65 20 62 75 73 79  Setting the busy
f590: 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72  _timeout to 0 or
f5a0: 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64   negative.  ** d
f5b0: 69 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65  isables the time
f5c0: 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  out..  */.  if( 
f5d0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f5e0: 4c 65 66 74 2c 20 22 62 75 73 79 5f 74 69 6d 65  Left, "busy_time
f5f0: 6f 75 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  out")==0 ){.    
f600: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
f610: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
f620: 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 73 71 6c  _timeout(db, sql
f630: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
f640: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
f650: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
f660: 72 73 65 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20  rse, "timeout", 
f670: 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74   db->busyTimeout
f680: 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 20  );.  }else..#if 
f690: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
f6a0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
f6b0: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
f6c0: 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74  /*.  ** Report t
f6d0: 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
f6e0: 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f   of file logs fo
f6f0: 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a  r all databases.
f700: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
f710: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
f720: 20 22 6c 6f 63 6b 5f 73 74 61 74 75 73 22 29 3d   "lock_status")=
f730: 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  =0 ){.    static
f740: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
f750: 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20  st azLockName[] 
f760: 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63  = {.      "unloc
f770: 6b 65 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20  ked", "shared", 
f780: 22 72 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e  "reserved", "pen
f790: 64 69 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76  ding", "exclusiv
f7a0: 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  e".    };.    in
f7b0: 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  t i;.    sqlite3
f7c0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
f7d0: 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 2);.    pParse
f7e0: 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20  ->nMem = 2;.    
f7f0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
f800: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
f810: 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 61 74 61 62  AME_NAME, "datab
f820: 61 73 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ase", SQLITE_STA
f830: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
f840: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
f850: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
f860: 4d 45 2c 20 22 73 74 61 74 75 73 22 2c 20 53 51  ME, "status", SQ
f870: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
f880: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
f890: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
f8a0: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
f8b0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
f8c0: 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77  zState = "unknow
f8d0: 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b  n";.      int j;
f8e0: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
f8f0: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29  Db[i].zName==0 )
f900: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
f910: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f920: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
f930: 2c 20 30 2c 20 31 2c 20 30 2c 20 64 62 2d 3e 61  , 0, 1, 0, db->a
f940: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f  Db[i].zName, P4_
f950: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70  STATIC);.      p
f960: 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  Bt = db->aDb[i].
f970: 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70  pBt;.      if( p
f980: 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  Bt==0 || sqlite3
f990: 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d  BtreePager(pBt)=
f9a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53  =0 ){.        zS
f9b0: 74 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b  tate = "closed";
f9c0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
f9d0: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
f9e0: 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62  ntrol(db, i ? db
f9f0: 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a  ->aDb[i].zName :
fa00: 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20   0, .           
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa20: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
fa30: 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45  _FCNTL_LOCKSTATE
fa40: 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  , &j)==SQLITE_OK
fa50: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 7a 53 74   ){.         zSt
fa60: 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65  ate = azLockName
fa70: 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  [j];.      }.   
fa80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
fa90: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
faa0: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 7a 53 74  g8, 0, 2, 0, zSt
fab0: 61 74 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  ate, P4_STATIC);
fac0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
fad0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
fae0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b  esultRow, 1, 2);
faf0: 0a 20 20 20 20 7d 0a 0a 20 20 7d 65 6c 73 65 0a  .    }..  }else.
fb00: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
fb10: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
fb20: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
fb30: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 6b 65 79  ICmp(zLeft, "key
fb40: 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68 74 20  ")==0 && zRight 
fb50: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6b  ){.    sqlite3_k
fb60: 65 79 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 73  ey(db, zRight, s
fb70: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
fb80: 52 69 67 68 74 29 29 3b 0a 20 20 7d 65 6c 73 65  Right));.  }else
fb90: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
fba0: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 72 65  rICmp(zLeft, "re
fbb0: 6b 65 79 22 29 3d 3d 30 20 26 26 20 7a 52 69 67  key")==0 && zRig
fbc0: 68 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ht ){.    sqlite
fbd0: 33 5f 72 65 6b 65 79 28 64 62 2c 20 7a 52 69 67  3_rekey(db, zRig
fbe0: 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
fbf0: 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
fc00: 7d 65 6c 73 65 0a 20 20 69 66 28 20 7a 52 69 67  }else.  if( zRig
fc10: 68 74 20 26 26 20 28 73 71 6c 69 74 65 33 53 74  ht && (sqlite3St
fc20: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 68 65  rICmp(zLeft, "he
fc30: 78 6b 65 79 22 29 3d 3d 30 20 7c 7c 0a 20 20 20  xkey")==0 ||.   
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
fc50: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
fc60: 66 74 2c 20 22 68 65 78 72 65 6b 65 79 22 29 3d  ft, "hexrekey")=
fc70: 3d 30 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  =0) ){.    int i
fc80: 2c 20 68 31 2c 20 68 32 3b 0a 20 20 20 20 63 68  , h1, h2;.    ch
fc90: 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20  ar zKey[40];.   
fca0: 20 66 6f 72 28 69 3d 30 3b 20 28 68 31 20 3d 20   for(i=0; (h1 = 
fcb0: 7a 52 69 67 68 74 5b 69 5d 29 21 3d 30 20 26 26  zRight[i])!=0 &&
fcc0: 20 28 68 32 20 3d 20 7a 52 69 67 68 74 5b 69 2b   (h2 = zRight[i+
fcd0: 31 5d 29 21 3d 30 3b 20 69 2b 3d 32 29 7b 0a 20  1])!=0; i+=2){. 
fce0: 20 20 20 20 20 68 31 20 2b 3d 20 39 2a 28 31 26       h1 += 9*(1&
fcf0: 28 68 31 3e 3e 36 29 29 3b 0a 20 20 20 20 20 20  (h1>>6));.      
fd00: 68 32 20 2b 3d 20 39 2a 28 31 26 28 68 32 3e 3e  h2 += 9*(1&(h2>>
fd10: 36 29 29 3b 0a 20 20 20 20 20 20 7a 4b 65 79 5b  6));.      zKey[
fd20: 69 2f 32 5d 20 3d 20 28 68 32 20 26 20 30 78 30  i/2] = (h2 & 0x0
fd30: 66 29 20 7c 20 28 28 68 31 20 26 20 30 78 66 29  f) | ((h1 & 0xf)
fd40: 3c 3c 34 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  <<4);.    }.    
fd50: 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20  if( (zLeft[3] & 
fd60: 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20  0xf)==0xb ){.   
fd70: 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 28 64     sqlite3_key(d
fd80: 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20  b, zKey, i/2);. 
fd90: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
fda0: 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 64 62  sqlite3_rekey(db
fdb0: 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20  , zKey, i/2);.  
fdc0: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
fdd0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
fde0: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29  QLITE_HAS_CODEC)
fdf0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
fe00: 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29  TE_ENABLE_CEROD)
fe10: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
fe20: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 61 63  rICmp(zLeft, "ac
fe30: 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69 6f 6e  tivate_extension
fe40: 73 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68 74  s")==0 && zRight
fe50: 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
fe60: 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20  E_HAS_CODEC.    
fe70: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
fe80: 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65  Cmp(zRight, "see
fe90: 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 4)==0 ){.   
fea0: 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
feb0: 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b  ate_see(&zRight[
fec0: 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  4]);.    }.#endi
fed0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
fee0: 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20  ENABLE_CEROD.   
fef0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
ff00: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65  ICmp(zRight, "ce
ff10: 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a  rod-", 6)==0 ){.
ff20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
ff30: 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52  tivate_cerod(&zR
ff40: 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a  ight[6]);.    }.
ff50: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 0a 23  #endif.  }else.#
ff60: 65 6e 64 69 66 0a 0a 20 0a 20 20 7b 2f 2a 20 45  endif.. .  {/* E
ff70: 6d 70 74 79 20 45 4c 53 45 20 63 6c 61 75 73 65  mpty ELSE clause
ff80: 20 2a 2f 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20   */}..  /*.  ** 
ff90: 52 65 73 65 74 20 74 68 65 20 73 61 66 65 74 79  Reset the safety
ffa0: 20 6c 65 76 65 6c 2c 20 69 6e 20 63 61 73 65 20   level, in case 
ffb0: 74 68 65 20 66 75 6c 6c 66 73 79 6e 63 20 66 6c  the fullfsync fl
ffc0: 61 67 20 6f 72 20 73 79 6e 63 68 72 6f 6e 6f 75  ag or synchronou
ffd0: 73 0a 20 20 2a 2a 20 73 65 74 74 69 6e 67 20 63  s.  ** setting c
ffe0: 68 61 6e 67 65 64 2e 0a 20 20 2a 2f 0a 23 69 66  hanged..  */.#if
fff0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
10000 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20  _PAGER_PRAGMAS. 
10010 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
10020 6d 69 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  mit ){.    sqlit
10030 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74 79  e3BtreeSetSafety
10040 4c 65 76 65 6c 28 70 44 62 2d 3e 70 42 74 2c 20  Level(pDb->pBt, 
10050 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65  pDb->safety_leve
10060 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l,.             
10070 20 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c    (db->flags&SQL
10080 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 29 21 3d  ITE_FullFSync)!=
10090 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
100a0 20 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c    (db->flags&SQL
100b0 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
100c0 63 29 21 3d 30 29 3b 0a 20 20 7d 0a 23 65 6e 64  c)!=0);.  }.#end
100d0 69 66 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20  if.pragma_out:. 
100e0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
100f0 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c  b, zLeft);.  sql
10100 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
10110 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69  Right);.}..#endi
10120 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
10130 5f 50 52 41 47 4d 41 20 2a 2f 0a                 _PRAGMA */.