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

Artifact 8779308bc1ea1901c4bc94dfe9a83d436f73f52c:


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 73 71  /.  Vdbe *v = sq
2b60: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
2b70: 72 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72  rse);  /* Prepar
2b80: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ed statement */.
2b90: 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65  .  if( v==0 ) re
2ba0: 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56  turn;.  sqlite3V
2bb0: 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76  dbeRunOnlyOnce(v
2bc0: 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  );.  pParse->nMe
2bd0: 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74  m = 2;..  /* Int
2be0: 65 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61  erpret the [data
2bf0: 62 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74  base.] part of t
2c00: 68 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d  he pragma statem
2c10: 65 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a  ent. iDb is the.
2c20: 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68    ** index of th
2c30: 65 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20  e database this 
2c40: 70 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20  pragma is being 
2c50: 61 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62  applied to in db
2c60: 2e 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62  .aDb[]. */.  iDb
2c70: 20 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72   = sqlite3TwoPar
2c80: 74 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49  tName(pParse, pI
2c90: 64 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b  d1, pId2, &pId);
2ca0: 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72  .  if( iDb<0 ) r
2cb0: 65 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26  eturn;.  pDb = &
2cc0: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20  db->aDb[iDb];.. 
2cd0: 20 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20   /* If the temp 
2ce0: 64 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65  database has bee
2cf0: 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d  n explicitly nam
2d00: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
2d10: 65 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20  e .  ** pragma, 
2d20: 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20  make sure it is 
2d30: 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66  open. .  */.  if
2d40: 28 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69  ( iDb==1 && sqli
2d50: 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
2d60: 61 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20  ase(pParse) ){. 
2d70: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a     return;.  }..
2d80: 20 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65    zLeft = sqlite
2d90: 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64  3NameFromToken(d
2da0: 62 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21  b, pId);.  if( !
2db0: 7a 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a  zLeft ) return;.
2dc0: 20 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20    if( minusFlag 
2dd0: 29 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20  ){.    zRight = 
2de0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
2df0: 62 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65  b, "-%T", pValue
2e00: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2e10: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
2e20: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
2e30: 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a  , pValue);.  }..
2e40: 20 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29    assert( pId2 )
2e50: 3b 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e  ;.  zDb = pId2->
2e60: 6e 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65  n>0 ? pDb->zName
2e70: 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   : 0;.  if( sqli
2e80: 74 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61  te3AuthCheck(pPa
2e90: 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47  rse, SQLITE_PRAG
2ea0: 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68  MA, zLeft, zRigh
2eb0: 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67  t, zDb) ){.    g
2ec0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
2ed0: 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61    }..  /* Send a
2ee0: 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  n SQLITE_FCNTL_P
2ef0: 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72  RAGMA file-contr
2f00: 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ol to the underl
2f10: 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f  ying VFS.  ** co
2f20: 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74  nnection.  If it
2f30: 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
2f40: 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20  OK, then assume 
2f50: 74 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a  that the VFS.  *
2f60: 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72  * handled the pr
2f70: 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74  agma and generat
2f80: 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72  e a no-op prepar
2f90: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  ed statement..  
2fa0: 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d  */.  aFcntl[0] =
2fb0: 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20   0;.  aFcntl[1] 
2fc0: 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74  = zLeft;.  aFcnt
2fd0: 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20  l[2] = zRight;. 
2fe0: 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a   aFcntl[3] = 0;.
2ff0: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
3000: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72  r.nBusy = 0;.  r
3010: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
3020: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
3030: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  , SQLITE_FCNTL_P
3040: 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46  RAGMA, (void*)aF
3050: 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d  cntl);.  if( rc=
3060: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
3070: 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20    if( aFcntl[0] 
3080: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65 6d  ){.      int mem
3090: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
30a0: 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  m;.      sqlite3
30b0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
30c0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65 6d  _String8, 0, mem
30d0: 2c 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20  , 0, aFcntl[0], 
30e0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
30f0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
3100: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
3110: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
3120: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
3130: 5f 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22 2c  _NAME, "result",
3140: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
3150: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3160: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
3170: 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31  esultRow, mem, 1
3180: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3190: 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29  _free(aFcntl[0])
31a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
31b0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e  if( rc!=SQLITE_N
31c0: 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 69  OTFOUND ){.    i
31d0: 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a  f( aFcntl[0] ){.
31e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
31f0: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 25  orMsg(pParse, "%
3200: 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a  s", aFcntl[0]);.
3210: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
3220: 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20  ee(aFcntl[0]);. 
3230: 20 20 20 7d 0a 20 20 20 20 70 50 61 72 73 65 2d     }.    pParse-
3240: 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70 50 61  >nErr++;.    pPa
3250: 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20  rse->rc = rc;.  
3260: 7d 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20  }else.          
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 0a 20 0a 23 69 66 20 21 64 65 66 69 6e 65    . .#if !define
3290: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
32a0: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
32b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
32c0: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
32d0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
32e0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65  MA [database.]de
32f0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3300: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
3310: 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74  atabase.]default
3320: 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20  _cache_size=N.  
3330: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
3340: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
3350: 68 65 20 63 75 72 72 65 6e 74 20 70 65 72 73 69  he current persi
3360: 73 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  stent setting fo
3370: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
3380: 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65  cache size.  The
3390: 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
33a0: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  is the maximum n
33b0: 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61  umber of.  ** pa
33c0: 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20  ges in the page 
33d0: 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f  cache.  The seco
33e0: 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74  nd form sets bot
33f0: 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20  h the current.  
3400: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
3410: 7a 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  ze value and the
3420: 20 70 65 72 73 69 73 74 65 6e 74 20 70 61 67 65   persistent page
3430: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
3440: 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  e.  ** stored in
3450: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3460: 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c  le..  **.  ** Ol
3470: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
3480: 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74  SQLite would set
3490: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
34a0: 68 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a  he size to a.  *
34b0: 2a 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  * negative numbe
34c0: 72 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79  r to indicate sy
34d0: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20  nchronous=OFF.  
34e0: 54 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63  These days, sync
34f0: 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20  hronous.  ** is 
3500: 61 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66  always on by def
3510: 61 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20  ault regardless 
3520: 6f 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74  of the sign of t
3530: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
3540: 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74  .  ** size.  But
3550: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b   continue to tak
3560: 65 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  e the absolute v
3570: 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 61  alue of the defa
3580: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
3590: 69 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61  ize of historica
35a0: 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e  l compatibility.
35b0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
35c0: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
35d0: 2c 22 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  ,"default_cache_
35e0: 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  size")==0 ){.   
35f0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
3600: 62 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68  beOpList getCach
3610: 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eSize[] = {.    
3620: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
3630: 6f 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20  on, 0, 0,       
3640: 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20   0},            
3650: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3660: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
3670: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20  ReadCookie,  0, 
3680: 31 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f  1,        BTREE_
3690: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
36a0: 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  ZE},  /* 1 */.  
36b0: 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20      { OP_IfPos, 
36c0: 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20        1, 8,     
36d0: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
36e0: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
36f0: 2c 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 2,        0},.
3700: 20 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72        { OP_Subtr
3710: 61 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20  act,    1, 2,   
3720: 20 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b       1},.      {
3730: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
3740: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
3750: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
3760: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20  eger,     0, 1, 
3770: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20         0},      
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3790: 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20     /* 6 */.     
37a0: 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20   { OP_Noop,     
37b0: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
37c0: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52  0},.      { OP_R
37d0: 65 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31  esultRow,   1, 1
37e0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
37f0: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64 72   };.    int addr
3800: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
3810: 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72  3ReadSchema(pPar
3820: 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  se) ) goto pragm
3830: 61 5f 6f 75 74 3b 0a 20 20 20 20 73 71 6c 69 74  a_out;.    sqlit
3840: 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28  e3VdbeUsesBtree(
3850: 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28  v, iDb);.    if(
3860: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
3870: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
3880: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
3890: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
38a0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
38b0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
38c0: 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53 51 4c  cache_size", SQL
38d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
38e0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
38f0: 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64 64 72  += 2;.      addr
3900: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
3910: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
3920: 53 69 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a  Size(getCacheSiz
3930: 65 29 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65  e), getCacheSize
3940: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3950: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
3960: 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
3970: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
3980: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP1(v, addr+1,
3990: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
39a0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
39b0: 28 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49  (v, addr+6, SQLI
39c0: 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  TE_DEFAULT_CACHE
39d0: 5f 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73  _SIZE);.    }els
39e0: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  e{.      int siz
39f0: 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e  e = sqlite3AbsIn
3a00: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
3a10: 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20  zRight));.      
3a20: 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
3a30: 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73  eOperation(pPars
3a40: 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20  e, 0, iDb);.    
3a50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
3a60: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
3a70: 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20  r, size, 1);.   
3a80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
3a90: 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f  dOp3(v, OP_SetCo
3aa0: 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45  okie, iDb, BTREE
3ab0: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
3ac0: 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61  IZE, 1);.      a
3ad0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
3ae0: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
3af0: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
3b00: 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
3b10: 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69  >cache_size = si
3b20: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
3b30: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
3b40: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62  ze(pDb->pBt, pDb
3b50: 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65  ->pSchema->cache
3b60: 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20  _size);.    }.  
3b70: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
3b80: 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  !SQLITE_OMIT_PAG
3b90: 45 52 5f 50 52 41 47 4d 41 53 20 26 26 20 21 53  ER_PRAGMAS && !S
3ba0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
3bb0: 43 41 54 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64  CATED */..#if !d
3bc0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3bd0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3be0: 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ).  /*.  **  PRA
3bf0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70  GMA [database.]p
3c00: 61 67 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50  age_size.  **  P
3c10: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
3c20: 5d 70 61 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a  ]page_size=N.  *
3c30: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
3c40: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
3c50: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
3c60: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64  g for the.  ** d
3c70: 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
3c80: 65 20 69 6e 20 62 79 74 65 73 2e 20 20 54 68 65  e in bytes.  The
3c90: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74   second form set
3ca0: 73 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  s the.  ** datab
3cb0: 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 76 61  ase page size va
3cc0: 6c 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  lue.  The value 
3cd0: 63 61 6e 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  can only be set 
3ce0: 69 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61  if.  ** the data
3cf0: 62 61 73 65 20 68 61 73 20 6e 6f 74 20 79 65 74  base has not yet
3d00: 20 62 65 65 6e 20 63 72 65 61 74 65 64 2e 0a 20   been created.. 
3d10: 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
3d20: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22  3StrICmp(zLeft,"
3d30: 70 61 67 65 5f 73 69 7a 65 22 29 3d 3d 30 20 29  page_size")==0 )
3d40: 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  {.    Btree *pBt
3d50: 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20   = pDb->pBt;.   
3d60: 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20   assert( pBt!=0 
3d70: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
3d80: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  ht ){.      int 
3d90: 73 69 7a 65 20 3d 20 41 4c 57 41 59 53 28 70 42  size = ALWAYS(pB
3da0: 74 29 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65  t) ? sqlite3Btre
3db0: 65 47 65 74 50 61 67 65 53 69 7a 65 28 70 42 74  eGetPageSize(pBt
3dc0: 29 20 3a 20 30 3b 0a 20 20 20 20 20 20 72 65 74  ) : 0;.      ret
3dd0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
3de0: 72 73 65 2c 20 22 70 61 67 65 5f 73 69 7a 65 22  rse, "page_size"
3df0: 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c  , size);.    }el
3e00: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c  se{.      /* Mal
3e10: 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20 77 68 65  loc may fail whe
3e20: 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 70 61  n setting the pa
3e30: 67 65 2d 73 69 7a 65 2c 20 61 73 20 74 68 65 72  ge-size, as ther
3e40: 65 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c  e is an internal
3e50: 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72  .      ** buffer
3e60: 20 74 68 61 74 20 74 68 65 20 70 61 67 65 72 20   that the pager 
3e70: 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65 73 20 75  module resizes u
3e80: 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 61  sing sqlite3_rea
3e90: 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f  lloc()..      */
3ea0: 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 50  .      db->nextP
3eb0: 61 67 65 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  agesize = sqlite
3ec0: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
3ed0: 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f       if( SQLITE_
3ee0: 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74  NOMEM==sqlite3Bt
3ef0: 72 65 65 53 65 74 50 61 67 65 53 69 7a 65 28 70  reeSetPageSize(p
3f00: 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67 65  Bt, db->nextPage
3f10: 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20  size,-1,0) ){.  
3f20: 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63        db->malloc
3f30: 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20  Failed = 1;.    
3f40: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
3f50: 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  e..  /*.  **  PR
3f60: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
3f70: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20  secure_delete.  
3f80: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
3f90: 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c  base.]secure_del
3fa0: 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a  ete=ON/OFF.  **.
3fb0: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
3fc0: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
3fd0: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20  current setting 
3fe0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 65 63  for the.  ** sec
3ff0: 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61 67 2e  ure_delete flag.
4000: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
4010: 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20 73 65  m changes the se
4020: 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a  cure_delete.  **
4030: 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20 61 6e   flag setting an
4040: 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e 65 77  d reports thenew
4050: 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 69   value..  */.  i
4060: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
4070: 70 28 7a 4c 65 66 74 2c 22 73 65 63 75 72 65 5f  p(zLeft,"secure_
4080: 64 65 6c 65 74 65 22 29 3d 3d 30 20 29 7b 0a 20  delete")==0 ){. 
4090: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
40a0: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e  pDb->pBt;.    in
40b0: 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73  t b = -1;.    as
40c0: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
40d0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
40e0: 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69  {.      b = sqli
40f0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
4100: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  ight, 0);.    }.
4110: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
4120: 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20  =0 && b>=0 ){.  
4130: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
4140: 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
4150: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
4160: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
4170: 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28  reeSecureDelete(
4180: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
4190: 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   b);.      }.   
41a0: 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74   }.    b = sqlit
41b0: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
41c0: 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20  ete(pBt, b);.   
41d0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
41e0: 28 70 50 61 72 73 65 2c 20 22 73 65 63 75 72 65  (pParse, "secure
41f0: 5f 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20  _delete", b);.  
4200: 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  }else..  /*.  **
4210: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
4220: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
4230: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
4240: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
4250: 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a  age_count=N.  **
4260: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
4270: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
4280: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
4290: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   for the.  ** ma
42a0: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
42b0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
42c0: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
42d0: 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f   .  ** second fo
42e0: 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63  rm attempts to c
42f0: 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69  hange this setti
4300: 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66  ng.  Both.  ** f
4310: 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20  orms return the 
4320: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e  current setting.
4330: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61  .  **.  ** The a
4340: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
4350: 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69   N is used.  Thi
4360: 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
4370: 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a  d and might.  **
4380: 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e   change.  The on
4390: 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f  ly purpose is to
43a0: 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79   provide an easy
43b0: 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a   way to test.  *
43c0: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73  * the sqlite3Abs
43d0: 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e  Int32() function
43e0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  **.  **  PRA
43f0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70  GMA [database.]p
4400: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  age_count.  **. 
4410: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
4420: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
4430: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
4440: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
4450: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
4460: 43 6d 70 28 7a 4c 65 66 74 2c 22 70 61 67 65 5f  Cmp(zLeft,"page_
4470: 63 6f 75 6e 74 22 29 3d 3d 30 0a 20 20 20 7c 7c  count")==0.   ||
4480: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
4490: 7a 4c 65 66 74 2c 22 6d 61 78 5f 70 61 67 65 5f  zLeft,"max_page_
44a0: 63 6f 75 6e 74 22 29 3d 3d 30 0a 20 20 29 7b 0a  count")==0.  ){.
44b0: 20 20 20 20 69 6e 74 20 69 52 65 67 3b 0a 20 20      int iReg;.  
44c0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61    if( sqlite3Rea
44d0: 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20  dSchema(pParse) 
44e0: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
44f0: 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  t;.    sqlite3Co
4500: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
4510: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
4520: 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65   iReg = ++pParse
4530: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20  ->nMem;.    if( 
4540: 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a  sqlite3Tolower(z
4550: 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b  Left[0])=='p' ){
4560: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4570: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50  beAddOp2(v, OP_P
4580: 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69  agecount, iDb, i
4590: 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Reg);.    }else{
45a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
45b0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d  beAddOp3(v, OP_M
45c0: 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52  axPgcnt, iDb, iR
45d0: 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  eg, .           
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
45f0: 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c  ite3AbsInt32(sql
4600: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
4610: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ));.    }.    sq
4620: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
4630: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
4640: 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73   iReg, 1);.    s
4650: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
4660: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
4670: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
4680: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
4690: 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
46a0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
46b0: 54 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f  T);.  }else..  /
46c0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
46d0: 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e  database.]lockin
46e0: 67 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41  g_mode.  **  PRA
46f0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
4700: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e  ocking_mode = (n
4710: 6f 72 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29  ormal|exclusive)
4720: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
4730: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
4740: 2c 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 29  ,"locking_mode")
4750: 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
4760: 20 63 68 61 72 20 2a 7a 52 65 74 20 3d 20 22 6e   char *zRet = "n
4770: 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e 74 20  ormal";.    int 
4780: 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63 6b 69  eMode = getLocki
4790: 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74 29 3b 0a  ngMode(zRight);.
47a0: 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e  .    if( pId2->n
47b0: 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d 50 41  ==0 && eMode==PA
47c0: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
47d0: 51 55 45 52 59 20 29 7b 0a 20 20 20 20 20 20 2f  QUERY ){.      /
47e0: 2a 20 53 69 6d 70 6c 65 20 22 50 52 41 47 4d 41  * Simple "PRAGMA
47f0: 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20   locking_mode;" 
4800: 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20  statement. This 
4810: 69 73 20 61 20 71 75 65 72 79 20 66 6f 72 0a 20  is a query for. 
4820: 20 20 20 20 20 2a 2a 20 74 68 65 20 63 75 72 72       ** the curr
4830: 65 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b  ent default lock
4840: 69 6e 67 20 6d 6f 64 65 20 28 77 68 69 63 68 20  ing mode (which 
4850: 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74  may be different
4860: 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   to.      ** the
4870: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66   locking-mode of
4880: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
4890: 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  se)..      */.  
48a0: 20 20 20 20 65 4d 6f 64 65 20 3d 20 64 62 2d 3e      eMode = db->
48b0: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20  dfltLockMode;.  
48c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50    }else{.      P
48d0: 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a 20 20  ager *pPager;.  
48e0: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
48f0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
4900: 20 54 68 69 73 20 69 6e 64 69 63 61 74 65 73 20   This indicates 
4910: 74 68 61 74 20 6e 6f 20 64 61 74 61 62 61 73 65  that no database
4920: 20 6e 61 6d 65 20 77 61 73 20 73 70 65 63 69 66   name was specif
4930: 69 65 64 20 61 73 20 70 61 72 74 0a 20 20 20 20  ied as part.    
4940: 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 50 52      ** of the PR
4950: 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e  AGMA command. In
4960: 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 6c   this case the l
4970: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75 73 74  ocking-mode must
4980: 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 73   be.        ** s
4990: 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68  et on all attach
49a0: 65 64 20 64 61 74 61 62 61 73 65 73 2c 20 61 73  ed databases, as
49b0: 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6d 61 69   well as the mai
49c0: 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20 20 20 20  n db file..     
49d0: 20 20 20 2a 2a 0a 20 20 20 20 20 20 20 20 2a 2a     **.        **
49e0: 20 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c 69 74   Also, the sqlit
49f0: 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20  e3.dfltLockMode 
4a00: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
4a10: 73 6f 20 74 68 61 74 0a 20 20 20 20 20 20 20 20  so that.        
4a20: 2a 2a 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  ** any subsequen
4a30: 74 6c 79 20 61 74 74 61 63 68 65 64 20 64 61 74  tly attached dat
4a40: 61 62 61 73 65 73 20 61 6c 73 6f 20 75 73 65 20  abases also use 
4a50: 74 68 65 20 73 70 65 63 69 66 69 65 64 0a 20 20  the specified.  
4a60: 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67        ** locking
4a70: 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20 20 2a   mode..        *
4a80: 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 69  /.        int ii
4a90: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
4aa0: 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62 5b 30  (pDb==&db->aDb[0
4ab0: 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  ]);.        for(
4ac0: 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=2; ii<db->nDb
4ad0: 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
4ae0: 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69     pPager = sqli
4af0: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64 62  te3BtreePager(db
4b00: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29 3b 0a  ->aDb[ii].pBt);.
4b10: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
4b20: 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64  3PagerLockingMod
4b30: 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29  e(pPager, eMode)
4b40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4b50: 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b      db->dfltLock
4b60: 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f 64 65  Mode = (u8)eMode
4b70: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
4b80: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
4b90: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
4ba0: 70 42 74 29 3b 0a 20 20 20 20 20 20 65 4d 6f 64  pBt);.      eMod
4bb0: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
4bc0: 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67  LockingMode(pPag
4bd0: 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20  er, eMode);.    
4be0: 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 65 4d  }..    assert(eM
4bf0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
4c00: 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 7c 7c 65  NGMODE_NORMAL||e
4c10: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
4c20: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
4c30: 45 29 3b 0a 20 20 20 20 69 66 28 20 65 4d 6f 64  E);.    if( eMod
4c40: 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  e==PAGER_LOCKING
4c50: 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29  MODE_EXCLUSIVE )
4c60: 7b 0a 20 20 20 20 20 20 7a 52 65 74 20 3d 20 22  {.      zRet = "
4c70: 65 78 63 6c 75 73 69 76 65 22 3b 0a 20 20 20 20  exclusive";.    
4c80: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
4c90: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
4ca0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
4cb0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
4cc0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
4cd0: 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c   "locking_mode",
4ce0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
4cf0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4d00: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
4d10: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a  ing8, 0, 1, 0, z
4d20: 52 65 74 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  Ret, 0);.    sql
4d30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
4d40: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
4d50: 31 2c 20 31 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  1, 1);.  }else..
4d60: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
4d70: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75  A [database.]jou
4d80: 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20  rnal_mode.  **  
4d90: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
4da0: 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  .]journal_mode =
4db0: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20  .  **           
4dc0: 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65             (dele
4dd0: 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74  te|persist|off|t
4de0: 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77  runcate|memory|w
4df0: 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 69  al|off).  */.  i
4e00: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
4e10: 70 28 7a 4c 65 66 74 2c 22 6a 6f 75 72 6e 61 6c  p(zLeft,"journal
4e20: 5f 6d 6f 64 65 22 29 3d 3d 30 20 29 7b 0a 20 20  _mode")==0 ){.  
4e30: 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20    int eMode;    
4e40: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68      /* One of th
4e50: 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  e PAGER_JOURNALM
4e60: 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20  ODE_XXX symbols 
4e70: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20  */.    int ii;  
4e80: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
4e90: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20   counter */..   
4ea0: 20 2f 2a 20 46 6f 72 63 65 20 74 68 65 20 73 63   /* Force the sc
4eb0: 68 65 6d 61 20 74 6f 20 62 65 20 6c 6f 61 64 65  hema to be loade
4ec0: 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73  d on all databas
4ed0: 65 73 2e 20 20 54 68 69 73 20 63 61 75 73 65 73  es.  This causes
4ee0: 20 61 6c 6c 0a 20 20 20 20 2a 2a 20 64 61 74 61   all.    ** data
4ef0: 62 61 73 65 20 66 69 6c 65 73 20 74 6f 20 62 65  base files to be
4f00: 20 6f 70 65 6e 65 64 20 61 6e 64 20 74 68 65 20   opened and the 
4f10: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 73 20 73 65  journal_modes se
4f20: 74 2e 20 20 54 68 69 73 20 69 73 0a 20 20 20 20  t.  This is.    
4f30: 2a 2a 20 6e 65 63 65 73 73 61 72 79 20 62 65 63  ** necessary bec
4f40: 61 75 73 65 20 73 75 62 73 65 71 75 65 6e 74 20  ause subsequent 
4f50: 70 72 6f 63 65 73 73 69 6e 67 20 6d 75 73 74 20  processing must 
4f60: 6b 6e 6f 77 20 69 66 20 74 68 65 20 64 61 74 61  know if the data
4f70: 62 61 73 65 73 0a 20 20 20 20 2a 2a 20 61 72 65  bases.    ** are
4f80: 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2e 20 2a 2f   in WAL mode. */
4f90: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
4fa0: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
4fb0: 65 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  e) ){.      goto
4fc0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
4fd0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 56   }..    sqlite3V
4fe0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
4ff0: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
5000: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
5010: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
5020: 45 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  E, "journal_mode
5030: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
5040: 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a 52 69 67  );..    if( zRig
5050: 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  ht==0 ){.      /
5060: 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
5070: 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f 66   "=MODE" part of
5080: 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f 20   the pragma, do 
5090: 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 0a  a query for the.
50a0: 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
50b0: 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 65   mode */.      e
50c0: 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55  Mode = PAGER_JOU
50d0: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  RNALMODE_QUERY;.
50e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
50f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f   const char *zMo
5100: 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20  de;.      int n 
5110: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
5120: 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  0(zRight);.     
5130: 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a   for(eMode=0; (z
5140: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f  Mode = sqlite3Jo
5150: 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d  urnalModename(eM
5160: 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b  ode))!=0; eMode+
5170: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
5180: 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
5190: 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e  zRight, zMode, n
51a0: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
51b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
51c0: 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  !zMode ){.      
51d0: 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f    /* If the "=MO
51e0: 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e 6f  DE" part does no
51f0: 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77  t match any know
5200: 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a  n journal mode,.
5210: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
5220: 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20  do a query */.  
5230: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41        eMode = PA
5240: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
5250: 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20  QUERY;.      }. 
5260: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f     }.    if( eMo
5270: 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  de==PAGER_JOURNA
5280: 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20 70  LMODE_QUERY && p
5290: 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20  Id2->n==0 ){.   
52a0: 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50     /* Convert "P
52b0: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
52c0: 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d 41  de" into "PRAGMA
52d0: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
52e0: 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44 62  de" */.      iDb
52f0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64 32   = 0;.      pId2
5300: 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ->n = 1;.    }. 
5310: 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44     for(ii=db->nD
5320: 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d  b-1; ii>=0; ii--
5330: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
5340: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20  >aDb[ii].pBt && 
5350: 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32  (ii==iDb || pId2
5360: 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20  ->n==0) ){.     
5370: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
5380: 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b 0a  esBtree(v, ii);.
5390: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
53a0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
53b0: 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c  JournalMode, ii,
53c0: 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20   1, eMode);.    
53d0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
53e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
53f0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
5400: 20 31 2c 20 31 29 3b 0a 20 20 7d 65 6c 73 65 0a   1, 1);.  }else.
5410: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
5420: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f  MA [database.]jo
5430: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
5440: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
5450: 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c  atabase.]journal
5460: 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20 20  _size_limit=N.  
5470: 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73  **.  ** Get or s
5480: 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69 6d 69  et the size limi
5490: 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  t on rollback jo
54a0: 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20 2a  urnal files..  *
54b0: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  /.  if( sqlite3S
54c0: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 6a 6f  trICmp(zLeft,"jo
54d0: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
54e0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 50 61 67  ")==0 ){.    Pag
54f0: 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
5500: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
5510: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36  Db->pBt);.    i6
5520: 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20  4 iLimit = -2;. 
5530: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
5540: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 74  .      sqlite3At
5550: 6f 69 36 34 28 7a 52 69 67 68 74 2c 20 26 69 4c  oi64(zRight, &iL
5560: 69 6d 69 74 2c 20 31 30 30 30 30 30 30 2c 20 53  imit, 1000000, S
5570: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20  QLITE_UTF8);.   
5580: 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31     if( iLimit<-1
5590: 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a   ) iLimit = -1;.
55a0: 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74      }.    iLimit
55b0: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4a   = sqlite3PagerJ
55c0: 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28  ournalSizeLimit(
55d0: 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b  pPager, iLimit);
55e0: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
55f0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a 6f  eInt(pParse, "jo
5600: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
5610: 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 7d 65  ", iLimit);.  }e
5620: 6c 73 65 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  lse..#endif /* S
5630: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
5640: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f  _PRAGMAS */..  /
5650: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
5660: 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76  database.]auto_v
5670: 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47  acuum.  **  PRAG
5680: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75  MA [database.]au
5690: 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a  to_vacuum=N.  **
56a0: 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74  .  ** Get or set
56b0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
56c0: 65 20 64 61 74 61 62 61 73 65 20 27 61 75 74 6f  e database 'auto
56d0: 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74  -vacuum' paramet
56e0: 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c  er..  ** The val
56f0: 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30  ue is one of:  0
5700: 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49   NONE 1 FULL 2 I
5710: 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a  NCREMENTAL.  */.
5720: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5730: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
5740: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
5750: 43 6d 70 28 7a 4c 65 66 74 2c 22 61 75 74 6f 5f  Cmp(zLeft,"auto_
5760: 76 61 63 75 75 6d 22 29 3d 3d 30 20 29 7b 0a 20  vacuum")==0 ){. 
5770: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
5780: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73  pDb->pBt;.    as
5790: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
57a0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
57b0: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
57c0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
57d0: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
57e0: 7d 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  }.    if( !zRigh
57f0: 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 61  t ){.      int a
5800: 75 74 6f 5f 76 61 63 75 75 6d 3b 0a 20 20 20 20  uto_vacuum;.    
5810: 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 42 74    if( ALWAYS(pBt
5820: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 61 75  ) ){.         au
5830: 74 6f 5f 76 61 63 75 75 6d 20 3d 20 73 71 6c 69  to_vacuum = sqli
5840: 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56  te3BtreeGetAutoV
5850: 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 20 20  acuum(pBt);.    
5860: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
5870: 20 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20    auto_vacuum = 
5880: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41  SQLITE_DEFAULT_A
5890: 55 54 4f 56 41 43 55 55 4d 3b 0a 20 20 20 20 20  UTOVACUUM;.     
58a0: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53   }.      returnS
58b0: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
58c0: 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 22 2c 20   "auto_vacuum", 
58d0: 61 75 74 6f 5f 76 61 63 75 75 6d 29 3b 0a 20 20  auto_vacuum);.  
58e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
58f0: 6e 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75  nt eAuto = getAu
5900: 74 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29  toVacuum(zRight)
5910: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5920: 65 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74  eAuto>=0 && eAut
5930: 6f 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62  o<=2 );.      db
5940: 2d 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20  ->nextAutovac = 
5950: 28 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20  (u8)eAuto;.     
5960: 20 69 66 28 20 41 4c 57 41 59 53 28 65 41 75 74   if( ALWAYS(eAut
5970: 6f 3e 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20  o>=0) ){.       
5980: 20 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f   /* Call SetAuto
5990: 56 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20  Vacuum() to set 
59a0: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69  initialize the i
59b0: 6e 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64  nternal auto and
59c0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 63 72  .        ** incr
59d0: 2d 76 61 63 75 75 6d 20 66 6c 61 67 73 2e 20 54  -vacuum flags. T
59e0: 68 69 73 20 69 73 20 72 65 71 75 69 72 65 64 20  his is required 
59f0: 69 6e 20 63 61 73 65 20 74 68 69 73 20 63 6f 6e  in case this con
5a00: 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20  nection.        
5a10: 2a 2a 20 63 72 65 61 74 65 73 20 74 68 65 20 64  ** creates the d
5a20: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49 74  atabase file. It
5a30: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 68   is important th
5a40: 61 74 20 69 74 20 69 73 20 63 72 65 61 74 65 64  at it is created
5a50: 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61  .        ** as a
5a60: 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61  n auto-vacuum ca
5a70: 70 61 62 6c 65 20 64 62 2e 0a 20 20 20 20 20 20  pable db..      
5a80: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
5a90: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
5aa0: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c  tAutoVacuum(pBt,
5ab0: 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 20   eAuto);.       
5ac0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
5ad0: 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20  OK && (eAuto==1 
5ae0: 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a  || eAuto==2) ){.
5af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
5b00: 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61 75  n setting the au
5b10: 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74  to_vacuum mode t
5b20: 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20  o either "full" 
5b30: 6f 72 20 0a 20 20 20 20 20 20 20 20 20 20 2a 2a  or .          **
5b40: 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20   "incremental", 
5b50: 77 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20  write the value 
5b60: 6f 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68  of meta[6] in th
5b70: 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
5b80: 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65       ** file. Be
5b90: 66 6f 72 65 20 77 72 69 74 69 6e 67 20 74 6f 20  fore writing to 
5ba0: 6d 65 74 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74  meta[6], check t
5bb0: 68 61 74 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69  hat meta[3] indi
5bc0: 63 61 74 65 73 0a 20 20 20 20 20 20 20 20 20 20  cates.          
5bd0: 2a 2a 20 74 68 61 74 20 74 68 69 73 20 72 65 61  ** that this rea
5be0: 6c 6c 79 20 69 73 20 61 6e 20 61 75 74 6f 2d 76  lly is an auto-v
5bf0: 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64 61  acuum capable da
5c00: 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 20 20  tabase..        
5c10: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73    */.          s
5c20: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
5c30: 4f 70 4c 69 73 74 20 73 65 74 4d 65 74 61 36 5b  OpList setMeta6[
5c40: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ] = {.          
5c50: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
5c60: 6f 6e 2c 20 20 20 20 30 2c 20 20 20 20 20 20 20  on,    0,       
5c70: 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20    1,            
5c80: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30       0},    /* 0
5c90: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
5ca0: 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c  { OP_ReadCookie,
5cb0: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
5cc0: 31 2c 20 20 20 20 20 20 20 20 20 42 54 52 45 45  1,         BTREE
5cd0: 5f 4c 41 52 47 45 53 54 5f 52 4f 4f 54 5f 50 41  _LARGEST_ROOT_PA
5ce0: 47 45 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GE},.           
5cf0: 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20   { OP_If,       
5d00: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
5d10: 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   0,             
5d20: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20      0},    /* 2 
5d30: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  */.            {
5d40: 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20   OP_Halt,       
5d50: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f      SQLITE_OK, O
5d60: 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20 20  E_Abort,        
5d70: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f    0},    /* 3 */
5d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
5d90: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20  P_Integer,      
5da0: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
5db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5dc0: 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20  0},    /* 4 */. 
5dd0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
5de0: 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20  SetCookie,      
5df0: 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45 45  0,         BTREE
5e00: 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31 7d  _INCR_VACUUM, 1}
5e10: 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20 20  ,    /* 5 */.   
5e20: 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20         };.      
5e30: 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b 0a 20      int iAddr;. 
5e40: 20 20 20 20 20 20 20 20 20 69 41 64 64 72 20 3d           iAddr =
5e50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5e60: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
5e70: 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65  ze(setMeta6), se
5e80: 74 4d 65 74 61 36 29 3b 0a 20 20 20 20 20 20 20  tMeta6);.       
5e90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
5ea0: 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c  angeP1(v, iAddr,
5eb0: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20   iDb);.         
5ec0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
5ed0: 67 65 50 31 28 76 2c 20 69 41 64 64 72 2b 31 2c  geP1(v, iAddr+1,
5ee0: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20   iDb);.         
5ef0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
5f00: 67 65 50 32 28 76 2c 20 69 41 64 64 72 2b 32 2c  geP2(v, iAddr+2,
5f10: 20 69 41 64 64 72 2b 34 29 3b 0a 20 20 20 20 20   iAddr+4);.     
5f20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5f30: 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64  ChangeP1(v, iAdd
5f40: 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29 3b 0a 20  r+4, eAuto-1);. 
5f50: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
5f60: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5f70: 69 41 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a 20  iAddr+5, iDb);. 
5f80: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
5f90: 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
5fa0: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 7d   iDb);.        }
5fb0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5fc0: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
5fd0: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
5fe0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e 63 72   [database.]incr
5ff0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e  emental_vacuum(N
6000: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e  ).  **.  ** Do N
6010: 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d   steps of increm
6020: 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20  ental vacuuming 
6030: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20  on a database.. 
6040: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
6050: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
6060: 55 4d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  UM.  if( sqlite3
6070: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 69  StrICmp(zLeft,"i
6080: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
6090: 6d 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e  m")==0 ){.    in
60a0: 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a  t iLimit, addr;.
60b0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
60c0: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
60d0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
60e0: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
60f0: 7d 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  }.    if( zRight
6100: 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47  ==0 || !sqlite3G
6110: 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20  etInt32(zRight, 
6120: 26 69 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d  &iLimit) || iLim
6130: 69 74 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  it<=0 ){.      i
6140: 4c 69 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66  Limit = 0x7fffff
6150: 66 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ff;.    }.    sq
6160: 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
6170: 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c  peration(pParse,
6180: 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71   0, iDb);.    sq
6190: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
61a0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
61b0: 4c 69 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61  Limit, 1);.    a
61c0: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
61d0: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e  eAddOp1(v, OP_In
61e0: 63 72 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 0a  crVacuum, iDb);.
61f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6200: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp1(v, OP_Resu
6210: 6c 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73  ltRow, 1);.    s
6220: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
6230: 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
6240: 2c 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  , -1);.    sqlit
6250: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
6260: 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64  OP_IfPos, 1, add
6270: 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  r);.    sqlite3V
6280: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
6290: 64 64 72 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65  ddr);.  }else.#e
62a0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
62b0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
62c0: 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a  PRAGMAS.  /*.  *
62d0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
62e0: 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a  ase.]cache_size.
62f0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
6300: 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69  tabase.]cache_si
6310: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
6320: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
6330: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
6340: 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20  t local setting 
6350: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67  for the.  ** pag
6360: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68  e cache size. Th
6370: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
6380: 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a  ts the local.  *
6390: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
63a0: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69  e value.  If N i
63b0: 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20  s positive then 
63c0: 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a  that is the.  **
63d0: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
63e0: 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20   in the cache.  
63f0: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
6400: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
6410: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
6420: 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74  is adjusted so t
6430: 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73  hat the cache us
6440: 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a  es -N kibibytes.
6450: 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a    ** of memory..
6460: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
6470: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
6480: 22 63 61 63 68 65 5f 73 69 7a 65 22 29 3d 3d 30  "cache_size")==0
6490: 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
64a0: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
64b0: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
64c0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 61 73 73  gma_out;.    ass
64d0: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
64e0: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
64f0: 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
6500: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
6510: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
6520: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 63 61 63  Int(pParse, "cac
6530: 68 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d 3e 70  he_size", pDb->p
6540: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
6550: 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ze);.    }else{.
6560: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d        int size =
6570: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
6580: 67 68 74 29 3b 0a 20 20 20 20 20 20 70 44 62 2d  ght);.      pDb-
6590: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
65a0: 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20  size = size;.   
65b0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
65c0: 65 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d  etCacheSize(pDb-
65d0: 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65  >pBt, pDb->pSche
65e0: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b  ma->cache_size);
65f0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
6600: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
6610: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d 61  A [database.]mma
6620: 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20  p_size(N).  **. 
6630: 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20   ** Used to set 
6640: 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d  mapping size lim
6650: 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20  it. The mapping 
6660: 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20  size limit is.  
6670: 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74  ** used to limit
6680: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
6690: 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72  ize of all memor
66a0: 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73  y mapped regions
66b0: 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74   of the.  ** dat
66c0: 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74  abase file. If t
66d0: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73  his parameter is
66e0: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68   set to zero, th
66f0: 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e  en memory mappin
6700: 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73  g.  ** is not us
6710: 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e  ed at all.  If N
6720: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
6730: 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d  en the default m
6740: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c  emory map.  ** l
6750: 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20  imit determined 
6760: 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  by sqlite3_confi
6770: 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
6780: 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65  MMAP_SIZE) is se
6790: 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61  t..  ** The para
67a0: 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75  meter N is measu
67b0: 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20  red in bytes..  
67c0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c  **.  ** This val
67d0: 75 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20  ue is advisory. 
67e0: 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   The underlying 
67f0: 56 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d  VFS is free to m
6800: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61  emory map.  ** a
6810: 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d  s little or as m
6820: 75 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e  uch as it wants.
6830: 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69    Except, if N i
6840: 73 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20  s set to 0 then 
6850: 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c  the.  ** upper l
6860: 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72  ayers will never
6870: 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74   invoke the xFet
6880: 63 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f  ch interfaces to
6890: 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20   the VFS..  */. 
68a0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
68b0: 43 6d 70 28 7a 4c 65 66 74 2c 22 6d 6d 61 70 5f  Cmp(zLeft,"mmap_
68c0: 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  size")==0 ){.   
68d0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
68e0: 7a 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  z;.    assert( s
68f0: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
6900: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
6910: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  ) );.    if( zRi
6920: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ght ){.      int
6930: 20 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   ii;.      sqlit
6940: 65 33 41 74 6f 69 36 34 28 7a 52 69 67 68 74 2c  e3Atoi64(zRight,
6950: 20 26 73 7a 2c 20 31 30 30 30 2c 20 53 51 4c 49   &sz, 1000, SQLI
6960: 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20  TE_UTF8);.      
6970: 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20  if( sz<0 ) sz = 
6980: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
6990: 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20  fig.szMmap;.    
69a0: 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30    if( pId2->n==0
69b0: 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20   ) db->szMmap = 
69c0: 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69  sz;.      for(ii
69d0: 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d  =db->nDb-1; ii>=
69e0: 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20  0; ii--){.      
69f0: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69    if( db->aDb[ii
6a00: 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44  ].pBt && (ii==iD
6a10: 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29  b || pId2->n==0)
6a20: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
6a30: 6c 69 74 65 33 42 74 72 65 65 53 65 74 4d 6d 61  lite3BtreeSetMma
6a40: 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69  pLimit(db->aDb[i
6a50: 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20  i].pBt, sz);.   
6a60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
6a70: 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31     }.    sz = -1
6a80: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
6a90: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
6aa0: 62 2c 7a 44 62 2c 53 51 4c 49 54 45 5f 46 43 4e  b,zDb,SQLITE_FCN
6ab0: 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 26 73 7a  TL_MMAP_SIZE,&sz
6ac0: 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )==SQLITE_OK ){.
6ad0: 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  #if SQLITE_MAX_M
6ae0: 4d 41 50 5f 53 49 5a 45 3d 3d 30 0a 20 20 20 20  MAP_SIZE==0.    
6af0: 20 20 73 7a 20 3d 20 30 3b 0a 23 65 6e 64 69 66    sz = 0;.#endif
6b00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
6b10: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
6b20: 6d 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b  mmap_size", sz);
6b30: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
6b40: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
6b50: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  MA temp_store.  
6b60: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  **   PRAGMA temp
6b70: 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c  _store = "defaul
6b80: 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c  t"|"memory"|"fil
6b90: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
6ba0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
6bb0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
6bc0: 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61  e temp_store fla
6bd0: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
6be0: 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  * the local valu
6bf0: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20  e does not make 
6c00: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
6c10: 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65  isk file and the
6c20: 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61   default.  ** va
6c30: 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74  lue will be rest
6c40: 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69  ored the next ti
6c50: 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  me the database 
6c60: 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a  is opened..  **.
6c70: 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 69    ** Note that i
6c80: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f  t is possible fo
6c90: 72 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f  r the library co
6ca0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
6cb0: 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72  ns to.  ** overr
6cc0: 69 64 65 20 74 68 69 73 20 73 65 74 74 69 6e 67  ide this setting
6cd0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
6ce0: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
6cf0: 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 29 3d  , "temp_store")=
6d00: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 21 7a  =0 ){.    if( !z
6d10: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
6d20: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
6d30: 50 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f  Parse, "temp_sto
6d40: 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74  re", db->temp_st
6d50: 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ore);.    }else{
6d60: 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d  .      changeTem
6d70: 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c  pStorage(pParse,
6d80: 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a   zRight);.    }.
6d90: 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20    }else..  /*.  
6da0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  **   PRAGMA temp
6db0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
6dc0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
6dd0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6de0: 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63 74  ory = ""|"direct
6df0: 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20  ory_name".  **. 
6e00: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
6e10: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
6e20: 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74  e of the temp_st
6e30: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66 6c  ore_directory fl
6e40: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
6e50: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65 74  ** the value set
6e60: 73 20 61 20 73 70 65 63 69 66 69 63 20 64 69 72  s a specific dir
6e70: 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65  ectory to be use
6e80: 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
6e90: 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53 65 74 74  files..  ** Sett
6ea0: 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74  ing to a null st
6eb0: 72 69 6e 67 20 72 65 76 65 72 74 73 20 74 6f 20  ring reverts to 
6ec0: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 6d 70  the default temp
6ed0: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
6ee0: 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20 49 66 20  search..  ** If 
6ef0: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
6f00: 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 2c 20  ory is changed, 
6f10: 74 68 65 6e 20 69 6e 76 61 6c 69 64 61 74 65 54  then invalidateT
6f20: 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20 20 2a 2a  empStorage..  **
6f30: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
6f40: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
6f50: 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  , "temp_store_di
6f60: 72 65 63 74 6f 72 79 22 29 3d 3d 30 20 29 7b 0a  rectory")==0 ){.
6f70: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
6f80: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
6f90: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
6fa0: 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ory ){.        s
6fb0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
6fc0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
6fd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6fe0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
6ff0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20  COLNAME_NAME, . 
7000: 20 20 20 20 20 20 20 20 20 20 20 22 74 65 6d 70             "temp
7010: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7020: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
7030: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
7040: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
7050: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
7060: 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 74 65 6d  , 0, sqlite3_tem
7070: 70 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b  p_directory, 0);
7080: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
7090: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
70a0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
70b0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
70c0: 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51  else{.#ifndef SQ
70d0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
70e0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
70f0: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  ] ){.        int
7100: 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63   res;.        rc
7110: 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65   = sqlite3OsAcce
7120: 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69  ss(db->pVfs, zRi
7130: 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45  ght, SQLITE_ACCE
7140: 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72  SS_READWRITE, &r
7150: 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
7160: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
7170: 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  | res==0 ){.    
7180: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
7190: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e  orMsg(pParse, "n
71a0: 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69  ot a writable di
71b0: 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20  rectory");.     
71c0: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
71d0: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  _out;.        }.
71e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
71f0: 28 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  ( SQLITE_TEMP_ST
7200: 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c  ORE==0.       ||
7210: 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54   (SQLITE_TEMP_ST
7220: 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d 3e 74 65  ORE==1 && db->te
7230: 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a 20 20 20  mp_store<=1).   
7240: 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54      || (SQLITE_T
7250: 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20 26 26 20  EMP_STORE==2 && 
7260: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d  db->temp_store==
7270: 31 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  1).      ){.    
7280: 20 20 20 20 69 6e 76 61 6c 69 64 61 74 65 54 65      invalidateTe
7290: 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65  mpStorage(pParse
72a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
72b0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71   sqlite3_free(sq
72c0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
72d0: 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28  tory);.      if(
72e0: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
72f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65        sqlite3_te
7300: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73  mp_directory = s
7310: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
7320: 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  %s", zRight);.  
7330: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7340: 20 20 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f     sqlite3_temp_
7350: 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20  directory = 0;. 
7360: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a       }.#endif /*
7370: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
7380: 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   */.    }.  }els
7390: 65 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  e..#if SQLITE_OS
73a0: 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WIN.  /*.  **  
73b0: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
73c0: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
73d0: 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f  *   PRAGMA data_
73e0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
73f0: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
7400: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
7410: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
7420: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
7430: 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f   the data_store_
7440: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
7450: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
7460: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
7470: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
7480: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
7490: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
74a0: 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20   that.  ** were 
74b0: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
74c0: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61   relative pathna
74d0: 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20  me.  Setting to 
74e0: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
74f0: 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68  verts.  ** to th
7500: 65 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61  e default databa
7510: 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  se directory, wh
7520: 69 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65  ich for database
7530: 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64   files specified
7540: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c   with.  ** a rel
7550: 61 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20  ative path will 
7560: 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65  probably be base
7570: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
7580: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
7590: 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e  he.  ** process.
75a0: 20 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20    Database file 
75b0: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
75c0: 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20  n absolute path 
75d0: 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64  are not impacted
75e0: 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65  .  ** by this se
75f0: 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73  tting, regardles
7600: 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a  s of its value..
7610: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 69 66 28 20    **.  */.  if( 
7620: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
7630: 4c 65 66 74 2c 20 22 64 61 74 61 5f 73 74 6f 72  Left, "data_stor
7640: 65 5f 64 69 72 65 63 74 6f 72 79 22 29 3d 3d 30  e_directory")==0
7650: 20 29 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   ){.    if( !zRi
7660: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
7670: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
7680: 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20  rectory ){.     
7690: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
76a0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
76b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
76c0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
76d0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
76e0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
76f0: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
7700: 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54  tory", SQLITE_ST
7710: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
7720: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
7730: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
7740: 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33  0, 1, 0, sqlite3
7750: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 2c  _data_directory,
7760: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
7770: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
7780: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
7790: 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 1);.      }. 
77a0: 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65     }else{.#ifnde
77b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
77c0: 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  D.      if( zRig
77d0: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
77e0: 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20   int res;.      
77f0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
7800: 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c  Access(db->pVfs,
7810: 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f   zRight, SQLITE_
7820: 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45  ACCESS_READWRITE
7830: 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
7840: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
7850: 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a  OK || res==0 ){.
7860: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
7870: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
7880: 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c  , "not a writabl
7890: 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20  e directory");. 
78a0: 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72           goto pr
78b0: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20  agma_out;.      
78c0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
78d0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73    sqlite3_free(s
78e0: 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65  qlite3_data_dire
78f0: 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66  ctory);.      if
7900: 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20  ( zRight[0] ){. 
7910: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64         sqlite3_d
7920: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ata_directory = 
7930: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
7940: 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20  "%s", zRight);. 
7950: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
7960: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
7970: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a  _directory = 0;.
7980: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f        }.#endif /
7990: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  * SQLITE_OMIT_WS
79a0: 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  D */.    }.  }el
79b0: 73 65 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  se.#endif..#if !
79c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
79d0: 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
79e0: 59 4c 45 29 0a 23 20 20 69 66 20 64 65 66 69 6e  YLE).#  if defin
79f0: 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20  ed(__APPLE__).# 
7a00: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
7a10: 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f  _ENABLE_LOCKING_
7a20: 53 54 59 4c 45 20 31 0a 23 20 20 65 6c 73 65 0a  STYLE 1.#  else.
7a30: 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  #    define SQLI
7a40: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
7a50: 47 5f 53 54 59 4c 45 20 30 0a 23 20 20 65 6e 64  G_STYLE 0.#  end
7a60: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  if.#endif.#if SQ
7a70: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b  LITE_ENABLE_LOCK
7a80: 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20  ING_STYLE.  /*. 
7a90: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
7aa0: 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72  atabase.]lock_pr
7ab0: 6f 78 79 5f 66 69 6c 65 0a 20 20 20 2a 2a 20 20  oxy_file.   **  
7ac0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
7ad0: 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  e.]lock_proxy_fi
7ae0: 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c  le = ":auto:"|"l
7af0: 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20  ock_file_path". 
7b00: 20 20 2a 2a 0a 20 20 20 2a 2a 20 52 65 74 75 72    **.   ** Retur
7b10: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c  n or set the val
7b20: 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70  ue of the lock_p
7b30: 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20  roxy_file flag. 
7b40: 20 43 68 61 6e 67 69 6e 67 0a 20 20 20 2a 2a 20   Changing.   ** 
7b50: 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61  the value sets a
7b60: 20 73 70 65 63 69 66 69 63 20 66 69 6c 65 20 74   specific file t
7b70: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
7b80: 74 61 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f  tabase access lo
7b90: 63 6b 73 2e 0a 20 20 20 2a 2a 0a 20 20 20 2a 2f  cks..   **.   */
7ba0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
7bb0: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 6c 6f  rICmp(zLeft, "lo
7bc0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 29 3d  ck_proxy_file")=
7bd0: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 21 7a  =0 ){.    if( !z
7be0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 50  Right ){.      P
7bf0: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
7c00: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
7c10: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
7c20: 20 20 63 68 61 72 20 2a 70 72 6f 78 79 5f 66 69    char *proxy_fi
7c30: 6c 65 5f 70 61 74 68 20 3d 20 4e 55 4c 4c 3b 0a  le_path = NULL;.
7c40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
7c50: 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69  le *pFile = sqli
7c60: 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50 61  te3PagerFile(pPa
7c70: 67 65 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ger);.      sqli
7c80: 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c  te3OsFileControl
7c90: 48 69 6e 74 28 70 46 69 6c 65 2c 20 53 51 4c 49  Hint(pFile, SQLI
7ca0: 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_GET_LOCKPROXY
7cb0: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cd0: 20 20 26 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61    &proxy_file_pa
7ce0: 74 68 29 3b 0a 20 20 20 20 20 20 0a 20 20 20 20  th);.      .    
7cf0: 20 20 69 66 28 20 70 72 6f 78 79 5f 66 69 6c 65    if( proxy_file
7d00: 5f 70 61 74 68 20 29 7b 0a 20 20 20 20 20 20 20  _path ){.       
7d10: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
7d20: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
7d30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7d40: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
7d50: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
7d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
7d80: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22  lock_proxy_file"
7d90: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
7da0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
7db0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
7dc0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
7dd0: 20 30 2c 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70   0, proxy_file_p
7de0: 61 74 68 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ath, 0);.       
7df0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
7e00: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
7e10: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 1, 1);.     
7e20: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
7e30: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
7e40: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
7e50: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
7e60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7e70: 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c  ile *pFile = sql
7e80: 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50  ite3PagerFile(pP
7e90: 61 67 65 72 29 3b 0a 20 20 20 20 20 20 69 6e 74  ager);.      int
7ea0: 20 72 65 73 3b 0a 20 20 20 20 20 20 69 66 28 20   res;.      if( 
7eb0: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
7ec0: 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33       res=sqlite3
7ed0: 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46  OsFileControl(pF
7ee0: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f  ile, SQLITE_SET_
7ef0: 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a  LOCKPROXYFILE, .
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 20 20 20 20 7a 52 69 67 68 74 29 3b 0a 20 20       zRight);.  
7f30: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
7f40: 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33       res=sqlite3
7f50: 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46  OsFileControl(pF
7f60: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f  ile, SQLITE_SET_
7f70: 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a  LOCKPROXYFILE, .
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fa0: 20 20 20 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20       NULL);.    
7fb0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
7fc0: 73 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  s!=SQLITE_OK ){.
7fd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
7fe0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
7ff0: 22 66 61 69 6c 65 64 20 74 6f 20 73 65 74 20 6c  "failed to set l
8000: 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c 65 22 29  ock proxy file")
8010: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70  ;.        goto p
8020: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
8030: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
8040: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
8050: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
8060: 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a  _STYLE */      .
8070: 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20      .  /*.  **  
8080: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
8090: 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20  e.]synchronous. 
80a0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
80b0: 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e  tabase.]synchron
80c0: 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41  ous=OFF|ON|NORMA
80d0: 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a  L|FULL.  **.  **
80e0: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
80f0: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
8100: 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75  f the synchronou
8110: 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  s flag.  Changin
8120: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
8130: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
8140: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
8150: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
8160: 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75  d the.  ** defau
8170: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
8180: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
8190: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
81a0: 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65  base is.  ** ope
81b0: 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ned..  */.  if( 
81c0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
81d0: 4c 65 66 74 2c 22 73 79 6e 63 68 72 6f 6e 6f 75  Left,"synchronou
81e0: 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  s")==0 ){.    if
81f0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
8200: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
8210: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
8220: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
8230: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
8240: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
8250: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 20 70  "synchronous", p
8260: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
8270: 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  -1);.    }else{.
8280: 20 20 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61        if( !db->a
8290: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
82a0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
82b0: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 0a 20 20  rMsg(pParse, .  
82c0: 20 20 20 20 20 20 20 20 20 20 22 53 61 66 65 74            "Safet
82d0: 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20  y level may not 
82e0: 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64  be changed insid
82f0: 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  e a transaction"
8300: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
8310: 20 20 20 20 20 20 20 20 70 44 62 2d 3e 73 61 66          pDb->saf
8320: 65 74 79 5f 6c 65 76 65 6c 20 3d 20 67 65 74 53  ety_level = getS
8330: 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68  afetyLevel(zRigh
8340: 74 2c 30 2c 31 29 2b 31 3b 0a 20 20 20 20 20 20  t,0,1)+1;.      
8350: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
8360: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
8370: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
8380: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
8390: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
83a0: 5f 50 52 41 47 4d 41 53 0a 20 20 69 66 28 20 66  _PRAGMAS.  if( f
83b0: 6c 61 67 50 72 61 67 6d 61 28 70 50 61 72 73 65  lagPragma(pParse
83c0: 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 29  , zLeft, zRight)
83d0: 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 66   ){.    /* The f
83e0: 6c 61 67 50 72 61 67 6d 61 28 29 20 73 75 62 72  lagPragma() subr
83f0: 6f 75 74 69 6e 65 20 61 6c 73 6f 20 67 65 6e 65  outine also gene
8400: 72 61 74 65 73 20 61 6e 79 20 6e 65 63 65 73 73  rates any necess
8410: 61 72 79 20 63 6f 64 65 0a 20 20 20 20 2a 2a 20  ary code.    ** 
8420: 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67  there is nothing
8430: 20 6d 6f 72 65 20 74 6f 20 64 6f 20 68 65 72 65   more to do here
8440: 20 2a 2f 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64   */.  }else.#end
8450: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
8460: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a  T_FLAG_PRAGMAS *
8470: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
8480: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
8490: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
84a0: 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69    PRAGMA table_i
84b0: 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a  nfo(<table>).  *
84c0: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20  *.  ** Return a 
84d0: 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65  single row for e
84e0: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
84f0: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54  e named table. T
8500: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20  he columns of.  
8510: 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  ** the returned 
8520: 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20  data set are:.  
8530: 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20  **.  ** cid:    
8540: 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e      Column id (n
8550: 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66  umbered from lef
8560: 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72  t to right, star
8570: 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20  ting at 0).  ** 
8580: 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75  name:       Colu
8590: 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70  mn name.  ** typ
85a0: 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  e:       Column 
85b0: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
85c0: 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20  ..  ** notnull: 
85d0: 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20     True if 'NOT 
85e0: 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66  NULL' is part of
85f0: 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   column declarat
8600: 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61  ion.  ** dflt_va
8610: 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74  lue: The default
8620: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63   value for the c
8630: 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20  olumn, if any.. 
8640: 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
8650: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
8660: 22 74 61 62 6c 65 5f 69 6e 66 6f 22 29 3d 3d 30  "table_info")==0
8670: 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20   && zRight ){.  
8680: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
8690: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
86a0: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
86b0: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
86c0: 75 74 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ut;.    pTab = s
86d0: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
86e0: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
86f0: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
8700: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b  {.      int i, k
8710: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64  ;.      int nHid
8720: 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43  den = 0;.      C
8730: 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20  olumn *pCol;.   
8740: 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 3b 0a 20     Index *pPk;. 
8750: 20 20 20 20 20 66 6f 72 28 70 50 6b 3d 70 54 61       for(pPk=pTa
8760: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 50 6b 20 26  b->pIndex; pPk &
8770: 26 20 70 50 6b 2d 3e 61 75 74 6f 49 6e 64 65 78  & pPk->autoIndex
8780: 21 3d 32 3b 20 70 50 6b 3d 70 50 6b 2d 3e 70 4e  !=2; pPk=pPk->pN
8790: 65 78 74 29 7b 7d 0a 20 20 20 20 20 20 73 71 6c  ext){}.      sql
87a0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
87b0: 6c 73 28 76 2c 20 36 29 3b 0a 20 20 20 20 20 20  ls(v, 6);.      
87c0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36  pParse->nMem = 6
87d0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
87e0: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
87f0: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
8800: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8810: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
8820: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
8830: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
8840: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
8850: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
8860: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
8870: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
8880: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8890: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
88a0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
88b0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 79  OLNAME_NAME, "ty
88c0: 70 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  pe", SQLITE_STAT
88d0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
88e0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
88f0: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
8900: 41 4d 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20  AME, "notnull", 
8910: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8920: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8930: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34  eSetColName(v, 4
8940: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
8950: 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20 53 51  "dflt_value", SQ
8960: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8970: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8980: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20  etColName(v, 5, 
8990: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70  COLNAME_NAME, "p
89a0: 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  k", SQLITE_STATI
89b0: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
89c0: 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
89d0: 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62  mes(pParse, pTab
89e0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
89f0: 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f  , pCol=pTab->aCo
8a00: 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b  l; i<pTab->nCol;
8a10: 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20   i++, pCol++){. 
8a20: 20 20 20 20 20 20 20 69 66 28 20 49 73 48 69 64         if( IsHid
8a30: 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20  denColumn(pCol) 
8a40: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 48 69  ){.          nHi
8a50: 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20  dden++;.        
8a60: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
8a70: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
8a80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8a90: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
8aa0: 2d 6e 48 69 64 64 65 6e 2c 20 31 29 3b 0a 20 20  -nHidden, 1);.  
8ab0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8ac0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
8ad0: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
8ae0: 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b  pCol->zName, 0);
8af0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8b00: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
8b10: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
8b20: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 43  0,.           pC
8b30: 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c  ol->zType ? pCol
8b40: 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20 30 29  ->zType : "", 0)
8b50: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
8b60: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8b70: 50 5f 49 6e 74 65 67 65 72 2c 20 28 70 43 6f 6c  P_Integer, (pCol
8b80: 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20  ->notNull ? 1 : 
8b90: 30 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  0), 4);.        
8ba0: 69 66 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 20  if( pCol->zDflt 
8bb0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
8bc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
8bd0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
8be0: 20 35 2c 20 30 2c 20 28 63 68 61 72 2a 29 70 43   5, 0, (char*)pC
8bf0: 6f 6c 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b 0a 20  ol->zDflt, 0);. 
8c00: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
8c10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8c20: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8c30: 4e 75 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20 20 20  Null, 0, 5);.   
8c40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
8c50: 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61  f( (pCol->colFla
8c60: 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52 49  gs & COLFLAG_PRI
8c70: 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20 20  MKEY)==0 ){.    
8c80: 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20        k = 0;.   
8c90: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
8ca0: 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  Pk==0 ){.       
8cb0: 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20     k = 1;.      
8cc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
8cd0: 20 20 20 66 6f 72 28 6b 3d 31 3b 20 41 4c 57 41     for(k=1; ALWA
8ce0: 59 53 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c  YS(k<=pTab->nCol
8cf0: 29 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75  ) && pPk->aiColu
8d00: 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29  mn[k-1]!=i; k++)
8d10: 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  {}.        }.   
8d20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8d30: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
8d40: 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20 20 20  eger, k, 6);.   
8d50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8d60: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
8d70: 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20  ultRow, 1, 6);. 
8d80: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
8d90: 65 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69  else..  if( sqli
8da0: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
8db0: 2c 20 22 69 6e 64 65 78 5f 69 6e 66 6f 22 29 3d  , "index_info")=
8dc0: 3d 30 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a  =0 && zRight ){.
8dd0: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
8de0: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
8df0: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
8e00: 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72  3ReadSchema(pPar
8e10: 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  se) ) goto pragm
8e20: 61 5f 6f 75 74 3b 0a 20 20 20 20 70 49 64 78 20  a_out;.    pIdx 
8e30: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64  = sqlite3FindInd
8e40: 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  ex(db, zRight, z
8e50: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64  Db);.    if( pId
8e60: 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  x ){.      int i
8e70: 3b 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 70  ;.      pTab = p
8e80: 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20  Idx->pTable;.   
8e90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8ea0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a  tNumCols(v, 3);.
8eb0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
8ec0: 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 73 71  em = 3;.      sq
8ed0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
8ee0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
8ef0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
8f00: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
8f10: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
8f20: 4d 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51 4c  ME, "seqno", SQL
8f30: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8f40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8f50: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
8f60: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69  OLNAME_NAME, "ci
8f70: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
8f80: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
8f90: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
8fa0: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
8fb0: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
8fc0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8fd0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64    for(i=0; i<pId
8fe0: 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 69 2b 2b 29  x->nColumn; i++)
8ff0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6e  {.        int cn
9000: 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c  um = pIdx->aiCol
9010: 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  umn[i];.        
9020: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9030: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
9040: 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   i, 1);.        
9050: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9060: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
9070: 20 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20 20   cnum, 2);.     
9080: 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 2d     assert( pTab-
9090: 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20  >nCol>cnum );.  
90a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
90b0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
90c0: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20  ring8, 0, 3, 0, 
90d0: 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d  pTab->aCol[cnum]
90e0: 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  .zName, 0);.    
90f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9100: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
9110: 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20  ltRow, 1, 3);.  
9120: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
9130: 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  lse..  if( sqlit
9140: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
9150: 20 22 69 6e 64 65 78 5f 6c 69 73 74 22 29 3d 3d   "index_list")==
9160: 30 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20  0 && zRight ){. 
9170: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
9180: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
9190: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
91a0: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
91b0: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
91c0: 5f 6f 75 74 3b 0a 20 20 20 20 70 54 61 62 20 3d  _out;.    pTab =
91d0: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
91e0: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
91f0: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
9200: 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71   ){.      v = sq
9210: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
9220: 72 73 65 29 3b 0a 20 20 20 20 20 20 70 49 64 78  rse);.      pIdx
9230: 20 3d 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b   = pTab->pIndex;
9240: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78 20  .      if( pIdx 
9250: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  ){.        int i
9260: 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20 73   = 0; .        s
9270: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
9280: 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20  Cols(v, 3);.    
9290: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
92a0: 20 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 73 71   = 3;.        sq
92b0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
92c0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
92d0: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  b);.        sqli
92e0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
92f0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
9300: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
9310: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9320: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9330: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
9340: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9350: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
9360: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
9370: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
9380: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
9390: 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65  ME_NAME, "unique
93a0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
93b0: 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  );.        while
93c0: 28 70 49 64 78 29 7b 0a 20 20 20 20 20 20 20 20  (pIdx){.        
93d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
93e0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
93f0: 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20  r, i, 1);.      
9400: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9410: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
9420: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49  ng8, 0, 2, 0, pI
9430: 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  dx->zName, 0);. 
9440: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9450: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9460: 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e  _Integer, pIdx->
9470: 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65  onError!=OE_None
9480: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
9490: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
94a0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
94b0: 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20  w, 1, 3);.      
94c0: 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20      ++i;.       
94d0: 20 20 20 70 49 64 78 20 3d 20 70 49 64 78 2d 3e     pIdx = pIdx->
94e0: 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 7d  pNext;.        }
94f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9500: 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73 71   }else..  if( sq
9510: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
9520: 66 74 2c 20 22 64 61 74 61 62 61 73 65 5f 6c 69  ft, "database_li
9530: 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  st")==0 ){.    i
9540: 6e 74 20 69 3b 0a 20 20 20 20 69 66 28 20 73 71  nt i;.    if( sq
9550: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
9560: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
9570: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 73  ragma_out;.    s
9580: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
9590: 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20  Cols(v, 3);.    
95a0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
95b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
95c0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
95d0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
95e0: 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54  "seq", SQLITE_ST
95f0: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
9600: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
9610: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
9620: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
9630: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9640: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9650: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
9660: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 69 6c 65  NAME_NAME, "file
9670: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9680: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
9690: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
96a0: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
96b0: 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63  Db[i].pBt==0 ) c
96c0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61  ontinue;.      a
96d0: 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
96e0: 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20  ].zName!=0 );.  
96f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9700: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
9710: 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20  ger, i, 1);.    
9720: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9730: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
9740: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 64 62 2d 3e  8, 0, 2, 0, db->
9750: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29  aDb[i].zName, 0)
9760: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9770: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
9780: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
9790: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  ,.           sql
97a0: 69 74 65 33 42 74 72 65 65 47 65 74 46 69 6c 65  ite3BtreeGetFile
97b0: 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e  name(db->aDb[i].
97c0: 70 42 74 29 2c 20 30 29 3b 0a 20 20 20 20 20 20  pBt), 0);.      
97d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
97e0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
97f0: 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a  w, 1, 3);.    }.
9800: 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73    }else..  if( s
9810: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
9820: 65 66 74 2c 20 22 63 6f 6c 6c 61 74 69 6f 6e 5f  eft, "collation_
9830: 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  list")==0 ){.   
9840: 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
9850: 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20  HashElem *p;.   
9860: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
9870: 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20  umCols(v, 2);.  
9880: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9890: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   2;.    sqlite3V
98a0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
98b0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
98c0: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
98d0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
98e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
98f0: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
9900: 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53  _NAME, "name", S
9910: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
9920: 20 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 48     for(p=sqliteH
9930: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43  ashFirst(&db->aC
9940: 6f 6c 6c 53 65 71 29 3b 20 70 3b 20 70 3d 73 71  ollSeq); p; p=sq
9950: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70 29 29  liteHashNext(p))
9960: 7b 0a 20 20 20 20 20 20 43 6f 6c 6c 53 65 71 20  {.      CollSeq 
9970: 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65  *pColl = (CollSe
9980: 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  q *)sqliteHashDa
9990: 74 61 28 70 29 3b 0a 20 20 20 20 20 20 73 71 6c  ta(p);.      sql
99a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
99b0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2b  , OP_Integer, i+
99c0: 2b 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  +, 1);.      sql
99d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
99e0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
99f0: 20 32 2c 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e   2, 0, pColl->zN
9a00: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ame, 0);.      s
9a10: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9a20: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
9a30: 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 2);.    }. 
9a40: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
9a50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
9a60: 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  EMA_PRAGMAS */..
9a70: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
9a80: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
9a90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
9aa0: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 66 6f 72  ICmp(zLeft, "for
9ab0: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 29 3d  eign_key_list")=
9ac0: 3d 30 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a  =0 && zRight ){.
9ad0: 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20      FKey *pFK;. 
9ae0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
9af0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
9b00: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
9b10: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
9b20: 6f 75 74 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  out;.    pTab = 
9b30: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
9b40: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
9b50: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
9b60: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
9b70: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
9b80: 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d  se);.      pFK =
9b90: 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20   pTab->pFKey;.  
9ba0: 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20      if( pFK ){. 
9bb0: 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30         int i = 0
9bc0: 3b 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ; .        sqlit
9bd0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
9be0: 28 76 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20  (v, 8);.        
9bf0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38  pParse->nMem = 8
9c00: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9c10: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
9c20: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
9c30: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9c40: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
9c50: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
9c60: 2c 20 22 69 64 22 2c 20 53 51 4c 49 54 45 5f 53  , "id", SQLITE_S
9c70: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
9c80: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
9c90: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
9ca0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c  AME_NAME, "seq",
9cb0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9cc0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9cd0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9ce0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
9cf0: 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49  E, "table", SQLI
9d00: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9d10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9d20: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
9d30: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66  COLNAME_NAME, "f
9d40: 72 6f 6d 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  rom", SQLITE_STA
9d50: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
9d60: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9d70: 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d  ame(v, 4, COLNAM
9d80: 45 5f 4e 41 4d 45 2c 20 22 74 6f 22 2c 20 53 51  E_NAME, "to", SQ
9d90: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9da0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9db0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35  eSetColName(v, 5
9dc0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
9dd0: 22 6f 6e 5f 75 70 64 61 74 65 22 2c 20 53 51 4c  "on_update", SQL
9de0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9df0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9e00: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c  SetColName(v, 6,
9e10: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9e20: 6f 6e 5f 64 65 6c 65 74 65 22 2c 20 53 51 4c 49  on_delete", SQLI
9e30: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9e40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9e50: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 37 2c 20  etColName(v, 7, 
9e60: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d  COLNAME_NAME, "m
9e70: 61 74 63 68 22 2c 20 53 51 4c 49 54 45 5f 53 54  atch", SQLITE_ST
9e80: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 77  ATIC);.        w
9e90: 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20 20 20 20  hile(pFK){.     
9ea0: 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20       int j;.    
9eb0: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a        for(j=0; j
9ec0: 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29  <pFK->nCol; j++)
9ed0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68  {.            ch
9ee0: 61 72 20 2a 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e  ar *zCol = pFK->
9ef0: 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20  aCol[j].zCol;.  
9f00: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
9f10: 7a 4f 6e 44 65 6c 65 74 65 20 3d 20 28 63 68 61  zOnDelete = (cha
9f20: 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70  r *)actionName(p
9f30: 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 3b  FK->aAction[0]);
9f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61  .            cha
9f50: 72 20 2a 7a 4f 6e 55 70 64 61 74 65 20 3d 20 28  r *zOnUpdate = (
9f60: 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d  char *)actionNam
9f70: 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31  e(pFK->aAction[1
9f80: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
9f90: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9fa0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
9fb0: 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   i, 1);.        
9fc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9fd0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
9fe0: 67 65 72 2c 20 6a 2c 20 32 29 3b 0a 20 20 20 20  ger, j, 2);.    
9ff0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a000: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
a010: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
a020: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a  , pFK->zTo, 0);.
a030: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a040: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
a050: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
a060: 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  4, 0,.          
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a080: 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70      pTab->aCol[p
a090: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
a0a0: 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  m].zName, 0);.  
a0b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a0c0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 7a  3VdbeAddOp4(v, z
a0d0: 43 6f 6c 20 3f 20 4f 50 5f 53 74 72 69 6e 67 38  Col ? OP_String8
a0e0: 20 3a 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35   : OP_Null, 0, 5
a0f0: 2c 20 30 2c 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20  , 0, zCol, 0);. 
a100: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
a110: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
a120: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 36  OP_String8, 0, 6
a130: 2c 20 30 2c 20 7a 4f 6e 55 70 64 61 74 65 2c 20  , 0, zOnUpdate, 
a140: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
a150: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a160: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
a170: 20 30 2c 20 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c   0, 7, 0, zOnDel
a180: 65 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ete, 0);.       
a190: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a1a0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
a1b0: 69 6e 67 38 2c 20 30 2c 20 38 2c 20 30 2c 20 22  ing8, 0, 8, 0, "
a1c0: 4e 4f 4e 45 22 2c 20 30 29 3b 0a 20 20 20 20 20  NONE", 0);.     
a1d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a1e0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
a1f0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b  esultRow, 1, 8);
a200: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
a210: 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20         ++i;.    
a220: 20 20 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d        pFK = pFK-
a230: 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20  >pNextFrom;.    
a240: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
a250: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
a260: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
a270: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
a280: 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e  GN_KEY) */..#ifn
a290: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a2a0: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e  FOREIGN_KEY.#ifn
a2b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a2c0: 54 52 49 47 47 45 52 0a 20 20 69 66 28 20 73 71  TRIGGER.  if( sq
a2d0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
a2e0: 66 74 2c 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79  ft, "foreign_key
a2f0: 5f 63 68 65 63 6b 22 29 3d 3d 30 20 29 7b 0a 20  _check")==0 ){. 
a300: 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20     FKey *pFK;   
a310: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66            /* A f
a320: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
a330: 72 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62  raint */.    Tab
a340: 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
a350: 20 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61 62      /* Child tab
a360: 6c 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46 45  le contain "REFE
a370: 52 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64 20  RENCES" keyword 
a380: 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 50  */.    Table *pP
a390: 61 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  arent;        /*
a3a0: 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74 68   Parent table th
a3b0: 61 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73 20  at child points 
a3c0: 74 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20  to */.    Index 
a3d0: 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20 20 20  *pIdx;          
a3e0: 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68 65   /* Index in the
a3f0: 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f   parent table */
a400: 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20  .    int i;     
a410: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
a420: 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f  oop counter:  Fo
a430: 72 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72  reign key number
a440: 20 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20 20   for pTab */.   
a450: 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
a460: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
a470: 63 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64 20  counter:  Field 
a480: 6f 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  of the foreign k
a490: 65 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c  ey */.    HashEl
a4a0: 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20  em *k;          
a4b0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
a4c0: 3a 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69 6e  :  Next table in
a4d0: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69   schema */.    i
a4e0: 6e 74 20 78 3b 20 20 20 20 20 20 20 20 20 20 20  nt x;           
a4f0: 20 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74 20        /* result 
a500: 76 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20  variable */.    
a510: 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
a520: 20 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67 69         /* 3 regi
a530: 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20  sters to hold a 
a540: 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20  result row */.  
a550: 20 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20 20    int regKey;   
a560: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
a570: 73 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79  ster to hold key
a580: 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74 68   for checking th
a590: 65 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20  e FK */.    int 
a5a0: 72 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20 20  regRow;         
a5b0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
a5c0: 74 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66 72  to hold a row fr
a5d0: 6f 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69  om pTab */.    i
a5e0: 6e 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20 20  nt addrTop;     
a5f0: 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20        /* Top of 
a600: 61 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20  a loop checking 
a610: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a  foreign keys */.
a620: 20 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20      int addrOk; 
a630: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75             /* Ju
a640: 6d 70 20 68 65 72 65 20 69 66 20 74 68 65 20 6b  mp here if the k
a650: 65 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20  ey is OK */.    
a660: 69 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20  int *aiCols;    
a670: 20 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64 20         /* child 
a680: 74 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e  to parent column
a690: 20 6d 61 70 70 69 6e 67 20 2a 2f 0a 0a 20 20 20   mapping */..   
a6a0: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
a6b0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
a6c0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
a6d0: 3b 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74 20  ;.    regResult 
a6e0: 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31  = pParse->nMem+1
a6f0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
a700: 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67  em += 4;.    reg
a710: 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Key = ++pParse->
a720: 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77  nMem;.    regRow
a730: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
a740: 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  m;.    v = sqlit
a750: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
a760: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
a770: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
a780: 34 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  4);.    sqlite3V
a790: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
a7a0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
a7b0: 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54  , "table", SQLIT
a7c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
a7d0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
a7e0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
a7f0: 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77 69 64 22  ME_NAME, "rowid"
a800: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
a810: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
a820: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
a830: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
a840: 22 70 61 72 65 6e 74 22 2c 20 53 51 4c 49 54 45  "parent", SQLITE
a850: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
a860: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
a870: 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d  ame(v, 3, COLNAM
a880: 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64 22 2c 20  E_NAME, "fkid", 
a890: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
a8a0: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
a8b0: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
a8c0: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b 20  se, iDb);.    k 
a8d0: 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  = sqliteHashFirs
a8e0: 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t(&db->aDb[iDb].
a8f0: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
a900: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 6b 20  );.    while( k 
a910: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  ){.      if( zRi
a920: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ght ){.        p
a930: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63  Tab = sqlite3Loc
a940: 61 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c  ateTable(pParse,
a950: 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29   0, zRight, zDb)
a960: 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b  ;.        k = 0;
a970: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
a980: 20 20 20 20 20 20 70 54 61 62 20 3d 20 28 54 61        pTab = (Ta
a990: 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68 44  ble*)sqliteHashD
a9a0: 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20 20 20  ata(k);.        
a9b0: 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 4e 65  k = sqliteHashNe
a9c0: 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  xt(k);.      }. 
a9d0: 20 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d 30       if( pTab==0
a9e0: 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79 3d   || pTab->pFKey=
a9f0: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
aa00: 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c       sqlite3Tabl
aa10: 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44  eLock(pParse, iD
aa20: 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30  b, pTab->tnum, 0
aa30: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a  , pTab->zName);.
aa40: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
aa50: 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61 72  nCol+regRow>pPar
aa60: 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72 73  se->nMem ) pPars
aa70: 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d 3e  e->nMem = pTab->
aa80: 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a 20  nCol + regRow;. 
aa90: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
aaa0: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c  Table(pParse, 0,
aab0: 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f   iDb, pTab, OP_O
aac0: 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20  penRead);.      
aad0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
aae0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
aaf0: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 30   0, regResult, 0
ab00: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20  , pTab->zName,. 
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab20: 20 20 20 20 20 20 20 50 34 5f 54 52 41 4e 53 49         P4_TRANSI
ab30: 45 4e 54 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  ENT);.      for(
ab40: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
ab50: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
ab60: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
ab70: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
ab80: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 4c 6f  rent = sqlite3Lo
ab90: 63 61 74 65 54 61 62 6c 65 28 70 50 61 72 73 65  cateTable(pParse
aba0: 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a  , 0, pFK->zTo, z
abb0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  Db);.        if(
abc0: 20 70 50 61 72 65 6e 74 3d 3d 30 20 29 20 62 72   pParent==0 ) br
abd0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 70 49 64  eak;.        pId
abe0: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73  x = 0;.        s
abf0: 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
ac00: 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61  pParse, iDb, pPa
ac10: 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70  rent->tnum, 0, p
ac20: 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a  Parent->zName);.
ac30: 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69          x = sqli
ac40: 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
ac50: 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74  (pParse, pParent
ac60: 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29  , pFK, &pIdx, 0)
ac70: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 3d  ;.        if( x=
ac80: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
ac90: 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20  if( pIdx==0 ){. 
aca0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
acb0: 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72  e3OpenTable(pPar
acc0: 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72  se, i, iDb, pPar
acd0: 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  ent, OP_OpenRead
ace0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
acf0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
ad00: 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 20 3d 20  KeyInfo *pKey = 
ad10: 73 71 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69  sqlite3IndexKeyi
ad20: 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64 78  nfo(pParse, pIdx
ad30: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
ad40: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
ad50: 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c  (v, OP_OpenRead,
ad60: 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20   i, pIdx->tnum, 
ad70: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  iDb);.          
ad80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
ad90: 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 28 63 68  ngeP4(v, -1, (ch
ada0: 61 72 2a 29 70 4b 65 79 2c 20 50 34 5f 4b 45 59  ar*)pKey, P4_KEY
adb0: 49 4e 46 4f 5f 48 41 4e 44 4f 46 46 29 3b 0a 20  INFO_HANDOFF);. 
adc0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
add0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
ade0: 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20      k = 0;.     
adf0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ae00: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
ae10: 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72      if( pFK ) br
ae20: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  eak;.      if( p
ae30: 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20  Parse->nTab<i ) 
ae40: 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69  pParse->nTab = i
ae50: 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20  ;.      addrTop 
ae60: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
ae70: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op1(v, OP_Rewind
ae80: 2c 20 30 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  , 0);.      for(
ae90: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
aea0: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
aeb0: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
aec0: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
aed0: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 4c 6f  rent = sqlite3Lo
aee0: 63 61 74 65 54 61 62 6c 65 28 70 50 61 72 73 65  cateTable(pParse
aef0: 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a  , 0, pFK->zTo, z
af00: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  Db);.        ass
af10: 65 72 74 28 20 70 50 61 72 65 6e 74 21 3d 30 20  ert( pParent!=0 
af20: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  );.        pIdx 
af30: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43  = 0;.        aiC
af40: 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ols = 0;.       
af50: 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f   x = sqlite3FkLo
af60: 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65  cateIndex(pParse
af70: 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20  , pParent, pFK, 
af80: 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b  &pIdx, &aiCols);
af90: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
afa0: 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20   x==0 );.       
afb0: 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65   addrOk = sqlite
afc0: 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76  3VdbeMakeLabel(v
afd0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
afe0: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
aff0: 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70      int iKey = p
b000: 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f  FK->aCol[0].iFro
b010: 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  m;.          ass
b020: 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20  ert( iKey>=0 && 
b030: 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iKey<pTab->nCol 
b040: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
b050: 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b   iKey!=pTab->iPK
b060: 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ey ){.          
b070: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b080: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e  Op3(v, OP_Column
b090: 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f  , 0, iKey, regRo
b0a0: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  w);.            
b0b0: 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
b0c0: 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b  ault(v, pTab, iK
b0d0: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
b0e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b0f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
b100: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c  _IsNull, regRow,
b110: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
b120: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b130: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75  eAddOp2(v, OP_Mu
b140: 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c  stBeInt, regRow,
b150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b160: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
b170: 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 0a 20 20  ntAddr(v)+3);.  
b180: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
b190: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b1a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b1b0: 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67  OP_Rowid, 0, reg
b1c0: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
b1d0: 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  }.          sqli
b1e0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
b1f0: 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69   OP_NotExists, i
b200: 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  , 0, regRow);.  
b210: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b220: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b230: 47 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29  Goto, 0, addrOk)
b240: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
b250: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
b260: 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  v, sqlite3VdbeCu
b270: 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b  rrentAddr(v)-2);
b280: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
b290: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
b2a0: 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20  0; j<pFK->nCol; 
b2b0: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
b2c0: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
b2d0: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
b2e0: 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20  e(v, pTab, 0,.  
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b300: 20 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73            aiCols
b310: 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70   ? aiCols[j] : p
b320: 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f  FK->aCol[0].iFro
b330: 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20  m, regRow+j);.  
b340: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b350: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
b360: 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77  P_IsNull, regRow
b370: 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20  +j, addrOk);.   
b380: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
b390: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b3a0: 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 6b 65 52  dOp3(v, OP_MakeR
b3b0: 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20 70  ecord, regRow, p
b3c0: 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79  FK->nCol, regKey
b3d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
b3e0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
b3f0: 28 76 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20  (v, -1,.        
b400: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b410: 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
b420: 74 72 28 76 2c 70 49 64 78 29 2c 20 50 34 5f 54  tr(v,pIdx), P4_T
b430: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
b440: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b450: 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f  AddOp4Int(v, OP_
b460: 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b  Found, i, addrOk
b470: 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20  , regKey, 0);.  
b480: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
b490: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b4a0: 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30  2(v, OP_Rowid, 0
b4b0: 2c 20 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a  , regResult+1);.
b4c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b4d0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
b4e0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52  String8, 0, regR
b4f0: 65 73 75 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20  esult+2, 0, .   
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b510: 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c         pFK->zTo,
b520: 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a   P4_TRANSIENT);.
b530: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b540: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b550: 49 6e 74 65 67 65 72 2c 20 69 2d 31 2c 20 72 65  Integer, i-1, re
b560: 67 52 65 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20  gResult+3);.    
b570: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b580: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
b590: 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74  ltRow, regResult
b5a0: 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 4);.        sq
b5b0: 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65  lite3VdbeResolve
b5c0: 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29  Label(v, addrOk)
b5d0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
b5e0: 33 44 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f  3DbFree(db, aiCo
b5f0: 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ls);.      }.   
b600: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b610: 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c  dOp2(v, OP_Next,
b620: 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 0a   0, addrTop+1);.
b630: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b640: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
b650: 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rTop);.    }.  }
b660: 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 21  else.#endif /* !
b670: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
b680: 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a  MIT_TRIGGER) */.
b690: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
b6a0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
b6b0: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a  OREIGN_KEY) */..
b6c0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
b6d0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
b6e0: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 70 61 72 73  Cmp(zLeft, "pars
b6f0: 65 72 5f 74 72 61 63 65 22 29 3d 3d 30 20 29 7b  er_trace")==0 ){
b700: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
b710: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
b720: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
b730: 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20  Right, 0) ){.   
b740: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73       sqlite3Pars
b750: 65 72 54 72 61 63 65 28 73 74 64 65 72 72 2c 20  erTrace(stderr, 
b760: 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20  "parser: ");.   
b770: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b780: 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54    sqlite3ParserT
b790: 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20  race(0, 0);.    
b7a0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
b7b0: 65 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52  e.#endif..  /* R
b7c0: 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b  einstall the LIK
b7d0: 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74  E and GLOB funct
b7e0: 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61  ions.  The varia
b7f0: 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20  nt of LIKE.  ** 
b800: 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73  used will be cas
b810: 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e  e sensitive or n
b820: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
b830: 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20  the RHS..  */.  
b840: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
b850: 6d 70 28 7a 4c 65 66 74 2c 20 22 63 61 73 65 5f  mp(zLeft, "case_
b860: 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 22 29  sensitive_like")
b870: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 7a  ==0 ){.    if( z
b880: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
b890: 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
b8a0: 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20  keFunctions(db, 
b8b0: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
b8c0: 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20  n(zRight, 0));. 
b8d0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69     }.  }else..#i
b8e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 54  fndef SQLITE_INT
b8f0: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
b900: 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65 20  OR_MAX.# define 
b910: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
b920: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
b930: 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66   100.#endif..#if
b940: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b950: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
b960: 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71 75  .  /* Pragma "qu
b970: 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 61 6e  ick_check" is an
b980: 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 72 65   experimental re
b990: 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  duced version of
b9a0: 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74 79   .  ** integrity
b9b0: 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64 20  _check designed 
b9c0: 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20 64  to detect most d
b9d0: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
b9e0: 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74 20  on.  ** without 
b9f0: 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65 72  most of the over
ba00: 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20 69  head of a full i
ba10: 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a  ntegrity-check..
ba20: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
ba30: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
ba40: 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63   "integrity_chec
ba50: 6b 22 29 3d 3d 30 0a 20 20 20 7c 7c 20 73 71 6c  k")==0.   || sql
ba60: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
ba70: 74 2c 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  t, "quick_check"
ba80: 29 3d 3d 30 20 0a 20 20 29 7b 0a 20 20 20 20 69  )==0 .  ){.    i
ba90: 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d  nt i, j, addr, m
baa0: 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f  xErr;..    /* Co
bab0: 64 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20  de that appears 
bac0: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
bad0: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
bae0: 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a  k.  If no error.
baf0: 20 20 20 20 2a 2a 20 6d 65 73 73 61 67 65 73 20      ** messages 
bb00: 68 61 76 65 20 62 65 65 6e 20 67 65 6e 65 72 61  have been genera
bb10: 74 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20  ted, output OK. 
bb20: 20 4f 74 68 65 72 77 69 73 65 20 6f 75 74 70 75   Otherwise outpu
bb30: 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 72 72  t the.    ** err
bb40: 6f 72 20 6d 65 73 73 61 67 65 0a 20 20 20 20 2a  or message.    *
bb50: 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  /.    static con
bb60: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e  st VdbeOpList en
bb70: 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  dCode[] = {.    
bb80: 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20    { OP_AddImm,  
bb90: 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20      1, 0,       
bba0: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
bbb0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67        { OP_IfNeg
bbc0: 2c 20 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20  ,       1, 0,   
bbd0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31       0},    /* 1
bbe0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53   */.      { OP_S
bbf0: 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33  tring8,     0, 3
bc00: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
bc10: 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 2 */.      { 
bc20: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
bc30: 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c  3, 1,        0},
bc40: 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74  .    };..    int
bc50: 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69   isQuick = (sqli
bc60: 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74  te3Tolower(zLeft
bc70: 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20  [0])=='q');..   
bc80: 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d   /* If the PRAGM
bc90: 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66  A command was of
bca0: 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d   the form "PRAGM
bcb0: 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79  A <db>.integrity
bcc0: 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20  _check",.    ** 
bcd0: 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20  then iDb is set 
bce0: 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  to the index of 
bcf0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 64 65  the database ide
bd00: 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e  ntified by <db>.
bd10: 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20  .    ** In this 
bd20: 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72  case, the integr
bd30: 69 74 79 20 6f 66 20 64 61 74 61 62 61 73 65 20  ity of database 
bd40: 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69  iDb only is veri
bd50: 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74  fied by.    ** t
bd60: 68 65 20 56 44 42 45 20 63 72 65 61 74 65 64 20  he VDBE created 
bd70: 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20  below..    **.  
bd80: 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20    ** Otherwise, 
bd90: 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77  if the command w
bda0: 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d  as simply "PRAGM
bdb0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
bdc0: 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50  k" (or.    ** "P
bdd0: 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63  RAGMA quick_chec
bde0: 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73  k"), then iDb is
bdf0: 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68   set to 0. In th
be00: 69 73 20 63 61 73 65 2c 20 73 65 74 20 69 44 62  is case, set iDb
be10: 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65  .    ** to -1 he
be20: 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20  re, to indicate 
be30: 74 68 61 74 20 74 68 65 20 56 44 42 45 20 73 68  that the VDBE sh
be40: 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68 65 20  ould verify the 
be50: 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a  integrity.    **
be60: 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
be70: 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a   databases.  */.
be80: 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3e      assert( iDb>
be90: 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
bea0: 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32  ( iDb==0 || pId2
beb0: 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70  ->z );.    if( p
bec0: 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20  Id2->z==0 ) iDb 
bed0: 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  = -1;..    /* In
bee0: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42  itialize the VDB
bef0: 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20  E program */.   
bf00: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
bf10: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
bf20: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
bf30: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
bf40: 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71 6c 69  em = 6;.    sqli
bf50: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
bf60: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  s(v, 1);.    sql
bf70: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bf80: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
bf90: 5f 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72 69 74  _NAME, "integrit
bfa0: 79 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49 54 45  y_check", SQLITE
bfb0: 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 2f  _STATIC);..    /
bfc0: 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75  * Set the maximu
bfd0: 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f  m error count */
bfe0: 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c  .    mxErr = SQL
bff0: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
c000: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20  ECK_ERROR_MAX;. 
c010: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
c020: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65  .      sqlite3Ge
c030: 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26  tInt32(zRight, &
c040: 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66  mxErr);.      if
c050: 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20  ( mxErr<=0 ){.  
c060: 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51        mxErr = SQ
c070: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
c080: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a  HECK_ERROR_MAX;.
c090: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
c0a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c0b0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c0c0: 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f  r, mxErr, 1);  /
c0d0: 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65  * reg[1] holds e
c0e0: 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20  rrors left */.. 
c0f0: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
c100: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65  grity check on e
c110: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
c120: 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30  e */.    for(i=0
c130: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
c140: 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65  ){.      HashEle
c150: 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73 68  m *x;.      Hash
c160: 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20 69   *pTbls;.      i
c170: 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  nt cnt = 0;..   
c180: 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50     if( OMIT_TEMP
c190: 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e  DB && i==1 ) con
c1a0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28  tinue;.      if(
c1b0: 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69 44   iDb>=0 && i!=iD
c1c0: 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20  b ) continue;.. 
c1d0: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
c1e0: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
c1f0: 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 61  rse, i);.      a
c200: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
c210: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
c220: 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74  Pos, 1); /* Halt
c230: 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72   if out of error
c240: 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  s */.      sqlit
c250: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c260: 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
c270: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c280: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
c290: 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f  r);..      /* Do
c2a0: 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68   an integrity ch
c2b0: 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65  eck of the B-Tre
c2c0: 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  e.      **.     
c2d0: 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69 6c   ** Begin by fil
c2e0: 6c 69 6e 67 20 72 65 67 69 73 74 65 72 73 20 32  ling registers 2
c2f0: 2c 20 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68  , 3, ... with th
c300: 65 20 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d  e root pages num
c310: 62 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f  bers.      ** fo
c320: 72 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64  r all tables and
c330: 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20   indices in the 
c340: 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20  database..      
c350: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
c360: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
c370: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30  texHeld(db, i, 0
c380: 29 20 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73  ) );.      pTbls
c390: 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70   = &db->aDb[i].p
c3a0: 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b  Schema->tblHash;
c3b0: 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c  .      for(x=sql
c3c0: 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62  iteHashFirst(pTb
c3d0: 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65  ls); x; x=sqlite
c3e0: 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20  HashNext(x)){.  
c3f0: 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
c400: 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
c410: 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49  ta(x);.        I
c420: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
c430: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c440: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c450: 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c  ger, pTab->tnum,
c460: 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20   2+cnt);.       
c470: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20   cnt++;.        
c480: 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70  for(pIdx=pTab->p
c490: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
c4a0: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a  x=pIdx->pNext){.
c4b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c4c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c4d0: 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d  P_Integer, pIdx-
c4e0: 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20  >tnum, 2+cnt);. 
c4f0: 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a           cnt++;.
c500: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
c510: 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  }..      /* Make
c520: 20 73 75 72 65 20 73 75 66 66 69 63 69 65 6e 74   sure sufficient
c530: 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   number of regis
c540: 74 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 61  ters have been a
c550: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20  llocated */.    
c560: 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 4d    if( pParse->nM
c570: 65 6d 20 3c 20 63 6e 74 2b 34 20 29 7b 0a 20 20  em < cnt+4 ){.  
c580: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
c590: 65 6d 20 3d 20 63 6e 74 2b 34 3b 0a 20 20 20 20  em = cnt+4;.    
c5a0: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f    }..      /* Do
c5b0: 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65   the b-tree inte
c5c0: 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a  grity checks */.
c5d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c5e0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e  eAddOp3(v, OP_In
c5f0: 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e  tegrityCk, 2, cn
c600: 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  t, 1);.      sql
c610: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35  ite3VdbeChangeP5
c620: 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20 20  (v, (u8)i);.    
c630: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
c640: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
c650: 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 0a 20 20 20  _IsNull, 2);.   
c660: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c670: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
c680: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20  g8, 0, 3, 0,.   
c690: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72        sqlite3MPr
c6a0: 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e  intf(db, "*** in
c6b0: 20 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a   database %s ***
c6c0: 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  \n", db->aDb[i].
c6d0: 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20  zName),.        
c6e0: 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20   P4_DYNAMIC);.  
c6f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c700: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 6f 76 65  ddOp2(v, OP_Move
c710: 2c 20 32 2c 20 34 29 3b 0a 20 20 20 20 20 20 73  , 2, 4);.      s
c720: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
c730: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34  (v, OP_Concat, 4
c740: 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  , 3, 2);.      s
c750: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c760: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
c770: 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  , 2, 1);.      s
c780: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
c790: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20  re(v, addr);..  
c7a0: 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
c7b0: 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73   all the indices
c7c0: 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64   are constructed
c7d0: 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20   correctly..    
c7e0: 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78    */.      for(x
c7f0: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
c800: 28 70 54 62 6c 73 29 3b 20 78 20 26 26 20 21 69  (pTbls); x && !i
c810: 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65  sQuick; x=sqlite
c820: 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20  HashNext(x)){.  
c830: 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
c840: 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
c850: 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49  ta(x);.        I
c860: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
c870: 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b      int loopTop;
c880: 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54  ..        if( pT
c890: 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20  ab->pIndex==0 ) 
c8a0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
c8b0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
c8c0: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
c8d0: 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20  _IfPos, 1);  /* 
c8e0: 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20 65  Stop if out of e
c8f0: 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 20  rrors */.       
c900: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c910: 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30  p2(v, OP_Halt, 0
c920: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
c930: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
c940: 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20  e(v, addr);.    
c950: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
c960: 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70  ableAndIndices(p
c970: 50 61 72 73 65 2c 20 70 54 61 62 2c 20 31 2c 20  Parse, pTab, 1, 
c980: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
c990: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c9a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c9b0: 74 65 67 65 72 2c 20 30 2c 20 32 29 3b 20 20 2f  teger, 0, 2);  /
c9c0: 2a 20 72 65 67 28 32 29 20 77 69 6c 6c 20 63 6f  * reg(2) will co
c9d0: 75 6e 74 20 65 6e 74 72 69 65 73 20 2a 2f 0a 20  unt entries */. 
c9e0: 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d         loopTop =
c9f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ca00: 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c  p2(v, OP_Rewind,
ca10: 20 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   1, 0);.        
ca20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ca30: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
ca40: 32 2c 20 31 29 3b 20 20 20 2f 2a 20 69 6e 63 72  2, 1);   /* incr
ca50: 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e  ement entry coun
ca60: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72  t */.        for
ca70: 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  (j=0, pIdx=pTab-
ca80: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
ca90: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
caa0: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
cab0: 20 69 6e 74 20 6a 6d 70 32 3b 0a 20 20 20 20 20   int jmp2;.     
cac0: 20 20 20 20 20 69 6e 74 20 72 31 3b 0a 20 20 20       int r1;.   
cad0: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
cae0: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 69  nst VdbeOpList i
caf0: 64 78 45 72 72 5b 5d 20 3d 20 7b 0a 20 20 20 20  dxErr[] = {.    
cb00: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 41 64 64          { OP_Add
cb10: 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 2d 31 2c  Imm,      1, -1,
cb20: 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    0},.          
cb30: 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20    { OP_String8, 
cb40: 20 20 20 20 30 2c 20 20 33 2c 20 20 30 7d 2c 20      0,  3,  0}, 
cb50: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
cb60: 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 6f 77 69         { OP_Rowi
cb70: 64 2c 20 20 20 20 20 20 20 31 2c 20 20 34 2c 20  d,       1,  4, 
cb80: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   0},.           
cb90: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20   { OP_String8,  
cba0: 20 20 20 30 2c 20 20 35 2c 20 20 30 7d 2c 20 20     0,  5,  0},  
cbb0: 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20    /* 3 */.      
cbc0: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
cbd0: 67 38 2c 20 20 20 20 20 30 2c 20 20 36 2c 20 20  g8,     0,  6,  
cbe0: 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20  0},    /* 4 */. 
cbf0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
cc00: 43 6f 6e 63 61 74 2c 20 20 20 20 20 20 34 2c 20  Concat,      4, 
cc10: 20 33 2c 20 20 33 7d 2c 0a 20 20 20 20 20 20 20   3,  3},.       
cc20: 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74       { OP_Concat
cc30: 2c 20 20 20 20 20 20 35 2c 20 20 33 2c 20 20 33  ,      5,  3,  3
cc40: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  },.            {
cc50: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20   OP_Concat,     
cc60: 20 36 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20 20   6,  3,  3},.   
cc70: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
cc80: 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 20 31  sultRow,   3,  1
cc90: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
cca0: 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20     { OP_IfPos,  
ccb0: 20 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 2c       1,  0,  0},
ccc0: 20 20 20 20 2f 2a 20 39 20 2a 2f 0a 20 20 20 20      /* 9 */.    
ccd0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c          { OP_Hal
cce0: 74 2c 20 20 20 20 20 20 20 20 30 2c 20 20 30 2c  t,        0,  0,
ccf0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    0},.          
cd00: 7d 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20  };.          r1 
cd10: 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  = sqlite3Generat
cd20: 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65  eIndexKey(pParse
cd30: 2c 20 70 49 64 78 2c 20 31 2c 20 33 2c 20 30 29  , pIdx, 1, 3, 0)
cd40: 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32  ;.          jmp2
cd50: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
cd60: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
cd70: 75 6e 64 2c 20 6a 2b 32 2c 20 30 2c 20 72 31 2c  und, j+2, 0, r1,
cd80: 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 2b 31   pIdx->nColumn+1
cd90: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  );.          add
cda0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
cdb0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
cdc0: 79 53 69 7a 65 28 69 64 78 45 72 72 29 2c 20 69  ySize(idxErr), i
cdd0: 64 78 45 72 72 29 3b 0a 20 20 20 20 20 20 20 20  dxErr);.        
cde0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
cdf0: 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP4(v, addr+1,
ce00: 20 22 72 6f 77 69 64 20 22 2c 20 50 34 5f 53 54   "rowid ", P4_ST
ce10: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20  ATIC);.         
ce20: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
ce30: 67 65 50 34 28 76 2c 20 61 64 64 72 2b 33 2c 20  geP4(v, addr+3, 
ce40: 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  " missing from i
ce50: 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49  ndex ", P4_STATI
ce60: 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  C);.          sq
ce70: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
ce80: 34 28 76 2c 20 61 64 64 72 2b 34 2c 20 70 49 64  4(v, addr+4, pId
ce90: 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41  x->zName, P4_TRA
cea0: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20  NSIENT);.       
ceb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
cec0: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 2b 39  mpHere(v, addr+9
ced0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
cee0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
cef0: 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20  (v, jmp2);.     
cf00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
cf10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
cf20: 2c 20 4f 50 5f 4e 65 78 74 2c 20 31 2c 20 6c 6f  , OP_Next, 1, lo
cf30: 6f 70 54 6f 70 2b 31 29 3b 0a 20 20 20 20 20 20  opTop+1);.      
cf40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
cf50: 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70  pHere(v, loopTop
cf60: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
cf70: 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
cf80: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
cf90: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
cfa0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  ++){.          s
cfb0: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
cfc0: 4f 70 4c 69 73 74 20 63 6e 74 49 64 78 5b 5d 20  OpList cntIdx[] 
cfd0: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  = {.            
cfe0: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
cff0: 20 20 20 20 30 2c 20 20 33 2c 20 20 30 7d 2c 0a      0,  3,  0},.
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f               { O
d010: 50 5f 52 65 77 69 6e 64 2c 20 20 20 20 20 20 20  P_Rewind,       
d020: 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 2f 2a 20  0,  0,  0},  /* 
d030: 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  1 */.           
d040: 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20    { OP_AddImm,  
d050: 20 20 20 20 20 33 2c 20 20 31 2c 20 20 30 7d 2c       3,  1,  0},
d060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
d070: 4f 50 5f 4e 65 78 74 2c 20 20 20 20 20 20 20 20  OP_Next,        
d080: 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 2f 2a   0,  0,  0},  /*
d090: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
d0a0: 20 20 20 7b 20 4f 50 5f 45 71 2c 20 20 20 20 20     { OP_Eq,     
d0b0: 20 20 20 20 20 20 32 2c 20 20 30 2c 20 20 33 7d        2,  0,  3}
d0c0: 2c 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20  ,  /* 4 */.     
d0d0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 41 64 64          { OP_Add
d0e0: 49 6d 6d 2c 20 20 20 20 20 20 20 31 2c 20 2d 31  Imm,       1, -1
d0f0: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
d100: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38      { OP_String8
d110: 2c 20 20 20 20 20 20 30 2c 20 20 32 2c 20 20 30  ,      0,  2,  0
d120: 7d 2c 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20  },  /* 6 */.    
d130: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74           { OP_St
d140: 72 69 6e 67 38 2c 20 20 20 20 20 20 30 2c 20 20  ring8,      0,  
d150: 33 2c 20 20 30 7d 2c 20 20 2f 2a 20 37 20 2a 2f  3,  0},  /* 7 */
d160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
d170: 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20 20  OP_Concat,      
d180: 20 33 2c 20 20 32 2c 20 20 32 7d 2c 0a 20 20 20   3,  2,  2},.   
d190: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52            { OP_R
d1a0: 65 73 75 6c 74 52 6f 77 2c 20 20 20 20 32 2c 20  esultRow,    2, 
d1b0: 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20   1,  0},.       
d1c0: 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 20 20     };.          
d1d0: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
d1e0: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
d1f0: 66 50 6f 73 2c 20 31 29 3b 0a 20 20 20 20 20 20  fPos, 1);.      
d200: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d210: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
d220: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
d230: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
d240: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
d250: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20  .          addr 
d260: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
d270: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
d280: 69 7a 65 28 63 6e 74 49 64 78 29 2c 20 63 6e 74  ize(cntIdx), cnt
d290: 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Idx);.          
d2a0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
d2b0: 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 6a  eP1(v, addr+1, j
d2c0: 2b 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  +2);.          s
d2d0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
d2e0: 50 32 28 76 2c 20 61 64 64 72 2b 31 2c 20 61 64  P2(v, addr+1, ad
d2f0: 64 72 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 20  dr+4);.         
d300: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
d310: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 33 2c 20  geP1(v, addr+3, 
d320: 6a 2b 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  j+2);.          
d330: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
d340: 65 50 32 28 76 2c 20 61 64 64 72 2b 33 2c 20 61  eP2(v, addr+3, a
d350: 64 64 72 2b 32 29 3b 0a 20 20 20 20 20 20 20 20  ddr+2);.        
d360: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
d370: 70 48 65 72 65 28 76 2c 20 61 64 64 72 2b 34 29  pHere(v, addr+4)
d380: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d390: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28  te3VdbeChangeP4(
d3a0: 76 2c 20 61 64 64 72 2b 36 2c 20 0a 20 20 20 20  v, addr+6, .    
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3c0: 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   "wrong # of ent
d3d0: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22 2c  ries in index ",
d3e0: 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
d3f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d400: 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61 64  beChangeP4(v, ad
d410: 64 72 2b 37 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  dr+7, pIdx->zNam
d420: 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29  e, P4_TRANSIENT)
d430: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
d440: 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61    } .    }.    a
d450: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
d460: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
d470: 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29  raySize(endCode)
d480: 2c 20 65 6e 64 43 6f 64 65 29 3b 0a 20 20 20 20  , endCode);.    
d490: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
d4a0: 65 50 32 28 76 2c 20 61 64 64 72 2c 20 2d 6d 78  eP2(v, addr, -mx
d4b0: 45 72 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Err);.    sqlite
d4c0: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
d4d0: 20 61 64 64 72 2b 31 29 3b 0a 20 20 20 20 73 71   addr+1);.    sq
d4e0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
d4f0: 34 28 76 2c 20 61 64 64 72 2b 32 2c 20 22 6f 6b  4(v, addr+2, "ok
d500: 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
d510: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
d520: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
d530: 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
d540: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d550: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a  OMIT_UTF16.  /*.
d560: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
d570: 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52  coding.  **   PR
d580: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
d590: 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22  "utf-8"|"utf-16"
d5a0: 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66  |"utf-16le"|"utf
d5b0: 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  -16be".  **.  **
d5c0: 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f   In its first fo
d5d0: 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20  rm, this pragma 
d5e0: 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f  returns the enco
d5f0: 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e  ding of the main
d600: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  .  ** database. 
d610: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
d620: 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  is not initializ
d630: 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61  ed, it is initia
d640: 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a  lized now..  **.
d650: 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
d660: 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61  form of this pra
d670: 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  gma is a no-op i
d680: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
d690: 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61  ase file.  ** ha
d6a0: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65  s not already be
d6b0: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  en initialized. 
d6c0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20  In this case it 
d6d0: 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74  sets the default
d6e0: 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74  .  ** encoding t
d6f0: 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64  hat will be used
d700: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
d710: 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 61  tabase file if a
d720: 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69   new file.  ** i
d730: 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e  s created. If an
d740: 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64   existing main d
d750: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
d760: 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  opened, then the
d770: 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65  .  ** default te
d780: 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  xt encoding for 
d790: 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74  the existing dat
d7a0: 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20  abase is used.. 
d7b0: 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c   ** .  ** In all
d7c0: 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61 62   cases new datab
d7d0: 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73 69  ases created usi
d7e0: 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63 6f  ng the ATTACH co
d7f0: 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63  mmand are.  ** c
d800: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
d810: 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74  e same default t
d820: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20  ext encoding as 
d830: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
d840: 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d  e. If.  ** the m
d850: 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61 73  ain database has
d860: 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61   not been initia
d870: 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65  lized and/or cre
d880: 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43 48  ated when ATTACH
d890: 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65  .  ** is execute
d8a0: 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  d, this is done 
d8b0: 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41 43  before the ATTAC
d8c0: 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a  H operation..  *
d8d0: 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65  *.  ** In the se
d8e0: 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70  cond form this p
d8f0: 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20 74  ragma sets the t
d900: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20  ext encoding to 
d910: 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20  be used in.  ** 
d920: 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  new database fil
d930: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
d940: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 68   this database h
d950: 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c  andle. It is onl
d960: 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66  y.  ** useful if
d970: 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61   invoked immedia
d980: 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d  tely after the m
d990: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20  ain database i. 
d9a0: 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
d9b0: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
d9c0: 22 65 6e 63 6f 64 69 6e 67 22 29 3d 3d 30 20 29  "encoding")==0 )
d9d0: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
d9e0: 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d  st struct EncNam
d9f0: 65 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  e {.      char *
da00: 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 75 38 20  zName;.      u8 
da10: 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61  enc;.    } encna
da20: 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  mes[] = {.      
da30: 7b 20 22 55 54 46 38 22 2c 20 20 20 20 20 53 51  { "UTF8",     SQ
da40: 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20  LITE_UTF8       
da50: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
da60: 2d 38 22 2c 20 20 20 20 53 51 4c 49 54 45 5f 55  -8",    SQLITE_U
da70: 54 46 38 20 20 20 20 20 20 20 20 7d 2c 20 20 2f  TF8        },  /
da80: 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e  * Must be elemen
da90: 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b  t [1] */.      {
daa0: 20 22 55 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c   "UTF-16le", SQL
dab0: 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20  ITE_UTF16LE     
dac0: 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65  },  /* Must be e
dad0: 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20  lement [2] */.  
dae0: 20 20 20 20 7b 20 22 55 54 46 2d 31 36 62 65 22      { "UTF-16be"
daf0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
db00: 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
db10: 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20   be element [3] 
db20: 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31  */.      { "UTF1
db30: 36 6c 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54  6le",  SQLITE_UT
db40: 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20  F16LE     },.   
db50: 20 20 20 7b 20 22 55 54 46 31 36 62 65 22 2c 20     { "UTF16be", 
db60: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20   SQLITE_UTF16BE 
db70: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
db80: 55 54 46 2d 31 36 22 2c 20 20 20 30 20 20 20 20  UTF-16",   0    
db90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
dba0: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   /* SQLITE_UTF16
dbb0: 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20  NATIVE */.      
dbc0: 7b 20 22 55 54 46 31 36 22 2c 20 20 20 20 30 20  { "UTF16",    0 
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54   }, /* SQLITE_UT
dbf0: 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20  F16NATIVE */.   
dc00: 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20     { 0, 0 }.    
dc10: 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20 73 74 72  };.    const str
dc20: 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e  uct EncName *pEn
dc30: 63 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  c;.    if( !zRig
dc40: 68 74 20 29 7b 20 20 20 20 2f 2a 20 22 50 52 41  ht ){    /* "PRA
dc50: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f  GMA encoding" */
dc60: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
dc70: 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61  e3ReadSchema(pPa
dc80: 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67  rse) ) goto prag
dc90: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 73 71  ma_out;.      sq
dca0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
dcb0: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
dcc0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
dcd0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
dce0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 65 6e 63 6f  NAME_NAME, "enco
dcf0: 64 69 6e 67 22 2c 20 53 51 4c 49 54 45 5f 53 54  ding", SQLITE_ST
dd00: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
dd10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
dd20: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
dd30: 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72   1);.      asser
dd40: 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49  t( encnames[SQLI
dd50: 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51  TE_UTF8].enc==SQ
dd60: 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 20  LITE_UTF8 );.   
dd70: 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61     assert( encna
dd80: 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36  mes[SQLITE_UTF16
dd90: 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  LE].enc==SQLITE_
dda0: 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20 20 20  UTF16LE );.     
ddb0: 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
ddc0: 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  s[SQLITE_UTF16BE
ddd0: 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ].enc==SQLITE_UT
dde0: 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20 20 73  F16BE );.      s
ddf0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
de00: 50 34 28 76 2c 20 2d 31 2c 20 65 6e 63 6e 61 6d  P4(v, -1, encnam
de10: 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e 64  es[ENC(pParse->d
de20: 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54  b)].zName, P4_ST
de30: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
de40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
de50: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
de60: 31 2c 20 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65  1, 1);.    }else
de70: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
de80: 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50 52 41           /* "PRA
de90: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58  GMA encoding = X
dea0: 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  XX" */.      /* 
deb0: 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20  Only change the 
dec0: 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 2e  value of sqlite.
ded0: 65 6e 63 20 69 66 20 74 68 65 20 64 61 74 61 62  enc if the datab
dee0: 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f  ase handle is no
def0: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69 74 69  t.      ** initi
df00: 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65 20 6d  alized. If the m
df10: 61 69 6e 20 64 61 74 61 62 61 73 65 20 65 78 69  ain database exi
df20: 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73 71 6c  sts, the new sql
df30: 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20  ite.enc value.  
df40: 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f      ** will be o
df50: 76 65 72 77 72 69 74 74 65 6e 20 77 68 65 6e 20  verwritten when 
df60: 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 65  the schema is ne
df70: 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20 69 74  xt loaded. If it
df80: 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20   does not.      
df90: 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  ** already exist
dfa0: 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 63 72  s, it will be cr
dfb0: 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65  eated to use the
dfc0: 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20 76 61   new encoding va
dfd0: 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  lue..      */.  
dfe0: 20 20 20 20 69 66 28 20 0a 20 20 20 20 20 20 20      if( .       
dff0: 20 21 28 44 62 48 61 73 50 72 6f 70 65 72 74 79   !(DbHasProperty
e000: 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d  (db, 0, DB_Schem
e010: 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20 20  aLoaded)) || .  
e020: 20 20 20 20 20 20 44 62 48 61 73 50 72 6f 70 65        DbHasPrope
e030: 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d  rty(db, 0, DB_Em
e040: 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b 0a 20  pty) .      ){. 
e050: 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d         for(pEnc=
e060: 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45  &encnames[0]; pE
e070: 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b  nc->zName; pEnc+
e080: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
e090: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
e0a0: 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45 6e 63  Cmp(zRight, pEnc
e0b0: 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20  ->zName) ){.    
e0c0: 20 20 20 20 20 20 20 20 45 4e 43 28 70 50 61 72          ENC(pPar
e0d0: 73 65 2d 3e 64 62 29 20 3d 20 70 45 6e 63 2d 3e  se->db) = pEnc->
e0e0: 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20  enc ? pEnc->enc 
e0f0: 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  : SQLITE_UTF16NA
e100: 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20  TIVE;.          
e110: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
e120: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
e130: 20 20 20 20 20 20 20 69 66 28 20 21 70 45 6e 63         if( !pEnc
e140: 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20  ->zName ){.     
e150: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
e160: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e  rMsg(pParse, "un
e170: 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69  supported encodi
e180: 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29  ng: %s", zRight)
e190: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
e1a0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
e1b0: 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  e.#endif /* SQLI
e1c0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
e1d0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
e1e0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
e1f0: 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f  SION_PRAGMAS.  /
e200: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
e210: 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d  [database.]schem
e220: 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20  a_version.  **  
e230: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
e240: 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  e.]schema_versio
e250: 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20  n = <integer>.  
e260: 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
e270: 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72   [database.]user
e280: 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  _version.  **   
e290: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
e2a0: 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  .]user_version =
e2b0: 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
e2c0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
e2d0: 61 74 61 62 61 73 65 2e 5d 66 72 65 65 6c 69 73  atabase.]freelis
e2e0: 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74 65 67  t_count = <integ
e2f0: 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  er>.  **.  **   
e300: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
e310: 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  .]application_id
e320: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e330: 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63  database.]applic
e340: 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65  ation_id = <inte
e350: 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ger>.  **.  ** T
e360: 68 65 20 70 72 61 67 6d 61 27 73 20 73 63 68 65  he pragma's sche
e370: 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 75  ma_version and u
e380: 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65 20  ser_version are 
e390: 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20 67  used to set or g
e3a0: 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  et.  ** the valu
e3b0: 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2d  e of the schema-
e3c0: 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72  version and user
e3d0: 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65 63  -version, respec
e3e0: 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a  tively. Both.  *
e3f0: 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  * the schema-ver
e400: 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73 65  sion and the use
e410: 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33 32  r-version are 32
e420: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
e430: 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64  gers.  ** stored
e440: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
e450: 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20   header..  **.  
e460: 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63 6f  ** The schema-co
e470: 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79 20  okie is usually 
e480: 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 64  only manipulated
e490: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
e4a0: 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69  QLite. It.  ** i
e4b0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
e4c0: 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65 72   SQLite whenever
e4d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
e4e0: 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65 64  hema is modified
e4f0: 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74 69   (by.  ** creati
e500: 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20 61  ng or dropping a
e510: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 29   table or index)
e520: 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72  . The schema ver
e530: 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 0a  sion is used by.
e540: 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63 68    ** SQLite each
e550: 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73   time a query is
e560: 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73   executed to ens
e570: 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ure that the int
e580: 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a  ernal cache.  **
e590: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 75   of the schema u
e5a0: 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69  sed when compili
e5b0: 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79  ng the SQL query
e5c0: 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68   matches the sch
e5d0: 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20  ema of.  ** the 
e5e0: 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73 74  database against
e5f0: 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69   which the compi
e600: 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63 74  led query is act
e610: 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a  ually executed..
e620: 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67 20    ** Subverting 
e630: 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 62  this mechanism b
e640: 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41 20  y using "PRAGMA 
e650: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20  schema_version" 
e660: 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74  to modify.  ** t
e670: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
e680: 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79  n is potentially
e690: 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d   dangerous and m
e6a0: 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67 72  ay lead to progr
e6b0: 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73 20  am.  ** crashes 
e6c0: 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  or database corr
e6d0: 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74 68  uption. Use with
e6e0: 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20   caution!.  **. 
e6f0: 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65 72   ** The user-ver
e700: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64  sion is not used
e710: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
e720: 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62 65  QLite. It may be
e730: 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61 70   used by.  ** ap
e740: 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 61  plications for a
e750: 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f  ny purpose..  */
e760: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
e770: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 73 63  rICmp(zLeft, "sc
e780: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 29 3d 3d  hema_version")==
e790: 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
e7a0: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
e7b0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 29 3d 3d  user_version")==
e7c0: 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
e7d0: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
e7e0: 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 22 29  freelist_count")
e7f0: 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
e800: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
e810: 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64   "application_id
e820: 22 29 3d 3d 30 20 0a 20 20 29 7b 0a 20 20 20 20  ")==0 .  ){.    
e830: 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 20 20 20 2f  int iCookie;   /
e840: 2a 20 43 6f 6f 6b 69 65 20 69 6e 64 65 78 2e 20  * Cookie index. 
e850: 31 20 66 6f 72 20 73 63 68 65 6d 61 2d 63 6f 6f  1 for schema-coo
e860: 6b 69 65 2c 20 36 20 66 6f 72 20 75 73 65 72 2d  kie, 6 for user-
e870: 63 6f 6f 6b 69 65 2e 20 2a 2f 0a 20 20 20 20 73  cookie. */.    s
e880: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
e890: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
e8a0: 20 73 77 69 74 63 68 28 20 7a 4c 65 66 74 5b 30   switch( zLeft[0
e8b0: 5d 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  ] ){.      case 
e8c0: 27 61 27 3a 20 63 61 73 65 20 27 41 27 3a 0a 20  'a': case 'A':. 
e8d0: 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d         iCookie =
e8e0: 20 42 54 52 45 45 5f 41 50 50 4c 49 43 41 54 49   BTREE_APPLICATI
e8f0: 4f 4e 5f 49 44 3b 0a 20 20 20 20 20 20 20 20 62  ON_ID;.        b
e900: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
e910: 20 27 66 27 3a 20 63 61 73 65 20 27 46 27 3a 0a   'f': case 'F':.
e920: 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20          iCookie 
e930: 3d 20 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47  = BTREE_FREE_PAG
e940: 45 5f 43 4f 55 4e 54 3b 0a 20 20 20 20 20 20 20  E_COUNT;.       
e950: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
e960: 73 65 20 27 73 27 3a 20 63 61 73 65 20 27 53 27  se 's': case 'S'
e970: 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69  :.        iCooki
e980: 65 20 3d 20 42 54 52 45 45 5f 53 43 48 45 4d 41  e = BTREE_SCHEMA
e990: 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20  _VERSION;.      
e9a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 64    break;.      d
e9b0: 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20  efault:.        
e9c0: 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f  iCookie = BTREE_
e9d0: 55 53 45 52 5f 56 45 52 53 49 4f 4e 3b 0a 20 20  USER_VERSION;.  
e9e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e9f0: 20 7d 0a 0a 20 20 20 20 69 66 28 20 7a 52 69 67   }..    if( zRig
ea00: 68 74 20 26 26 20 69 43 6f 6f 6b 69 65 21 3d 42  ht && iCookie!=B
ea10: 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43  TREE_FREE_PAGE_C
ea20: 4f 55 4e 54 20 29 7b 0a 20 20 20 20 20 20 2f 2a  OUNT ){.      /*
ea30: 20 57 72 69 74 65 20 74 68 65 20 73 70 65 63 69   Write the speci
ea40: 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75  fied cookie valu
ea50: 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  e */.      stati
ea60: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
ea70: 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d  st setCookie[] =
ea80: 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f   {.        { OP_
ea90: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
eaa0: 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  1,  0},    /
eab0: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 0 */.        {
eac0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
ead0: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
eae0: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
eaf0: 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69     { OP_SetCooki
eb00: 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20  e,      0,  0,  
eb10: 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  1},    /* 2 */. 
eb20: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
eb30: 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33  t addr = sqlite3
eb40: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
eb50: 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f   ArraySize(setCo
eb60: 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65  okie), setCookie
eb70: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
eb80: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
eb90: 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
eba0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
ebb0: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP1(v, addr+1,
ebc0: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
ebd0: 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  ght));.      sql
ebe0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
ebf0: 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 44 62 29  (v, addr+2, iDb)
ec00: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
ec10: 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61  dbeChangeP2(v, a
ec20: 64 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b  ddr+2, iCookie);
ec30: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
ec40: 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70    /* Read the sp
ec50: 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76  ecified cookie v
ec60: 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74  alue */.      st
ec70: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
ec80: 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65  pList readCookie
ec90: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
eca0: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
ecb0: 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
ecc0: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
ecd0: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
ece0: 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c  kie,      0,  1,
ecf0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
ed00: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
ed10: 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31  sultRow,       1
ed20: 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20  ,  1,  0}.      
ed30: 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64  };.      int add
ed40: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
ed50: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
ed60: 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65  ySize(readCookie
ed70: 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65 29 3b 0a  ), readCookie);.
ed80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ed90: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
eda0: 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  r, iDb);.      s
edb0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
edc0: 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 44  P1(v, addr+1, iD
edd0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
ede0: 33 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c  3VdbeChangeP3(v,
edf0: 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f 6b 69 65   addr+1, iCookie
ee00: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ee10: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
ee20: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
ee30: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ee40: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
ee50: 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c  NAME, zLeft, SQL
ee60: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
ee70: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65      }.  }else.#e
ee80: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
ee90: 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
eea0: 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ON_PRAGMAS */..#
eeb0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
eec0: 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
eed0: 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a  _DIAGS.  /*.  **
eee0: 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c     PRAGMA compil
eef0: 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20  e_options.  **. 
ef00: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
ef10: 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70  ames of all comp
ef20: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
ef30: 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 62 75   used in this bu
ef40: 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70  ild,.  ** one op
ef50: 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20  tion per row..  
ef60: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
ef70: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
ef80: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22  compile_options"
ef90: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )==0 ){.    int 
efa0: 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  i = 0;.    const
efb0: 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20   char *zOpt;.   
efc0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
efd0: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
efe0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
eff0: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   1;.    sqlite3V
f000: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
f010: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
f020: 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f  , "compile_optio
f030: 6e 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  n", SQLITE_STATI
f040: 43 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28  C);.    while( (
f050: 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 5f 63  zOpt = sqlite3_c
f060: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
f070: 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20  (i++))!=0 ){.   
f080: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f090: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
f0a0: 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 4f 70  g8, 0, 1, 0, zOp
f0b0: 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  t, 0);.      sql
f0c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
f0d0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
f0e0: 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  1, 1);.    }.  }
f0f0: 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53  else.#endif /* S
f100: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
f110: 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a  LEOPTION_DIAGS *
f120: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
f130: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a  E_OMIT_WAL.  /*.
f140: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
f150: 61 74 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68 65  atabase.]wal_che
f160: 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76  ckpoint = passiv
f170: 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74 0a 20  e|full|restart. 
f180: 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f   **.  ** Checkpo
f190: 69 6e 74 20 74 68 65 20 64 61 74 61 62 61 73 65  int the database
f1a0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  ..  */.  if( sql
f1b0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
f1c0: 74 2c 20 22 77 61 6c 5f 63 68 65 63 6b 70 6f 69  t, "wal_checkpoi
f1d0: 6e 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  nt")==0 ){.    i
f1e0: 6e 74 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e  nt iBt = (pId2->
f1f0: 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58  z?iDb:SQLITE_MAX
f200: 5f 41 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20  _ATTACHED);.    
f210: 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49  int eMode = SQLI
f220: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
f230: 53 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a  SSIVE;.    if( z
f240: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
f250: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
f260: 70 28 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22  p(zRight, "full"
f270: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
f280: 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
f290: 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a  HECKPOINT_FULL;.
f2a0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
f2b0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f2c0: 52 69 67 68 74 2c 20 22 72 65 73 74 61 72 74 22  Right, "restart"
f2d0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
f2e0: 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
f2f0: 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
f300: 54 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  T;.      }.    }
f310: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
f320: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
f330: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
f340: 5f 6f 75 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  _out;.    sqlite
f350: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
f360: 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 3);.    pPars
f370: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
f380: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
f390: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
f3a0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 62 75 73 79  NAME_NAME, "busy
f3b0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
f3c0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
f3d0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
f3e0: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
f3f0: 20 22 6c 6f 67 22 2c 20 53 51 4c 49 54 45 5f 53   "log", SQLITE_S
f400: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
f410: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
f420: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
f430: 4e 41 4d 45 2c 20 22 63 68 65 63 6b 70 6f 69 6e  NAME, "checkpoin
f440: 74 65 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ted", SQLITE_STA
f450: 54 49 43 29 3b 0a 0a 20 20 20 20 73 71 6c 69 74  TIC);..    sqlit
f460: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
f470: 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69  OP_Checkpoint, i
f480: 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20  Bt, eMode, 1);. 
f490: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f4a0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
f4b0: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d  tRow, 1, 3);.  }
f4c0: 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  else..  /*.  ** 
f4d0: 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74    PRAGMA wal_aut
f4e0: 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a  ocheckpoint.  **
f4f0: 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75     PRAGMA wal_au
f500: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e  tocheckpoint = N
f510: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69  .  **.  ** Confi
f520: 67 75 72 65 20 61 20 64 61 74 61 62 61 73 65 20  gure a database 
f530: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75  connection to au
f540: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63  tomatically chec
f550: 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73  kpoint a databas
f560: 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63  e.  ** after acc
f570: 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d  umulating N fram
f580: 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f  es in the log. O
f590: 72 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 20  r query for the 
f5a0: 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20  current value.  
f5b0: 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20  ** of N..  */.  
f5c0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
f5d0: 6d 70 28 7a 4c 65 66 74 2c 20 22 77 61 6c 5f 61  mp(zLeft, "wal_a
f5e0: 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 29 3d  utocheckpoint")=
f5f0: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 52  =0 ){.    if( zR
f600: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
f610: 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68  lite3_wal_autoch
f620: 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c  eckpoint(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 77 61 6c 5f 61 75 74 6f 63 68  rse, "wal_autoch
f670: 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20 20  eckpoint", .    
f680: 20 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62     db->xWalCallb
f690: 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c 44  ack==sqlite3WalD
f6a0: 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20  efaultHook ? .  
f6b0: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
f6c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e 70  PTR_TO_INT(db->p
f6d0: 57 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20 20  WalArg) : 0);.  
f6e0: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20  }else.#endif..  
f6f0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
f700: 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20  shrink_memory.  
f710: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 61  **.  ** This pra
f720: 67 6d 61 20 61 74 74 65 6d 70 74 73 20 74 6f 20  gma attempts to 
f730: 66 72 65 65 20 61 73 20 6d 75 63 68 20 6d 65 6d  free as much mem
f740: 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20  ory as possible 
f750: 66 72 6f 6d 20 74 68 65 0a 20 20 2a 2a 20 63 75  from the.  ** cu
f760: 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63  rrent database c
f770: 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a  onnection..  */.
f780: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
f790: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 73 68 72  ICmp(zLeft, "shr
f7a0: 69 6e 6b 5f 6d 65 6d 6f 72 79 22 29 3d 3d 30 20  ink_memory")==0 
f7b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64  ){.    sqlite3_d
f7c0: 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  b_release_memory
f7d0: 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  (db);.  }else.. 
f7e0: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
f7f0: 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20  A busy_timeout. 
f800: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73   **   PRAGMA bus
f810: 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20  y_timeout = N.  
f820: 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c  **.  ** Call sql
f830: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
f840: 74 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72  t(db, N).  Retur
f850: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69  n the current ti
f860: 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a  meout value.  **
f870: 20 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20   if one is set. 
f880: 20 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64   If no busy hand
f890: 6c 65 72 20 6f 72 20 61 20 64 69 66 66 65 72 65  ler or a differe
f8a0: 6e 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20  nt busy handler 
f8b0: 69 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e  is set.  ** then
f8c0: 20 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20   0 is returned. 
f8d0: 20 53 65 74 74 69 6e 67 20 74 68 65 20 62 75 73   Setting the bus
f8e0: 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f  y_timeout to 0 o
f8f0: 72 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20  r negative.  ** 
f900: 64 69 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d  disables the tim
f910: 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  eout..  */.  if(
f920: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
f930: 7a 4c 65 66 74 2c 20 22 62 75 73 79 5f 74 69 6d  zLeft, "busy_tim
f940: 65 6f 75 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  eout")==0 ){.   
f950: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
f960: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73       sqlite3_bus
f970: 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 73 71  y_timeout(db, sq
f980: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
f990: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ));.    }.    re
f9a0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
f9b0: 61 72 73 65 2c 20 22 74 69 6d 65 6f 75 74 22 2c  arse, "timeout",
f9c0: 20 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75    db->busyTimeou
f9d0: 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66  t);.  }else..#if
f9e0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
f9f0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
fa00: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
fa10: 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20   /*.  ** Report 
fa20: 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
fa30: 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66  e of file logs f
fa40: 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  or all databases
fa50: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
fa60: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
fa70: 2c 20 22 6c 6f 63 6b 5f 73 74 61 74 75 73 22 29  , "lock_status")
fa80: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69  ==0 ){.    stati
fa90: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  c const char *co
faa0: 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d  nst azLockName[]
fab0: 20 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f   = {.      "unlo
fac0: 63 6b 65 64 22 2c 20 22 73 68 61 72 65 64 22 2c  cked", "shared",
fad0: 20 22 72 65 73 65 72 76 65 64 22 2c 20 22 70 65   "reserved", "pe
fae0: 6e 64 69 6e 67 22 2c 20 22 65 78 63 6c 75 73 69  nding", "exclusi
faf0: 76 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69  ve".    };.    i
fb00: 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65  nt i;.    sqlite
fb10: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
fb20: 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 2);.    pPars
fb30: 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20  e->nMem = 2;.   
fb40: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
fb50: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
fb60: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 61 74 61  NAME_NAME, "data
fb70: 62 61 73 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  base", SQLITE_ST
fb80: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
fb90: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
fba0: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
fbb0: 41 4d 45 2c 20 22 73 74 61 74 75 73 22 2c 20 53  AME, "status", S
fbc0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
fbd0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
fbe0: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
fbf0: 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20     Btree *pBt;. 
fc00: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
fc10: 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e 6f  *zState = "unkno
fc20: 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a  wn";.      int j
fc30: 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  ;.      if( db->
fc40: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20  aDb[i].zName==0 
fc50: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
fc60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fc70: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
fc80: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 64 62 2d 3e  8, 0, 1, 0, db->
fc90: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50 34  aDb[i].zName, P4
fca0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
fcb0: 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d  pBt = db->aDb[i]
fcc0: 2e 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20  .pBt;.      if( 
fcd0: 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  pBt==0 || sqlite
fce0: 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
fcf0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  ==0 ){.        z
fd00: 53 74 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22  State = "closed"
fd10: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
fd20: 28 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  ( sqlite3_file_c
fd30: 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64  ontrol(db, i ? d
fd40: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 20  b->aDb[i].zName 
fd50: 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20  : 0, .          
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd70: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
fd80: 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54  E_FCNTL_LOCKSTAT
fd90: 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f  E, &j)==SQLITE_O
fda0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 7a 53  K ){.         zS
fdb0: 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d  tate = azLockNam
fdc0: 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20  e[j];.      }.  
fdd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
fde0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
fdf0: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 7a 53  ng8, 0, 2, 0, zS
fe00: 74 61 74 65 2c 20 50 34 5f 53 54 41 54 49 43 29  tate, P4_STATIC)
fe10: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
fe20: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
fe30: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29  ResultRow, 1, 2)
fe40: 3b 0a 20 20 20 20 7d 0a 0a 20 20 7d 65 6c 73 65  ;.    }..  }else
fe50: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
fe60: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
fe70: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
fe80: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 6b 65  rICmp(zLeft, "ke
fe90: 79 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68 74  y")==0 && zRight
fea0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
feb0: 6b 65 79 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  key(db, zRight, 
fec0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
fed0: 7a 52 69 67 68 74 29 29 3b 0a 20 20 7d 65 6c 73  zRight));.  }els
fee0: 65 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  e.  if( sqlite3S
fef0: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 72  trICmp(zLeft, "r
ff00: 65 6b 65 79 22 29 3d 3d 30 20 26 26 20 7a 52 69  ekey")==0 && zRi
ff10: 67 68 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ght ){.    sqlit
ff20: 65 33 5f 72 65 6b 65 79 28 64 62 2c 20 7a 52 69  e3_rekey(db, zRi
ff30: 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  ght, sqlite3Strl
ff40: 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20  en30(zRight));. 
ff50: 20 7d 65 6c 73 65 0a 20 20 69 66 28 20 7a 52 69   }else.  if( zRi
ff60: 67 68 74 20 26 26 20 28 73 71 6c 69 74 65 33 53  ght && (sqlite3S
ff70: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 68  trICmp(zLeft, "h
ff80: 65 78 6b 65 79 22 29 3d 3d 30 20 7c 7c 0a 20 20  exkey")==0 ||.  
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ffa0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
ffb0: 65 66 74 2c 20 22 68 65 78 72 65 6b 65 79 22 29  eft, "hexrekey")
ffc0: 3d 3d 30 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ==0) ){.    int 
ffd0: 69 2c 20 68 31 2c 20 68 32 3b 0a 20 20 20 20 63  i, h1, h2;.    c
ffe0: 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20  har zKey[40];.  
fff0: 20 20 66 6f 72 28 69 3d 30 3b 20 28 68 31 20 3d    for(i=0; (h1 =
10000 20 7a 52 69 67 68 74 5b 69 5d 29 21 3d 30 20 26   zRight[i])!=0 &
10010 26 20 28 68 32 20 3d 20 7a 52 69 67 68 74 5b 69  & (h2 = zRight[i
10020 2b 31 5d 29 21 3d 30 3b 20 69 2b 3d 32 29 7b 0a  +1])!=0; i+=2){.
10030 20 20 20 20 20 20 68 31 20 2b 3d 20 39 2a 28 31        h1 += 9*(1
10040 26 28 68 31 3e 3e 36 29 29 3b 0a 20 20 20 20 20  &(h1>>6));.     
10050 20 68 32 20 2b 3d 20 39 2a 28 31 26 28 68 32 3e   h2 += 9*(1&(h2>
10060 3e 36 29 29 3b 0a 20 20 20 20 20 20 7a 4b 65 79  >6));.      zKey
10070 5b 69 2f 32 5d 20 3d 20 28 68 32 20 26 20 30 78  [i/2] = (h2 & 0x
10080 30 66 29 20 7c 20 28 28 68 31 20 26 20 30 78 66  0f) | ((h1 & 0xf
10090 29 3c 3c 34 29 3b 0a 20 20 20 20 7d 0a 20 20 20  )<<4);.    }.   
100a0 20 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26   if( (zLeft[3] &
100b0 20 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20   0xf)==0xb ){.  
100c0 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 28      sqlite3_key(
100d0 64 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a  db, zKey, i/2);.
100e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
100f0 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 64   sqlite3_rekey(d
10100 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20  b, zKey, i/2);. 
10110 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
10120 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
10130 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
10140 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
10150 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
10160 29 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ).  if( sqlite3S
10170 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 61  trICmp(zLeft, "a
10180 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69 6f  ctivate_extensio
10190 6e 73 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68  ns")==0 && zRigh
101a0 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  t ){.#ifdef SQLI
101b0 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20  TE_HAS_CODEC.   
101c0 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
101d0 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65  ICmp(zRight, "se
101e0 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20  e-", 4)==0 ){.  
101f0 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69      sqlite3_acti
10200 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74  vate_see(&zRight
10210 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [4]);.    }.#end
10220 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
10230 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20  _ENABLE_CEROD.  
10240 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
10250 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63  NICmp(zRight, "c
10260 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b  erod-", 6)==0 ){
10270 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61  .      sqlite3_a
10280 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a  ctivate_cerod(&z
10290 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d  Right[6]);.    }
102a0 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 0a  .#endif.  }else.
102b0 23 65 6e 64 69 66 0a 0a 20 0a 20 20 7b 2f 2a 20  #endif.. .  {/* 
102c0 45 6d 70 74 79 20 45 4c 53 45 20 63 6c 61 75 73  Empty ELSE claus
102d0 65 20 2a 2f 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  e */}..  /*.  **
102e0 20 52 65 73 65 74 20 74 68 65 20 73 61 66 65 74   Reset the safet
102f0 79 20 6c 65 76 65 6c 2c 20 69 6e 20 63 61 73 65  y level, in case
10300 20 74 68 65 20 66 75 6c 6c 66 73 79 6e 63 20 66   the fullfsync f
10310 6c 61 67 20 6f 72 20 73 79 6e 63 68 72 6f 6e 6f  lag or synchrono
10320 75 73 0a 20 20 2a 2a 20 73 65 74 74 69 6e 67 20  us.  ** setting 
10330 63 68 61 6e 67 65 64 2e 0a 20 20 2a 2f 0a 23 69  changed..  */.#i
10340 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10350 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
10360 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
10370 6d 6d 69 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  mmit ){.    sqli
10380 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74  te3BtreeSetSafet
10390 79 4c 65 76 65 6c 28 70 44 62 2d 3e 70 42 74 2c  yLevel(pDb->pBt,
103a0 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
103b0 65 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  el,.            
103c0 20 20 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51     (db->flags&SQ
103d0 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 29 21  LITE_FullFSync)!
103e0 3d 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0,.            
103f0 20 20 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51     (db->flags&SQ
10400 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
10410 6e 63 29 21 3d 30 29 3b 0a 20 20 7d 0a 23 65 6e  nc)!=0);.  }.#en
10420 64 69 66 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a  dif.pragma_out:.
10430 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
10440 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71  db, zLeft);.  sq
10450 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
10460 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64  zRight);.}..#end
10470 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
10480 54 5f 50 52 41 47 4d 41 20 2a 2f 0a              T_PRAGMA */.