/ Hex Artifact Content
Login

Artifact d0231f412dea33c35c1309b45b535cf0c10c63c8:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 2f 2a  sqliteInt.h"../*
01d0: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
01e0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
01f0: 73 20 61 20 73 61 66 65 74 79 20 6c 65 76 65 6c  s a safety level
0200: 2e 20 20 52 65 74 75 72 6e 20 30 20 66 6f 72 20  .  Return 0 for 
0210: 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e  OFF,.** 1 for ON
0220: 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e 64 20 32   or NORMAL and 2
0230: 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52 65 74 75   for FULL.  Retu
0240: 72 6e 20 31 20 66 6f 72 20 61 6e 20 65 6d 70 74  rn 1 for an empt
0250: 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65 63 6f 67  y or .** unrecog
0260: 6e 69 7a 65 64 20 73 74 72 69 6e 67 20 61 72 67  nized string arg
0270: 75 6d 65 6e 74 2e 20 20 54 68 65 20 46 55 4c 4c  ument.  The FULL
0280: 20 6f 70 74 69 6f 6e 20 69 73 20 64 69 73 61 6c   option is disal
0290: 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74 68 65 20  lowed.** if the 
02a0: 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61 6d 65 74  omitFull paramet
02b0: 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e  er it 1..**.** N
02c0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 76 61 6c  ote that the val
02d0: 75 65 73 20 72 65 74 75 72 6e 65 64 20 61 72 65  ues returned are
02e0: 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74 20 74   one less that t
02f0: 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 2a  he values that.*
0300: 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61 73 73  * should be pass
0310: 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65 33 42  ed into sqlite3B
0320: 74 72 65 65 53 65 74 53 61 66 65 74 79 4c 65 76  treeSetSafetyLev
0330: 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20 64 6f  el().  The is do
0340: 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74  ne.** to support
0350: 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f 64 65   legacy SQL code
0360: 2e 20 20 54 68 65 20 73 61 66 65 74 79 20 6c 65  .  The safety le
0370: 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65 20 62  vel used to be b
0380: 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c  oolean.** and ol
0390: 64 65 72 20 73 63 72 69 70 74 73 20 6d 61 79 20  der scripts may 
03a0: 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62 65 72  have used number
03b0: 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e 64 20  s 0 for OFF and 
03c0: 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61  1 for ON..*/.sta
03d0: 74 69 63 20 75 38 20 67 65 74 53 61 66 65 74 79  tic u8 getSafety
03e0: 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63 68 61 72  Level(const char
03f0: 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c   *z, int omitFul
0400: 6c 2c 20 69 6e 74 20 64 66 6c 74 29 7b 0a 20 20  l, int dflt){.  
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 32             /* 12
0430: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37 38  3456789 12345678
0440: 39 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  9 */.  static co
0450: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
0460: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
0470: 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20 73 74 61  truefull";.  sta
0480: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 4f 66  tic const u8 iOf
0490: 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20 31 2c 20  fset[] = {0, 1, 
04a0: 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20 31 36 7d  2, 4, 9, 12, 16}
04b0: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
04c0: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
04d0: 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20 33 2c 20  {2, 2, 3, 5, 3, 
04e0: 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20  4, 4};.  static 
04f0: 63 6f 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b  const u8 iValue[
0500: 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 30  ] =  {1, 0, 0, 0
0510: 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20 20 69 6e  , 1, 1, 2};.  in
0520: 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20 73 71  t i, n;.  if( sq
0530: 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a 29  lite3Isdigit(*z)
0540: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28   ){.    return (
0550: 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  u8)sqlite3Atoi(z
0560: 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 71 6c  );.  }.  n = sql
0570: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29 3b  ite3Strlen30(z);
0580: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72  .  for(i=0; i<Ar
0590: 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74 68 29  raySize(iLength)
05a0: 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b 2b 29 7b  -omitFull; i++){
05b0: 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67 74 68  .    if( iLength
05c0: 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69 74 65  [i]==n && sqlite
05d0: 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65 78 74  3StrNICmp(&zText
05e0: 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a 2c 6e  [iOffset[i]],z,n
05f0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65  )==0 ){.      re
0600: 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b 0a  turn iValue[i];.
0610: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
0620: 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn dflt;.}../*.*
0630: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
0640: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20  given string as 
0650: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
0660: 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47 65  .*/.u8 sqlite3Ge
0670: 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
0680: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64 66 6c 74  har *z, int dflt
0690: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
06a0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
06b0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
06c0: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
06d0: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
06e0: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
06f0: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
0700: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
0710: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
0720: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
0730: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
0740: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
0750: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
0760: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
0770: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
0780: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
0790: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
07a0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
07b0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
07c0: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
07d0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
07e0: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
07f0: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
0800: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
0810: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
0820: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0830: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
0840: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
0850: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0860: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
0870: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0880: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
0890: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
08a0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
08b0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
08c0: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
08d0: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
08e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
08f0: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
0900: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0910: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
0920: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
0930: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
0940: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
0950: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
0960: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
0970: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
0980: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
0990: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
09a0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
09b0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
09c0: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
09d0: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
09e0: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
09f0: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
0a00: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
0a10: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
0a20: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0a30: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
0a40: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0a50: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
0a60: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
0a70: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
0a80: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
0a90: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0aa0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
0ab0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
0ac0: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
0ad0: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
0ae0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
0af0: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
0b00: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
0b10: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
0b20: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
0b30: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
0b40: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0b50: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
0b60: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
0b70: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
0b80: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
0b90: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
0ba0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
0bb0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
0bc0: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
0bd0: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
0be0: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
0bf0: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
0c00: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
0c10: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
0c20: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
0c30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
0c40: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
0c50: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
0c60: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
0c70: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
0c80: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
0c90: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
0ca0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
0cb0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
0cc0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
0cd0: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
0ce0: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
0cf0: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
0d00: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
0d10: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
0d20: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
0d30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
0d40: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
0d50: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
0d60: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
0d70: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
0d80: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
0d90: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
0da0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
0db0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
0dc0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
0dd0: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
0de0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
0df0: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
0e00: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
0e10: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
0e20: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
0e30: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
0e40: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
0e50: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
0e60: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
0e70: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
0e80: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
0e90: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
0ea0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
0eb0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
0ec0: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
0ed0: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
0ee0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
0ef0: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
0f00: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0f10: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
0f20: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
0f30: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
0f40: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
0f50: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
0f60: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
0f70: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
0f80: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
0f90: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
0fa0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
0fb0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
0fc0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
0fd0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
0fe0: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
0ff0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1000: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
1010: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
1020: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1030: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
1040: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
1050: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
1060: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
1070: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
1080: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
1090: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
10a0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
10b0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
10c0: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
10d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
10e0: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
10f0: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
1100: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
1110: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1120: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
1130: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
1140: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
1150: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
1160: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
1170: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
1180: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
1190: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
11a0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
11b0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
11c0: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
11d0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
11e0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
11f0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
1200: 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65  ../*.** Generate
1210: 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20   code to return 
1220: 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  a single integer
1230: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
1240: 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e  c void returnSin
1250: 67 6c 65 49 6e 74 28 50 61 72 73 65 20 2a 70 50  gleInt(Parse *pP
1260: 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
1270: 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34 20 76 61   *zLabel, i64 va
1280: 6c 75 65 29 7b 0a 20 20 56 64 62 65 20 2a 76 20  lue){.  Vdbe *v 
1290: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
12a0: 28 70 50 61 72 73 65 29 3b 0a 20 20 69 6e 74 20  (pParse);.  int 
12b0: 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  mem = ++pParse->
12c0: 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a 70 49 36  nMem;.  i64 *pI6
12d0: 34 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  4 = sqlite3DbMal
12e0: 6c 6f 63 52 61 77 28 70 50 61 72 73 65 2d 3e 64  locRaw(pParse->d
12f0: 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65 29  b, sizeof(value)
1300: 29 3b 0a 20 20 69 66 28 20 70 49 36 34 20 29 7b  );.  if( pI64 ){
1310: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 49 36 34  .    memcpy(pI64
1320: 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a 65 6f 66  , &value, sizeof
1330: 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d 0a 20 20  (value));.  }.  
1340: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
1350: 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  4(v, OP_Int64, 0
1360: 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68 61 72 2a  , mem, 0, (char*
1370: 29 70 49 36 34 2c 20 50 34 5f 49 4e 54 36 34 29  )pI64, P4_INT64)
1380: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  ;.  sqlite3VdbeS
1390: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
13a0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
13b0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
13c0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 61  OLNAME_NAME, zLa
13d0: 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  bel, SQLITE_STAT
13e0: 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  IC);.  sqlite3Vd
13f0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
1400: 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31  esultRow, mem, 1
1410: 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  );.}..#ifndef SQ
1420: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
1430: 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 43 68 65  RAGMAS./*.** Che
1440: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 7a 52 69  ck to see if zRi
1450: 67 68 74 20 61 6e 64 20 7a 4c 65 66 74 20 72 65  ght and zLeft re
1460: 66 65 72 20 74 6f 20 61 20 70 72 61 67 6d 61 20  fer to a pragma 
1470: 74 68 61 74 20 71 75 65 72 69 65 73 0a 2a 2a 20  that queries.** 
1480: 6f 72 20 63 68 61 6e 67 65 73 20 6f 6e 65 20 6f  or changes one o
1490: 66 20 74 68 65 20 66 6c 61 67 73 20 69 6e 20 64  f the flags in d
14a0: 62 2d 3e 66 6c 61 67 73 2e 20 20 52 65 74 75 72  b->flags.  Retur
14b0: 6e 20 31 20 69 66 20 73 6f 20 61 6e 64 20 30 20  n 1 if so and 0 
14c0: 69 66 20 6e 6f 74 2e 0a 2a 2a 20 41 6c 73 6f 2c  if not..** Also,
14d0: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 70   implement the p
14e0: 72 61 67 6d 61 2e 0a 2a 2f 0a 73 74 61 74 69 63  ragma..*/.static
14f0: 20 69 6e 74 20 66 6c 61 67 50 72 61 67 6d 61 28   int flagPragma(
1500: 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
1510: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74  onst char *zLeft
1520: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52  , const char *zR
1530: 69 67 68 74 29 7b 0a 20 20 73 74 61 74 69 63 20  ight){.  static 
1540: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50 72  const struct sPr
1550: 61 67 6d 61 54 79 70 65 20 7b 0a 20 20 20 20 63  agmaType {.    c
1560: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
1570: 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  ;  /* Name of th
1580: 65 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20 20 20  e pragma */.    
1590: 69 6e 74 20 6d 61 73 6b 3b 20 20 20 20 20 20 20  int mask;       
15a0: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 66 6f 72 20      /* Mask for 
15b0: 74 68 65 20 64 62 2d 3e 66 6c 61 67 73 20 76 61  the db->flags va
15c0: 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 50 72 61 67  lue */.  } aPrag
15d0: 6d 61 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22  ma[] = {.    { "
15e0: 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  full_column_name
15f0: 73 22 2c 20 20 20 20 20 20 20 20 53 51 4c 49 54  s",        SQLIT
1600: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
1610: 7d 2c 0a 20 20 20 20 7b 20 22 73 68 6f 72 74 5f  },.    { "short_
1620: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 20 20  column_names",  
1630: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 68 6f 72       SQLITE_Shor
1640: 74 43 6f 6c 4e 61 6d 65 73 20 7d 2c 0a 20 20 20  tColNames },.   
1650: 20 7b 20 22 63 6f 75 6e 74 5f 63 68 61 6e 67 65   { "count_change
1660: 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 53  s",            S
1670: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
1680: 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 65 6d      },.    { "em
1690: 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62  pty_result_callb
16a0: 61 63 6b 73 22 2c 20 20 20 53 51 4c 49 54 45 5f  acks",   SQLITE_
16b0: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 7d 2c  NullCallback  },
16c0: 0a 20 20 20 20 7b 20 22 6c 65 67 61 63 79 5f 66  .    { "legacy_f
16d0: 69 6c 65 5f 66 6f 72 6d 61 74 22 2c 20 20 20 20  ile_format",    
16e0: 20 20 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79     SQLITE_Legacy
16f0: 46 69 6c 65 46 6d 74 20 7d 2c 0a 20 20 20 20 7b  FileFmt },.    {
1700: 20 22 66 75 6c 6c 66 73 79 6e 63 22 2c 20 20 20   "fullfsync",   
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1720: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
1730: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 63 68 65 63    },.    { "chec
1740: 6b 70 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63  kpoint_fullfsync
1750: 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6b  ",     SQLITE_Ck
1760: 70 74 46 75 6c 6c 46 53 79 6e 63 20 7d 2c 0a 20  ptFullFSync },. 
1770: 20 20 20 7b 20 22 72 65 76 65 72 73 65 5f 75 6e     { "reverse_un
1780: 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 22  ordered_selects"
1790: 2c 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  , SQLITE_Reverse
17a0: 4f 72 64 65 72 20 20 7d 2c 0a 23 69 66 6e 64 65  Order  },.#ifnde
17b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
17c0: 54 4f 4d 41 54 49 43 5f 49 4e 44 45 58 0a 20 20  TOMATIC_INDEX.  
17d0: 20 20 7b 20 22 61 75 74 6f 6d 61 74 69 63 5f 69    { "automatic_i
17e0: 6e 64 65 78 22 2c 20 20 20 20 20 20 20 20 20 20  ndex",          
17f0: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
1800: 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 23       },.#endif.#
1810: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1820: 55 47 0a 20 20 20 20 7b 20 22 73 71 6c 5f 74 72  UG.    { "sql_tr
1830: 61 63 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ace",           
1840: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 71 6c 54       SQLITE_SqlT
1850: 72 61 63 65 20 20 20 20 20 20 7d 2c 0a 20 20 20  race      },.   
1860: 20 7b 20 22 76 64 62 65 5f 6c 69 73 74 69 6e 67   { "vdbe_listing
1870: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 53  ",             S
1880: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
1890: 67 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 76 64  g   },.    { "vd
18a0: 62 65 5f 74 72 61 63 65 22 2c 20 20 20 20 20 20  be_trace",      
18b0: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
18c0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 7d 2c  VdbeTrace     },
18d0: 0a 20 20 20 20 7b 20 22 76 64 62 65 5f 61 64 64  .    { "vdbe_add
18e0: 6f 70 74 72 61 63 65 22 2c 20 20 20 20 20 20 20  optrace",       
18f0: 20 20 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64     SQLITE_VdbeAd
1900: 64 6f 70 54 72 61 63 65 7d 2c 0a 20 20 20 20 7b  dopTrace},.    {
1910: 20 22 76 64 62 65 5f 64 65 62 75 67 22 2c 20 20   "vdbe_debug",  
1920: 20 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63    SQLITE_SqlTrac
1930: 65 20 7c 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  e | SQLITE_VdbeL
1940: 69 73 74 69 6e 67 0a 20 20 20 20 20 20 20 20 20  isting.         
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 20 20 20 20 7c 20 53 51 4c 49 54 45 5f 56        | SQLITE_V
1970: 64 62 65 54 72 61 63 65 20 20 20 20 20 20 7d 2c  dbeTrace      },
1980: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1990: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43  SQLITE_OMIT_CHEC
19a0: 4b 0a 20 20 20 20 7b 20 22 69 67 6e 6f 72 65 5f  K.    { "ignore_
19b0: 63 68 65 63 6b 5f 63 6f 6e 73 74 72 61 69 6e 74  check_constraint
19c0: 73 22 2c 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72  s", SQLITE_Ignor
19d0: 65 43 68 65 63 6b 73 20 20 7d 2c 0a 23 65 6e 64  eChecks  },.#end
19e0: 69 66 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  if.    /* The fo
19f0: 6c 6c 6f 77 69 6e 67 20 69 73 20 56 45 52 59 20  llowing is VERY 
1a00: 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 2a 2f 0a  experimental */.
1a10: 20 20 20 20 7b 20 22 77 72 69 74 61 62 6c 65 5f      { "writable_
1a20: 73 63 68 65 6d 61 22 2c 20 20 20 20 20 20 20 20  schema",        
1a30: 20 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63    SQLITE_WriteSc
1a40: 68 65 6d 61 7c 53 51 4c 49 54 45 5f 52 65 63 6f  hema|SQLITE_Reco
1a50: 76 65 72 79 4d 6f 64 65 20 7d 2c 0a 0a 20 20 20  veryMode },..   
1a60: 20 2f 2a 20 54 4f 44 4f 3a 20 4d 61 79 62 65 20   /* TODO: Maybe 
1a70: 69 74 20 73 68 6f 75 6c 64 6e 27 74 20 62 65 20  it shouldn't be 
1a80: 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 68 61 6e  possible to chan
1a90: 67 65 20 74 68 65 20 52 65 61 64 55 6e 63 6f 6d  ge the ReadUncom
1aa0: 6d 69 74 74 65 64 0a 20 20 20 20 2a 2a 20 66 6c  mitted.    ** fl
1ab0: 61 67 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ag if there are 
1ac0: 61 6e 79 20 61 63 74 69 76 65 20 73 74 61 74 65  any active state
1ad0: 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20 7b 20  ments. */.    { 
1ae0: 22 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  "read_uncommitte
1af0: 64 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49  d",         SQLI
1b00: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
1b10: 65 64 20 7d 2c 0a 20 20 20 20 7b 20 22 72 65 63  ed },.    { "rec
1b20: 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
1b30: 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 52  ,       SQLITE_R
1b40: 65 63 54 72 69 67 67 65 72 73 20 7d 2c 0a 0a 20  ecTriggers },.. 
1b50: 20 20 20 2f 2a 20 54 68 69 73 20 66 6c 61 67 20     /* This flag 
1b60: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  may only be set 
1b70: 69 66 20 62 6f 74 68 20 66 6f 72 65 69 67 6e 2d  if both foreign-
1b80: 6b 65 79 20 61 6e 64 20 74 72 69 67 67 65 72 20  key and trigger 
1b90: 73 75 70 70 6f 72 74 0a 20 20 20 20 2a 2a 20 61  support.    ** a
1ba0: 72 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  re present in th
1bb0: 65 20 62 75 69 6c 64 2e 20 20 2a 2f 0a 23 69 66  e build.  */.#if
1bc0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1bd0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1be0: 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
1bf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
1c00: 45 52 29 0a 20 20 20 20 7b 20 22 66 6f 72 65 69  ER).    { "forei
1c10: 67 6e 5f 6b 65 79 73 22 2c 20 20 20 20 20 20 20  gn_keys",       
1c20: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 6f 72        SQLITE_For
1c30: 65 69 67 6e 4b 65 79 73 20 7d 2c 0a 23 65 6e 64  eignKeys },.#end
1c40: 69 66 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b  if.  };.  int i;
1c50: 0a 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  .  const struct 
1c60: 73 50 72 61 67 6d 61 54 79 70 65 20 2a 70 3b 0a  sPragmaType *p;.
1c70: 20 20 66 6f 72 28 69 3d 30 2c 20 70 3d 61 50 72    for(i=0, p=aPr
1c80: 61 67 6d 61 3b 20 69 3c 41 72 72 61 79 53 69 7a  agma; i<ArraySiz
1c90: 65 28 61 50 72 61 67 6d 61 29 3b 20 69 2b 2b 2c  e(aPragma); i++,
1ca0: 20 70 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 73   p++){.    if( s
1cb0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
1cc0: 65 66 74 2c 20 70 2d 3e 7a 4e 61 6d 65 29 3d 3d  eft, p->zName)==
1cd0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
1ce0: 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d  e3 *db = pParse-
1cf0: 3e 64 62 3b 0a 20 20 20 20 20 20 56 64 62 65 20  >db;.      Vdbe 
1d00: 2a 76 3b 0a 20 20 20 20 20 20 76 20 3d 20 73 71  *v;.      v = sq
1d10: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
1d20: 72 73 65 29 3b 0a 20 20 20 20 20 20 61 73 73 65  rse);.      asse
1d30: 72 74 28 20 76 21 3d 30 20 29 3b 20 20 2f 2a 20  rt( v!=0 );  /* 
1d40: 41 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  Already allocate
1d50: 64 20 62 79 20 73 71 6c 69 74 65 33 50 72 61 67  d by sqlite3Prag
1d60: 6d 61 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66  ma() */.      if
1d70: 28 20 41 4c 57 41 59 53 28 76 29 20 29 7b 0a 20  ( ALWAYS(v) ){. 
1d80: 20 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68         if( zRigh
1d90: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
1da0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
1db0: 74 28 70 50 61 72 73 65 2c 20 70 2d 3e 7a 4e 61  t(pParse, p->zNa
1dc0: 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  me, (db->flags &
1dd0: 20 70 2d 3e 6d 61 73 6b 29 21 3d 30 20 29 3b 0a   p->mask)!=0 );.
1de0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1df0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6d 61 73           int mas
1e00: 6b 20 3d 20 70 2d 3e 6d 61 73 6b 3b 20 20 20 20  k = p->mask;    
1e10: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1e20: 20 62 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20   bits to set or 
1e30: 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20  clear. */.      
1e40: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f      if( db->auto
1e50: 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20  Commit==0 ){.   
1e60: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65           /* Fore
1e70: 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20  ign key support 
1e80: 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c  may not be enabl
1e90: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77  ed or disabled w
1ea0: 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20  hile not.       
1eb0: 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d       ** in auto-
1ec0: 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f  commit mode.  */
1ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 73  .            mas
1ee0: 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f  k &= ~(SQLITE_Fo
1ef0: 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20  reignKeys);.    
1f00: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
1f10: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
1f20: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
1f30: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20   0) ){.         
1f40: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
1f50: 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  mask;.          
1f60: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1f70: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
1f80: 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 20  ~mask;.         
1f90: 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   }..          /*
1fa0: 20 4d 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61   Many of the fla
1fb0: 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79  g-pragmas modify
1fc0: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1fd0: 74 65 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a  ted by the SQL .
1fe0: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 6f 6d            ** com
1ff0: 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74  piler (eg. count
2000: 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64  _changes). So ad
2010: 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65  d an opcode to e
2020: 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20  xpire all.      
2030: 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20      ** compiled 
2040: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61  SQL statements a
2050: 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61  fter modifying a
2060: 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20   pragma value.. 
2070: 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20           */.    
2080: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2090: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78  eAddOp2(v, OP_Ex
20a0: 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20  pire, 0, 0);.   
20b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
20c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
20d0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
20e0: 72 6e 20 30 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  rn 0;.}.#endif /
20f0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  * SQLITE_OMIT_FL
2100: 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 2f  AG_PRAGMAS */../
2110: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75  *.** Return a hu
2120: 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d  man-readable nam
2130: 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69  e for a constrai
2140: 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63  nt resolution ac
2150: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
2160: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2170: 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20  EIGN_KEY.static 
2180: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69  const char *acti
2190: 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e  onName(u8 action
21a0: 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ){.  const char 
21b0: 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68  *zName;.  switch
21c0: 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  ( action ){.    
21d0: 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a  case OE_SetNull:
21e0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e    zName = "SET N
21f0: 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65  ULL";        bre
2200: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f  ak;.    case OE_
2210: 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20  SetDflt:  zName 
2220: 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b  = "SET DEFAULT";
2230: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2240: 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a  case OE_Cascade:
2250: 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41    zName = "CASCA
2260: 44 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65  DE";         bre
2270: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f  ak;.    case OE_
2280: 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20  Restrict: zName 
2290: 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20  = "RESTRICT";   
22a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
22b0: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20  default:        
22c0: 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43    zName = "NO AC
22d0: 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20  TION";  .       
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
22f0: 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f  ssert( action==O
2300: 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b  E_None ); break;
2310: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e  .  }.  return zN
2320: 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  ame;.}.#endif...
2330: 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  /*.** Parameter 
2340: 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e  eMode must be on
2350: 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a  e of the PAGER_J
2360: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63  OURNALMODE_XXX c
2370: 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69  onstants.** defi
2380: 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20  ned in pager.h. 
2390: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65  This function re
23a0: 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69  turns the associ
23b0: 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a  ated lowercase.*
23c0: 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e  * journal-mode n
23d0: 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  ame..*/.const ch
23e0: 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ar *sqlite3Journ
23f0: 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65  alModename(int e
2400: 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20  Mode){.  static 
2410: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d  char * const azM
2420: 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20  odeName[] = {.  
2430: 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72    "delete", "per
2440: 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74  sist", "off", "t
2450: 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72  runcate", "memor
2460: 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  y".#ifndef SQLIT
2470: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20  E_OMIT_WAL.     
2480: 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20  , "wal".#endif. 
2490: 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   };.  assert( PA
24a0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
24b0: 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61  DELETE==0 );.  a
24c0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
24d0: 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
24e0: 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
24f0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
2500: 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61  DE_OFF==2 );.  a
2510: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
2520: 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
2530: 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74  E==3 );.  assert
2540: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
2550: 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b  ODE_MEMORY==4 );
2560: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
2570: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2580: 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==5 );.  assert(
2590: 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f   eMode>=0 && eMo
25a0: 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a  de<=ArraySize(az
25b0: 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20  ModeName) );..  
25c0: 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79  if( eMode==Array
25d0: 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29  Size(azModeName)
25e0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72   ) return 0;.  r
25f0: 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65  eturn azModeName
2600: 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a  [eMode];.}../*.*
2610: 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67  * Process a prag
2620: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  ma statement.  .
2630: 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72  **.** Pragmas ar
2640: 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a  e of this form:.
2650: 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d  **.**      PRAGM
2660: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20  A [database.]id 
2670: 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20  [= value].**.** 
2680: 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d  The identifier m
2690: 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73  ight also be a s
26a0: 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75  tring.  The valu
26b0: 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61  e is a string, a
26c0: 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72  nd.** identifier
26d0: 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20  , or a number.  
26e0: 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20  If minusFlag is 
26f0: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76  true, then the v
2700: 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d  alue is.** a num
2710: 62 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65  ber that was pre
2720: 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73  ceded by a minus
2730: 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   sign..**.** If 
2740: 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73  the left side is
2750: 20 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74   "database.id" t
2760: 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20  hen pId1 is the 
2770: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a  database name.**
2780: 20 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65   and pId2 is the
2790: 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66   id.  If the lef
27a0: 74 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22  t side is just "
27b0: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
27c0: 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70   the.** id and p
27d0: 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79  Id2 is any empty
27e0: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64   string..*/.void
27f0: 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a   sqlite3Pragma(.
2800: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c    Parse *pParse,
2810: 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c   .  Token *pId1,
2820: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
2830: 20 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61   part of [databa
2840: 73 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a  se.]id field */.
2850: 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20    Token *pId2,  
2860: 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20        /* Second 
2870: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
2880: 65 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20  e.]id field, or 
2890: 4e 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  NULL */.  Token 
28a0: 2a 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a  *pValue,      /*
28b0: 20 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75   Token for <valu
28c0: 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  e>, or NULL */. 
28d0: 20 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20   int minusFlag  
28e0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
28f0: 61 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65  a '-' sign prece
2900: 64 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29  ded <value> */.)
2910: 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20  {.  char *zLeft 
2920: 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  = 0;       /* Nu
2930: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l-terminated UTF
2940: 2d 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a  -8 string <id> *
2950: 2f 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74  /.  char *zRight
2960: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
2970: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l-terminated UTF
2980: 2d 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65  -8 string <value
2990: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
29a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20  const char *zDb 
29b0: 3d 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61  = 0;   /* The da
29c0: 74 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20  tabase name */. 
29d0: 20 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20   Token *pId;    
29e0: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
29f0: 65 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e  er to <id> token
2a00: 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a20: 44 61 74 61 62 61 73 65 20 69 6e 64 65 78 20 66  Database index f
2a30: 6f 72 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f  or <database> */
2a40: 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b  .  char *aFcntl[
2a50: 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67  4];       /* Arg
2a60: 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f  ument to SQLITE_
2a70: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a  FCNTL_PRAGMA */.
2a80: 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2aa0: 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66  * return value f
2ab0: 6f 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  orm SQLITE_FCNTL
2ac0: 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c  _PRAGMA */.  sql
2ad0: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
2ae0: 65 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65  e->db;    /* The
2af0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
2b00: 74 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44  tion */.  Db *pD
2b10: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
2b20: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70         /* The sp
2b30: 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
2b40: 62 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a  being pragmaed *
2b50: 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 70 50  /.  Vdbe *v = pP
2b60: 61 72 73 65 2d 3e 70 56 64 62 65 20 3d 20 73 71  arse->pVdbe = sq
2b70: 6c 69 74 65 33 56 64 62 65 43 72 65 61 74 65 28  lite3VdbeCreate(
2b80: 64 62 29 3b 20 20 2f 2a 20 50 72 65 70 61 72 65  db);  /* Prepare
2b90: 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 0a  d statement */..
2ba0: 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74    if( v==0 ) ret
2bb0: 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  urn;.  sqlite3Vd
2bc0: 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29  beRunOnlyOnce(v)
2bd0: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  ;.  pParse->nMem
2be0: 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65   = 2;..  /* Inte
2bf0: 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62  rpret the [datab
2c00: 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68  ase.] part of th
2c10: 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  e pragma stateme
2c20: 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20  nt. iDb is the. 
2c30: 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ** index of the
2c40: 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70   database this p
2c50: 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61  ragma is being a
2c60: 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e  pplied to in db.
2c70: 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20  aDb[]. */.  iDb 
2c80: 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  = sqlite3TwoPart
2c90: 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64  Name(pParse, pId
2ca0: 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a  1, pId2, &pId);.
2cb0: 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65    if( iDb<0 ) re
2cc0: 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64  turn;.  pDb = &d
2cd0: 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20  b->aDb[iDb];..  
2ce0: 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64  /* If the temp d
2cf0: 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e  atabase has been
2d00: 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65   explicitly name
2d10: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
2d20: 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d   .  ** pragma, m
2d30: 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f  ake sure it is o
2d40: 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28  pen. .  */.  if(
2d50: 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74   iDb==1 && sqlit
2d60: 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
2d70: 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  se(pParse) ){.  
2d80: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
2d90: 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33   zLeft = sqlite3
2da0: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
2db0: 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a  , pId);.  if( !z
2dc0: 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20  Left ) return;. 
2dd0: 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29   if( minusFlag )
2de0: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
2df0: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2e00: 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29  , "-%T", pValue)
2e10: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  ;.  }else{.    z
2e20: 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e  Right = sqlite3N
2e30: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
2e40: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20   pValue);.  }.. 
2e50: 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b   assert( pId2 );
2e60: 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e  .  zDb = pId2->n
2e70: 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20  >0 ? pDb->zName 
2e80: 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  : 0;.  if( sqlit
2e90: 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72  e3AuthCheck(pPar
2ea0: 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d  se, SQLITE_PRAGM
2eb0: 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  A, zLeft, zRight
2ec0: 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f  , zDb) ){.    go
2ed0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2ee0: 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e   }..  /* Send an
2ef0: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2f00: 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f  AGMA file-contro
2f10: 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  l to the underly
2f20: 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e  ing VFS.  ** con
2f30: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20  nection.  If it 
2f40: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
2f50: 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74  K, then assume t
2f60: 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a  hat the VFS.  **
2f70: 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61   handled the pra
2f80: 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65  gma and generate
2f90: 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65   a no-op prepare
2fa0: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a  d statement..  *
2fb0: 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d 20  /.  aFcntl[0] = 
2fc0: 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20 3d  0;.  aFcntl[1] =
2fd0: 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74 6c   zLeft;.  aFcntl
2fe0: 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20  [2] = zRight;.  
2ff0: 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a 20  aFcntl[3] = 0;. 
3000: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
3010: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 63  .nBusy = 0;.  rc
3020: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f   = sqlite3_file_
3030: 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c  control(db, zDb,
3040: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
3050: 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46 63  AGMA, (void*)aFc
3060: 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ntl);.  if( rc==
3070: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3080: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
3090: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65 6d 20  {.      int mem 
30a0: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
30b0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
30c0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
30d0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65 6d 2c  String8, 0, mem,
30e0: 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20 30   0, aFcntl[0], 0
30f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3100: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
3110: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
3120: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
3130: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
3140: 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22 2c 20  NAME, "result", 
3150: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
3160: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3170: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
3180: 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31 29  sultRow, mem, 1)
3190: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
31a0: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
31b0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
31c0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc!=SQLITE_NO
31d0: 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 69 66  TFOUND ){.    if
31e0: 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20  ( aFcntl[0] ){. 
31f0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
3200: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 25 73  rMsg(pParse, "%s
3210: 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20  ", aFcntl[0]);. 
3220: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
3230: 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20  e(aFcntl[0]);.  
3240: 20 20 7d 0a 20 20 20 20 70 50 61 72 73 65 2d 3e    }.    pParse->
3250: 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72  nErr++;.    pPar
3260: 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 7d  se->rc = rc;.  }
3270: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 20  else.           
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3290: 20 0a 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64   . .#if !defined
32a0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
32b0: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21  ER_PRAGMAS) && !
32c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
32d0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a  MIT_DEPRECATED).
32e0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
32f0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65 66  A [database.]def
3300: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a  ault_cache_size.
3310: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
3320: 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f  tabase.]default_
3330: 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a  cache_size=N.  *
3340: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
3350: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
3360: 65 20 63 75 72 72 65 6e 74 20 70 65 72 73 69 73  e current persis
3370: 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72  tent setting for
3380: 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63   the.  ** page c
3390: 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20  ache size.  The 
33a0: 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69  value returned i
33b0: 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
33c0: 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67  mber of.  ** pag
33d0: 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63  es in the page c
33e0: 61 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e  ache.  The secon
33f0: 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68  d form sets both
3400: 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a   the current.  *
3410: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
3420: 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  e value and the 
3430: 70 65 72 73 69 73 74 65 6e 74 20 70 61 67 65 20  persistent page 
3440: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
3450: 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  .  ** stored in 
3460: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3470: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64  e..  **.  ** Old
3480: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
3490: 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74 20  QLite would set 
34a0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
34b0: 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a  e size to a.  **
34c0: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
34d0: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79 6e   to indicate syn
34e0: 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54  chronous=OFF.  T
34f0: 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63 68  hese days, synch
3500: 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61  ronous.  ** is a
3510: 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66 61  lways on by defa
3520: 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ult regardless o
3530: 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68  f the sign of th
3540: 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a  e default cache.
3550: 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74 20    ** size.  But 
3560: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b 65  continue to take
3570: 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   the absolute va
3580: 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 61 75  lue of the defau
3590: 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69  lt cache.  ** si
35a0: 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61 6c  ze of historical
35b0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a   compatibility..
35c0: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
35d0: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
35e0: 22 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  "default_cache_s
35f0: 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ize")==0 ){.    
3600: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
3610: 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68 65  eOpList getCache
3620: 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Size[] = {.     
3630: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
3640: 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20  n, 0, 0,        
3650: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
3660: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
3670: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52   */.      { OP_R
3680: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31  eadCookie,  0, 1
3690: 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 44  ,        BTREE_D
36a0: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
36b0: 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  E},  /* 1 */.   
36c0: 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20     { OP_IfPos,  
36d0: 20 20 20 20 20 31 2c 20 37 2c 20 20 20 20 20 20       1, 7,      
36e0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
36f0: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c  _Integer,     0,
3700: 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   2,        0},. 
3710: 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61       { OP_Subtra
3720: 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20  ct,    1, 2,    
3730: 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20      1},.      { 
3740: 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20  OP_IfPos,       
3750: 31 2c 20 37 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 7,        0},
3760: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65  .      { OP_Inte
3770: 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20  ger,     0, 1,  
3780: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20        0},       
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a0: 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20    /* 6 */.      
37b0: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
37c0: 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20 30    1, 1,        0
37d0: 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  },.    };.    in
37e0: 74 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20  t addr;.    if( 
37f0: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
3800: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
3810: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
3820: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
3830: 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20  Btree(v, iDb);. 
3840: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
3850: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
3860: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
3870: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
3880: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
3890: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
38a0: 41 4d 45 2c 20 22 63 61 63 68 65 5f 73 69 7a 65  AME, "cache_size
38b0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
38c0: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
38d0: 3e 6e 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20 20 20  >nMem += 2;.    
38e0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
38f0: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
3900: 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61   ArraySize(getCa
3910: 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63  cheSize), getCac
3920: 68 65 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 73  heSize);.      s
3930: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
3940: 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
3950: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3960: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
3970: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
3980: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
3990: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 36  angeP1(v, addr+6
39a0: 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  , SQLITE_DEFAULT
39b0: 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a 20 20  _CACHE_SIZE);.  
39c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
39d0: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
39e0: 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65  3AbsInt32(sqlite
39f0: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
3a00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67        sqlite3Beg
3a10: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
3a20: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29  (pParse, 0, iDb)
3a30: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3a40: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
3a50: 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 31  Integer, size, 1
3a60: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3a70: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
3a80: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c  _SetCookie, iDb,
3a90: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
3aa0: 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b 0a 20  ACHE_SIZE, 1);. 
3ab0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
3ac0: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
3ad0: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
3ae0: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53  );.      pDb->pS
3af0: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
3b00: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
3b10: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
3b20: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
3b30: 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t, pDb->pSchema-
3b40: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
3b50: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
3b60: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
3b70: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3b80: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
3b90: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
3ba0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3bb0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
3bc0: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
3bd0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
3be0: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
3bf0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
3c00: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
3c10: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
3c20: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
3c30: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
3c40: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
3c50: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
3c60: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
3c70: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3c80: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
3c90: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
3ca0: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
3cb0: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
3cc0: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
3cd0: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
3ce0: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
3cf0: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ted..  */.  if( 
3d00: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
3d10: 4c 65 66 74 2c 22 70 61 67 65 5f 73 69 7a 65 22  Left,"page_size"
3d20: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 42 74 72 65  )==0 ){.    Btre
3d30: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
3d40: 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  t;.    assert( p
3d50: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
3d60: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
3d70: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57    int size = ALW
3d80: 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74  AYS(pBt) ? sqlit
3d90: 65 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69  e3BtreeGetPageSi
3da0: 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20  ze(pBt) : 0;.   
3db0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
3dc0: 6e 74 28 70 50 61 72 73 65 2c 20 22 70 61 67 65  nt(pParse, "page
3dd0: 5f 73 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20  _size", size);. 
3de0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3df0: 2f 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61  /* Malloc may fa
3e00: 69 6c 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20  il when setting 
3e10: 74 68 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61  the page-size, a
3e20: 73 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  s there is an in
3e30: 74 65 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20  ternal.      ** 
3e40: 62 75 66 66 65 72 20 74 68 61 74 20 74 68 65 20  buffer that the 
3e50: 70 61 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73  pager module res
3e60: 69 7a 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74  izes using sqlit
3e70: 65 33 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20  e3_realloc()..  
3e80: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d      */.      db-
3e90: 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20  >nextPagesize = 
3ea0: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
3eb0: 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53  ht);.      if( S
3ec0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c  QLITE_NOMEM==sql
3ed0: 69 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65  ite3BtreeSetPage
3ee0: 53 69 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65  Size(pBt, db->ne
3ef0: 78 74 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29  xtPagesize,-1,0)
3f00: 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
3f10: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
3f20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
3f30: 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20    }else..  /*.  
3f40: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
3f50: 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c  base.]secure_del
3f60: 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ete.  **  PRAGMA
3f70: 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75   [database.]secu
3f80: 72 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46  re_delete=ON/OFF
3f90: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
3fa0: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
3fb0: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  s the current se
3fc0: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
3fd0: 2a 2a 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65  ** secure_delete
3fe0: 20 66 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f   flag.  The seco
3ff0: 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20  nd form changes 
4000: 74 68 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74  the secure_delet
4010: 65 0a 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74  e.  ** flag sett
4020: 69 6e 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20  ing and reports 
4030: 74 68 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20  thenew value..  
4040: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
4050: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 73  StrICmp(zLeft,"s
4060: 65 63 75 72 65 5f 64 65 6c 65 74 65 22 29 3d 3d  ecure_delete")==
4070: 30 20 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  0 ){.    Btree *
4080: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
4090: 20 20 20 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a      int b = -1;.
40a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
40b0: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  =0 );.    if( zR
40c0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 62 20  ight ){.      b 
40d0: 3d 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  = sqlite3GetBool
40e0: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 3b 0a  ean(zRight, 0);.
40f0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49      }.    if( pI
4100: 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d 30  d2->n==0 && b>=0
4110: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
4120: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30  ;.      for(ii=0
4130: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
4140: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
4150: 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65 44  ite3BtreeSecureD
4160: 65 6c 65 74 65 28 64 62 2d 3e 61 44 62 5b 69 69  elete(db->aDb[ii
4170: 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 20  ].pBt, b);.     
4180: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 20 3d   }.    }.    b =
4190: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63   sqlite3BtreeSec
41a0: 75 72 65 44 65 6c 65 74 65 28 70 42 74 2c 20 62  ureDelete(pBt, b
41b0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e  );.    returnSin
41c0: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
41d0: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22 2c 20  secure_delete", 
41e0: 62 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f  b);.  }else..  /
41f0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
4200: 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61  database.]max_pa
4210: 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50  ge_count.  **  P
4220: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
4230: 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d  ]max_page_count=
4240: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
4250: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
4260: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
4270: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
4280: 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62   ** maximum numb
4290: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
42a0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
42b0: 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65 63  .  The .  ** sec
42c0: 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70 74  ond form attempt
42d0: 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69 73  s to change this
42e0: 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68 0a   setting.  Both.
42f0: 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75 72    ** forms retur
4300: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  n the current se
4310: 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tting..  **.  **
4320: 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   The absolute va
4330: 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65 64  lue of N is used
4340: 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63  .  This is undoc
4350: 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67 68  umented and migh
4360: 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20 20  t.  ** change.  
4370: 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  The only purpose
4380: 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
4390: 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74 65  n easy way to te
43a0: 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69  st.  ** the sqli
43b0: 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66 75  te3AbsInt32() fu
43c0: 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  nction..  **.  *
43d0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
43e0: 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75 6e 74 0a  ase.]page_count.
43f0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
4400: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
4410: 61 67 65 73 20 69 6e 20 74 68 65 20 73 70 65 63  ages in the spec
4420: 69 66 69 65 64 20 64 61 74 61 62 61 73 65 2e 0a  ified database..
4430: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
4440: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
4450: 22 70 61 67 65 5f 63 6f 75 6e 74 22 29 3d 3d 30  "page_count")==0
4460: 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 53 74  .   || sqlite3St
4470: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 6d 61 78  rICmp(zLeft,"max
4480: 5f 70 61 67 65 5f 63 6f 75 6e 74 22 29 3d 3d 30  _page_count")==0
4490: 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 52  .  ){.    int iR
44a0: 65 67 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  eg;.    if( sqli
44b0: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
44c0: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
44d0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 73 71 6c  gma_out;.    sql
44e0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
44f0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
4500: 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b  );.    iReg = ++
4510: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20  pParse->nMem;.  
4520: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c    if( sqlite3Tol
4530: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
4540: 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  'p' ){.      sql
4550: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
4560: 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20  , OP_Pagecount, 
4570: 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20  iDb, iReg);.    
4580: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
4590: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
45a0: 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69  , OP_MaxPgcnt, i
45b0: 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20  Db, iReg, .     
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45d0: 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74     sqlite3AbsInt
45e0: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
45f0: 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a  Right)));.    }.
4600: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
4610: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
4620: 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b  ltRow, iReg, 1);
4630: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4640: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
4650: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4660: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
4670: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
4680: 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
4690: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73  ANSIENT);.  }els
46a0: 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  e..  /*.  **  PR
46b0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
46c0: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a  locking_mode.  *
46d0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
46e0: 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ase.]locking_mod
46f0: 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c  e = (normal|excl
4700: 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 69 66  usive).  */.  if
4710: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
4720: 28 7a 4c 65 66 74 2c 22 6c 6f 63 6b 69 6e 67 5f  (zLeft,"locking_
4730: 6d 6f 64 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  mode")==0 ){.   
4740: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65   const char *zRe
4750: 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20  t = "normal";.  
4760: 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65    int eMode = ge
4770: 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69  tLockingMode(zRi
4780: 67 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70  ght);..    if( p
4790: 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f  Id2->n==0 && eMo
47a0: 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  de==PAGER_LOCKIN
47b0: 47 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20  GMODE_QUERY ){. 
47c0: 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22       /* Simple "
47d0: 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d  PRAGMA locking_m
47e0: 6f 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e  ode;" statement.
47f0: 20 54 68 69 73 20 69 73 20 61 20 71 75 65 72 79   This is a query
4800: 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68   for.      ** th
4810: 65 20 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c  e current defaul
4820: 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28  t locking mode (
4830: 77 68 69 63 68 20 6d 61 79 20 62 65 20 64 69 66  which may be dif
4840: 66 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20  ferent to.      
4850: 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d  ** the locking-m
4860: 6f 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20  ode of the main 
4870: 64 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20  database)..     
4880: 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20   */.      eMode 
4890: 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f  = db->dfltLockMo
48a0: 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  de;.    }else{. 
48b0: 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67       Pager *pPag
48c0: 65 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49  er;.      if( pI
48d0: 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  d2->n==0 ){.    
48e0: 20 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69      /* This indi
48f0: 63 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61  cates that no da
4900: 74 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20  tabase name was 
4910: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
4920: 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20  t.        ** of 
4930: 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61  the PRAGMA comma
4940: 6e 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  nd. In this case
4950: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64   the locking-mod
4960: 65 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20  e must be.      
4970: 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20    ** set on all 
4980: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
4990: 65 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74  es, as well as t
49a0: 68 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e  he main db file.
49b0: 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  .        **.    
49c0: 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65      ** Also, the
49d0: 20 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63   sqlite3.dfltLoc
49e0: 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69  kMode variable i
49f0: 73 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20  s set so that.  
4a00: 20 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62        ** any sub
4a10: 73 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68  sequently attach
4a20: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6c 73  ed databases als
4a30: 6f 20 75 73 65 20 74 68 65 20 73 70 65 63 69 66  o use the specif
4a40: 69 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c  ied.        ** l
4a50: 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20  ocking mode..   
4a60: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
4a70: 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20  int ii;.        
4a80: 61 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d  assert(pDb==&db-
4a90: 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20  >aDb[0]);.      
4aa0: 20 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64    for(ii=2; ii<d
4ab0: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
4ac0: 20 20 20 20 20 20 20 20 20 70 50 61 67 65 72 20           pPager 
4ad0: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
4ae0: 67 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ger(db->aDb[ii].
4af0: 70 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  pBt);.          
4b00: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
4b10: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
4b20: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20  eMode);.        
4b30: 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66  }.        db->df
4b40: 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38  ltLockMode = (u8
4b50: 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a  )eMode;.      }.
4b60: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
4b70: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
4b80: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
4b90: 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65    eMode = sqlite
4ba0: 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64  3PagerLockingMod
4bb0: 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29  e(pPager, eMode)
4bc0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73  ;.    }..    ass
4bd0: 65 72 74 28 65 4d 6f 64 65 3d 3d 50 41 47 45 52  ert(eMode==PAGER
4be0: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52  _LOCKINGMODE_NOR
4bf0: 4d 41 4c 7c 7c 65 4d 6f 64 65 3d 3d 50 41 47 45  MAL||eMode==PAGE
4c00: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58  R_LOCKINGMODE_EX
4c10: 43 4c 55 53 49 56 45 29 3b 0a 20 20 20 20 69 66  CLUSIVE);.    if
4c20: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
4c30: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55  OCKINGMODE_EXCLU
4c40: 53 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52  SIVE ){.      zR
4c50: 65 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22  et = "exclusive"
4c60: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
4c70: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
4c80: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  s(v, 1);.    sql
4c90: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
4ca0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
4cb0: 5f 4e 41 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f  _NAME, "locking_
4cc0: 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  mode", SQLITE_ST
4cd0: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
4ce0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
4cf0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
4d00: 2c 20 30 2c 20 7a 52 65 74 2c 20 30 29 3b 0a 20  , 0, zRet, 0);. 
4d10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
4d20: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
4d30: 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 7d  tRow, 1, 1);.  }
4d40: 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  else..  /*.  ** 
4d50: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
4d60: 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a  e.]journal_mode.
4d70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
4d80: 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f  tabase.]journal_
4d90: 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20  mode =.  **     
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4db0: 20 28 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74   (delete|persist
4dc0: 7c 6f 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65  |off|truncate|me
4dd0: 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20  mory|wal|off).  
4de0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
4df0: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 6a  StrICmp(zLeft,"j
4e00: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 29 3d 3d 30  ournal_mode")==0
4e10: 20 29 7b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64   ){.    int eMod
4e20: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65  e;        /* One
4e30: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
4e40: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 73 79  URNALMODE_XXX sy
4e50: 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20 20 69 6e 74  mbols */.    int
4e60: 20 69 69 3b 20 20 20 20 20 20 20 20 20 20 20 2f   ii;           /
4e70: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
4e80: 2f 0a 0a 20 20 20 20 2f 2a 20 46 6f 72 63 65 20  /..    /* Force 
4e90: 74 68 65 20 73 63 68 65 6d 61 20 74 6f 20 62 65  the schema to be
4ea0: 20 6c 6f 61 64 65 64 20 6f 6e 20 61 6c 6c 20 64   loaded on all d
4eb0: 61 74 61 62 61 73 65 73 2e 20 20 54 68 69 73 20  atabases.  This 
4ec0: 63 61 75 73 65 73 20 61 6c 6c 0a 20 20 20 20 2a  causes all.    *
4ed0: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  * database files
4ee0: 20 74 6f 20 62 65 20 6f 70 65 6e 65 64 20 61 6e   to be opened an
4ef0: 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  d the journal_mo
4f00: 64 65 73 20 73 65 74 2e 20 20 54 68 69 73 20 69  des set.  This i
4f10: 73 0a 20 20 20 20 2a 2a 20 6e 65 63 65 73 73 61  s.    ** necessa
4f20: 72 79 20 62 65 63 61 75 73 65 20 73 75 62 73 65  ry because subse
4f30: 71 75 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  quent processing
4f40: 20 6d 75 73 74 20 6b 6e 6f 77 20 69 66 20 74 68   must know if th
4f50: 65 20 64 61 74 61 62 61 73 65 73 0a 20 20 20 20  e databases.    
4f60: 2a 2a 20 61 72 65 20 69 6e 20 57 41 4c 20 6d 6f  ** are in WAL mo
4f70: 64 65 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 73  de. */.    if( s
4f80: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
4f90: 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20  (pParse) ){.    
4fa0: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
4fb0: 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  t;.    }..    sq
4fc0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
4fd0: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73  ols(v, 1);.    s
4fe0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
4ff0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
5000: 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f 75 72 6e 61  ME_NAME, "journa
5010: 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f  l_mode", SQLITE_
5020: 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 69 66  STATIC);..    if
5030: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
5040: 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65       /* If there
5050: 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70   is no "=MODE" p
5060: 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d  art of the pragm
5070: 61 2c 20 64 6f 20 61 20 71 75 65 72 79 20 66 6f  a, do a query fo
5080: 72 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 63  r the.      ** c
5090: 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20  urrent mode */. 
50a0: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47       eMode = PAG
50b0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
50c0: 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  UERY;.    }else{
50d0: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
50e0: 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20  r *zMode;.      
50f0: 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33 53  int n = sqlite3S
5100: 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 3b  trlen30(zRight);
5110: 0a 20 20 20 20 20 20 66 6f 72 28 65 4d 6f 64 65  .      for(eMode
5120: 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c  =0; (zMode = sql
5130: 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
5140: 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20  ame(eMode))!=0; 
5150: 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20  eMode++){.      
5160: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
5170: 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d  NICmp(zRight, zM
5180: 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65  ode, n)==0 ) bre
5190: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
51a0: 20 20 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a    if( !zMode ){.
51b0: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
51c0: 65 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 64  e "=MODE" part d
51d0: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e  oes not match an
51e0: 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20  y known journal 
51f0: 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a  mode,.        **
5200: 20 74 68 65 6e 20 64 6f 20 61 20 71 75 65 72 79   then do a query
5210: 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f 64   */.        eMod
5220: 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  e = PAGER_JOURNA
5230: 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20  LMODE_QUERY;.   
5240: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5250: 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  f( eMode==PAGER_
5260: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
5270: 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20  Y && pId2->n==0 
5280: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76  ){.      /* Conv
5290: 65 72 74 20 22 50 52 41 47 4d 41 20 6a 6f 75 72  ert "PRAGMA jour
52a0: 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22  nal_mode" into "
52b0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
52c0: 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20  nal_mode" */.   
52d0: 20 20 20 69 44 62 20 3d 20 30 3b 0a 20 20 20 20     iDb = 0;.    
52e0: 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20    pId2->n = 1;. 
52f0: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d     }.    for(ii=
5300: 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30  db->nDb-1; ii>=0
5310: 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69  ; ii--){.      i
5320: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
5330: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
5340: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
5350: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5360: 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
5370: 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 73 71   ii);.        sq
5380: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
5390: 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64  v, OP_JournalMod
53a0: 65 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29  e, ii, 1, eMode)
53b0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
53c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
53d0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
53e0: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
53f0: 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  }else..  /*.  **
5400: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
5410: 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  se.]journal_size
5420: 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41  _limit.  **  PRA
5430: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a  GMA [database.]j
5440: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
5450: 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65  t=N.  **.  ** Ge
5460: 74 20 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a  t or set the siz
5470: 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62  e limit on rollb
5480: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
5490: 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  s..  */.  if( sq
54a0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
54b0: 66 74 2c 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  ft,"journal_size
54c0: 5f 6c 69 6d 69 74 22 29 3d 3d 30 20 29 7b 0a 20  _limit")==0 ){. 
54d0: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
54e0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
54f0: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
5500: 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d      i64 iLimit =
5510: 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69   -2;.    if( zRi
5520: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
5530: 69 74 65 33 41 74 6f 69 36 34 28 7a 52 69 67 68  ite3Atoi64(zRigh
5540: 74 2c 20 26 69 4c 69 6d 69 74 2c 20 31 30 30 30  t, &iLimit, 1000
5550: 30 30 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  000, SQLITE_UTF8
5560: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69  );.      if( iLi
5570: 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20  mit<-1 ) iLimit 
5580: 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  = -1;.    }.    
5590: 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65 33  iLimit = sqlite3
55a0: 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65  PagerJournalSize
55b0: 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69 4c  Limit(pPager, iL
55c0: 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75 72  imit);.    retur
55d0: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
55e0: 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  e, "journal_size
55f0: 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d 69 74 29  _limit", iLimit)
5600: 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 65 6e 64 69  ;.  }else..#endi
5610: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
5620: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
5630: 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  /..  /*.  **  PR
5640: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
5650: 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a  auto_vacuum.  **
5660: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
5670: 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d  se.]auto_vacuum=
5680: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
5690: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
56a0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
56b0: 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70   'auto-vacuum' p
56c0: 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54  arameter..  ** T
56d0: 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20  he value is one 
56e0: 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55  of:  0 NONE 1 FU
56f0: 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c  LL 2 INCREMENTAL
5700: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
5710: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
5720: 43 55 55 4d 0a 20 20 69 66 28 20 73 71 6c 69 74  CUUM.  if( sqlit
5730: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
5740: 22 61 75 74 6f 5f 76 61 63 75 75 6d 22 29 3d 3d  "auto_vacuum")==
5750: 30 20 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  0 ){.    Btree *
5760: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
5770: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
5780: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 73 71  =0 );.    if( sq
5790: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
57a0: 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20 20  pParse) ){.     
57b0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
57c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
57d0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
57e0: 20 69 6e 74 20 61 75 74 6f 5f 76 61 63 75 75 6d   int auto_vacuum
57f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 41 4c 57 41  ;.      if( ALWA
5800: 59 53 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20  YS(pBt) ){.     
5810: 20 20 20 20 61 75 74 6f 5f 76 61 63 75 75 6d 20      auto_vacuum 
5820: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
5830: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 29  tAutoVacuum(pBt)
5840: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
5850: 20 20 20 20 20 20 20 20 61 75 74 6f 5f 76 61 63          auto_vac
5860: 75 75 6d 20 3d 20 53 51 4c 49 54 45 5f 44 45 46  uum = SQLITE_DEF
5870: 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d 3b  AULT_AUTOVACUUM;
5880: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
5890: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
58a0: 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63  Parse, "auto_vac
58b0: 75 75 6d 22 2c 20 61 75 74 6f 5f 76 61 63 75 75  uum", auto_vacuu
58c0: 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  m);.    }else{. 
58d0: 20 20 20 20 20 69 6e 74 20 65 41 75 74 6f 20 3d       int eAuto =
58e0: 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28 7a   getAutoVacuum(z
58f0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 61 73  Right);.      as
5900: 73 65 72 74 28 20 65 41 75 74 6f 3e 3d 30 20 26  sert( eAuto>=0 &
5910: 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a 20 20  & eAuto<=2 );.  
5920: 20 20 20 20 64 62 2d 3e 6e 65 78 74 41 75 74 6f      db->nextAuto
5930: 76 61 63 20 3d 20 28 75 38 29 65 41 75 74 6f 3b  vac = (u8)eAuto;
5940: 0a 20 20 20 20 20 20 69 66 28 20 41 4c 57 41 59  .      if( ALWAY
5950: 53 28 65 41 75 74 6f 3e 3d 30 29 20 29 7b 0a 20  S(eAuto>=0) ){. 
5960: 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20 53         /* Call S
5970: 65 74 41 75 74 6f 56 61 63 75 75 6d 28 29 20 74  etAutoVacuum() t
5980: 6f 20 73 65 74 20 69 6e 69 74 69 61 6c 69 7a 65  o set initialize
5990: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 61 75   the internal au
59a0: 74 6f 20 61 6e 64 0a 20 20 20 20 20 20 20 20 2a  to and.        *
59b0: 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c  * incr-vacuum fl
59c0: 61 67 73 2e 20 54 68 69 73 20 69 73 20 72 65 71  ags. This is req
59d0: 75 69 72 65 64 20 69 6e 20 63 61 73 65 20 74 68  uired in case th
59e0: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20  is connection.  
59f0: 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73        ** creates
5a00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5a10: 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  le. It is import
5a20: 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63  ant that it is c
5a30: 72 65 61 74 65 64 0a 20 20 20 20 20 20 20 20 2a  reated.        *
5a40: 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  * as an auto-vac
5a50: 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a  uum capable db..
5a60: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
5a70: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
5a80: 74 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75  treeSetAutoVacuu
5a90: 6d 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20  m(pBt, eAuto);. 
5aa0: 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
5ab0: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 28 65 41 75  QLITE_OK && (eAu
5ac0: 74 6f 3d 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d  to==1 || eAuto==
5ad0: 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  2) ){.          
5ae0: 2f 2a 20 57 68 65 6e 20 73 65 74 74 69 6e 67 20  /* When setting 
5af0: 74 68 65 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  the auto_vacuum 
5b00: 6d 6f 64 65 20 74 6f 20 65 69 74 68 65 72 20 22  mode to either "
5b10: 66 75 6c 6c 22 20 6f 72 20 0a 20 20 20 20 20 20  full" or .      
5b20: 20 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d 65 6e      ** "incremen
5b30: 74 61 6c 22 2c 20 77 72 69 74 65 20 74 68 65 20  tal", write the 
5b40: 76 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b 36 5d  value of meta[6]
5b50: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
5b60: 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 69  .          ** fi
5b70: 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74 69  le. Before writi
5b80: 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63  ng to meta[6], c
5b90: 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b 33  heck that meta[3
5ba0: 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 20  ] indicates.    
5bb0: 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
5bc0: 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20  is really is an 
5bd0: 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61  auto-vacuum capa
5be0: 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  ble database..  
5bf0: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
5c00: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
5c10: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74  t VdbeOpList set
5c20: 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20 20 20  Meta6[] = {.    
5c30: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
5c40: 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20  nsaction,    0, 
5c50: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
5c60: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5c70: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
5c80: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
5c90: 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20  ookie,     0,   
5ca0: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
5cb0: 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52   BTREE_LARGEST_R
5cc0: 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20  OOT_PAGE},.     
5cd0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20         { OP_If, 
5ce0: 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 20              1,  
5cf0: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
5d00: 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20            0},   
5d10: 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20   /* 2 */.       
5d20: 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20       { OP_Halt, 
5d30: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
5d40: 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20  _OK, OE_Abort,  
5d50: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
5d60: 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 3 */.         
5d70: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
5d80: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
5d90: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20     1,           
5da0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
5db0: 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  4 */.           
5dc0: 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c   { OP_SetCookie,
5dd0: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
5de0: 20 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55   BTREE_INCR_VACU
5df0: 55 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a 20 35 20  UM, 1},    /* 5 
5e00: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a  */.          };.
5e10: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 41            int iA
5e20: 64 64 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69  ddr;.          i
5e30: 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  Addr = sqlite3Vd
5e40: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
5e50: 72 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61  rraySize(setMeta
5e60: 36 29 2c 20 73 65 74 4d 65 74 61 36 29 3b 0a 20  6), setMeta6);. 
5e70: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
5e80: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5e90: 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20  iAddr, iDb);.   
5ea0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5eb0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
5ec0: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
5ed0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5ee0: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 69 41  beChangeP2(v, iA
5ef0: 64 64 72 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b  ddr+2, iAddr+4);
5f00: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
5f10: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
5f20: 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75 74 6f  , iAddr+4, eAuto
5f30: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  -1);.          s
5f40: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5f50: 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69  P1(v, iAddr+5, i
5f60: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Db);.          s
5f70: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
5f80: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
5f90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
5fa0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
5fb0: 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  dif..  /*.  **  
5fc0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
5fd0: 2e 5d 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61  .]incremental_va
5fe0: 63 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a  cuum(N).  **.  *
5ff0: 2a 20 44 6f 20 4e 20 73 74 65 70 73 20 6f 66 20  * Do N steps of 
6000: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
6010: 75 6d 69 6e 67 20 6f 6e 20 61 20 64 61 74 61 62  uming on a datab
6020: 61 73 65 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65  ase..  */.#ifnde
6030: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
6040: 54 4f 56 41 43 55 55 4d 0a 20 20 69 66 28 20 73  TOVACUUM.  if( s
6050: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
6060: 65 66 74 2c 22 69 6e 63 72 65 6d 65 6e 74 61 6c  eft,"incremental
6070: 5f 76 61 63 75 75 6d 22 29 3d 3d 30 20 29 7b 0a  _vacuum")==0 ){.
6080: 20 20 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20      int iLimit, 
6090: 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20 73 71  addr;.    if( sq
60a0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
60b0: 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20 20 20  pParse) ){.     
60c0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
60d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
60e0: 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73 71  zRight==0 || !sq
60f0: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52  lite3GetInt32(zR
6100: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20 7c  ight, &iLimit) |
6110: 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a 20  | iLimit<=0 ){. 
6120: 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30 78       iLimit = 0x
6130: 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a  7fffffff;.    }.
6140: 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e      sqlite3Begin
6150: 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70  WriteOperation(p
6160: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a  Parse, 0, iDb);.
6170: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6180: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
6190: 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29 3b  ger, iLimit, 1);
61a0: 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69  .    addr = sqli
61b0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
61c0: 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20   OP_IncrVacuum, 
61d0: 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iDb);.    sqlite
61e0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
61f0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 29 3b  P_ResultRow, 1);
6200: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
6210: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
6220: 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20  Imm, 1, -1);.   
6230: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
6240: 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p2(v, OP_IfPos, 
6250: 31 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 73 71  1, addr);.    sq
6260: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
6270: 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 7d 65  e(v, addr);.  }e
6280: 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  lse.#endif..#ifn
6290: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
62a0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20  PAGER_PRAGMAS.  
62b0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
62c0: 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65  [database.]cache
62d0: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
62e0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61  MA [database.]ca
62f0: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
6300: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
6310: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
6320: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
6330: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
6340: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
6350: 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66  ze. The second f
6360: 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63  orm sets the loc
6370: 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  al.  ** page cac
6380: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  he size value.  
6390: 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  If N is positive
63a0: 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68   then that is th
63b0: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
63c0: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61   pages in the ca
63d0: 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  che.  If N is ne
63e0: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
63f0: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
6400: 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65  pages is adjuste
6410: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61  d so that the ca
6420: 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69  che uses -N kibi
6430: 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65  bytes.  ** of me
6440: 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  mory..  */.  if(
6450: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
6460: 7a 4c 65 66 74 2c 22 63 61 63 68 65 5f 73 69 7a  zLeft,"cache_siz
6470: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  e")==0 ){.    if
6480: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
6490: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
64a0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
64b0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
64c0: 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
64d0: 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
64e0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
64f0: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
6500: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
6510: 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20  , "cache_size", 
6520: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
6530: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
6540: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
6550: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
6560: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
6570: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
6580: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
6590: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
65a0: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
65b0: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
65c0: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
65d0: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  size);.    }.  }
65e0: 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  else..  /*.  ** 
65f0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
6600: 65 2e 5d 6d 6d 61 70 5f 6c 69 6d 69 74 28 4e 29  e.]mmap_limit(N)
6610: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20  .  **.  ** Used 
6620: 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73  to set mapping s
6630: 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d  ize limit. The m
6640: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
6650: 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74  t is.  ** used t
6660: 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72  o limit the aggr
6670: 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c  egate size of al
6680: 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20  l memory mapped 
6690: 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20  regions of the. 
66a0: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c   ** database fil
66b0: 65 2e 20 49 66 20 74 68 69 73 20 70 61 72 61 6d  e. If this param
66c0: 65 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a  eter is set to z
66d0: 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79  ero, then memory
66e0: 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73   mapping.  ** is
66f0: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
6700: 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74  .  If N is negat
6710: 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65  ive, then the de
6720: 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70  fault memory map
6730: 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65  .  ** limit dete
6740: 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65  rmined by sqlite
6750: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
6760: 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 4c 49 4d 49  CONFIG_MMAP_LIMI
6770: 54 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20  T) is set..  ** 
6780: 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e 20  The parameter N 
6790: 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62  is measured in b
67a0: 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ytes..  **.  ** 
67b0: 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 61 64  This value is ad
67c0: 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e 64  visory.  The und
67d0: 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20 66  erlying VFS is f
67e0: 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61  ree to memory ma
67f0: 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65  p.  ** as little
6800: 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20 69   or as much as i
6810: 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70 74  t wants.  Except
6820: 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20 74 6f  , if N is set to
6830: 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a   0 then the.  **
6840: 20 75 70 70 65 72 20 6c 61 79 65 72 73 20 77 69   upper layers wi
6850: 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20  ll never invoke 
6860: 74 68 65 20 78 46 65 74 63 68 20 69 6e 74 65 72  the xFetch inter
6870: 66 61 63 65 73 20 74 6f 20 74 68 65 20 56 46 53  faces to the VFS
6880: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  ..  */.  if( sql
6890: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
68a0: 74 2c 22 6d 6d 61 70 5f 6c 69 6d 69 74 22 29 3d  t,"mmap_limit")=
68b0: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
68c0: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
68d0: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
68e0: 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
68f0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6900: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 69  sqlite3_int64 si
6910: 7a 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 69  ze;.      int ii
6920: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 41  ;.      sqlite3A
6930: 74 6f 69 36 34 28 7a 52 69 67 68 74 2c 20 26 73  toi64(zRight, &s
6940: 69 7a 65 2c 20 31 30 30 30 2c 20 53 51 4c 49 54  ize, 1000, SQLIT
6950: 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69  E_UTF8);.      i
6960: 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69 7a 65  f( size<0 ) size
6970: 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c   = sqlite3Global
6980: 43 6f 6e 66 69 67 2e 6d 78 4d 6d 61 70 3b 0a 20  Config.mxMmap;. 
6990: 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e       if( pId2->n
69a0: 3d 3d 30 20 29 20 64 62 2d 3e 6d 78 4d 6d 61 70  ==0 ) db->mxMmap
69b0: 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 66   = size;.      f
69c0: 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b  or(ii=db->nDb-1;
69d0: 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20   ii>=0; ii--){. 
69e0: 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
69f0: 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69  Db[ii].pBt && (i
6a00: 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e  i==iDb || pId2->
6a10: 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20  n==0) ){.       
6a20: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
6a30: 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e  etMmapLimit(db->
6a40: 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73 69 7a  aDb[ii].pBt, siz
6a50: 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  e);.        }.  
6a60: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
6a70: 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  lse..  /*.  **  
6a80: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6a90: 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  re.  **   PRAGMA
6aa0: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64   temp_store = "d
6ab0: 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22  efault"|"memory"
6ac0: 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a  |"file".  **.  *
6ad0: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
6ae0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
6af0: 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72  of the temp_stor
6b00: 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  e flag.  Changin
6b10: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
6b20: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
6b30: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
6b40: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
6b50: 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  d the default.  
6b60: 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  ** value will be
6b70: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
6b80: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
6b90: 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a  base is opened..
6ba0: 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74    **.  ** Note t
6bb0: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
6bc0: 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61  le for the libra
6bd0: 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ry compile-time 
6be0: 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20  options to.  ** 
6bf0: 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65  override this se
6c00: 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 69 66 28  tting.  */.  if(
6c10: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
6c20: 7a 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74 6f  zLeft, "temp_sto
6c30: 72 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  re")==0 ){.    i
6c40: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
6c50: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
6c60: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d  Int(pParse, "tem
6c70: 70 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65  p_store", db->te
6c80: 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d  mp_store);.    }
6c90: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e  else{.      chan
6ca0: 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50  geTempStorage(pP
6cb0: 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20  arse, zRight);. 
6cc0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
6cd0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
6ce0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
6cf0: 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41  ctory.  **   PRA
6d00: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
6d10: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64  irectory = ""|"d
6d20: 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20  irectory_name". 
6d30: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
6d40: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
6d50: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
6d60: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6d70: 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  ry flag.  Changi
6d80: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
6d90: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
6da0: 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62  c directory to b
6db0: 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
6dc0: 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a  rary files..  **
6dd0: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
6de0: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
6df0: 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74  s to the default
6e00: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
6e10: 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a  tory search..  *
6e20: 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64  * If temporary d
6e30: 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e  irectory is chan
6e40: 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69  ged, then invali
6e50: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e  dateTempStorage.
6e60: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 69 66 28  .  **.  */.  if(
6e70: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
6e80: 7a 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74 6f  zLeft, "temp_sto
6e90: 72 65 5f 64 69 72 65 63 74 6f 72 79 22 29 3d 3d  re_directory")==
6ea0: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  0 ){.    if( !zR
6eb0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
6ec0: 28 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64  ( sqlite3_temp_d
6ed0: 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20  irectory ){.    
6ee0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6ef0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
6f00: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
6f10: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
6f20: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
6f30: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
6f40: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
6f50: 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53  ctory", SQLITE_S
6f60: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
6f70: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
6f80: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
6f90: 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65   0, 1, 0, sqlite
6fa0: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
6fb0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
6fc0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
6fd0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
6fe0: 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 1);.      }.
6ff0: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
7000: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
7010: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
7020: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
7030: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
7040: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
7050: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
7060: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
7070: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
7080: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
7090: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
70a0: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
70b0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
70c0: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
70d0: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
70e0: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
70f0: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
7100: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
7110: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
7120: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45     if( SQLITE_TE
7130: 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20  MP_STORE==0.    
7140: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
7150: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
7160: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
7170: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  ).       || (SQL
7180: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
7190: 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  2 && db->temp_st
71a0: 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b  ore==1).      ){
71b0: 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64  .        invalid
71c0: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70  ateTempStorage(p
71d0: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
71e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
71f0: 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ee(sqlite3_temp_
7200: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
7210: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
7220: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7230: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7240: 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
7250: 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74  ntf("%s", zRight
7260: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
7270: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
7280: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
7290: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   0;.      }.#end
72a0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
72b0: 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20  T_WSD */.    }. 
72c0: 20 7d 65 6c 73 65 0a 0a 23 69 66 20 53 51 4c 49   }else..#if SQLI
72d0: 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 2f 2a 0a 20  TE_OS_WIN.  /*. 
72e0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74   **   PRAGMA dat
72f0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
7300: 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  y.  **   PRAGMA 
7310: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
7320: 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63  tory = ""|"direc
7330: 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a  tory_name".  **.
7340: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
7350: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
7360: 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 5f 73  ue of the data_s
7370: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66  tore_directory f
7380: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
7390: 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65   ** the value se
73a0: 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64 69  ts a specific di
73b0: 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73  rectory to be us
73c0: 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ed for database 
73d0: 66 69 6c 65 73 20 74 68 61 74 0a 20 20 2a 2a 20  files that.  ** 
73e0: 77 65 72 65 20 73 70 65 63 69 66 69 65 64 20 77  were specified w
73f0: 69 74 68 20 61 20 72 65 6c 61 74 69 76 65 20 70  ith a relative p
7400: 61 74 68 6e 61 6d 65 2e 20 20 53 65 74 74 69 6e  athname.  Settin
7410: 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69  g to a null stri
7420: 6e 67 20 72 65 76 65 72 74 73 0a 20 20 2a 2a 20  ng reverts.  ** 
7430: 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20 64  to the default d
7440: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
7450: 79 2c 20 77 68 69 63 68 20 66 6f 72 20 64 61 74  y, which for dat
7460: 61 62 61 73 65 20 66 69 6c 65 73 20 73 70 65 63  abase files spec
7470: 69 66 69 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ified with.  ** 
7480: 61 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 20  a relative path 
7490: 77 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 62 65  will probably be
74a0: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 75   based on the cu
74b0: 72 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20  rrent directory 
74c0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 72 6f  for the.  ** pro
74d0: 63 65 73 73 2e 20 20 44 61 74 61 62 61 73 65 20  cess.  Database 
74e0: 66 69 6c 65 20 73 70 65 63 69 66 69 65 64 20 77  file specified w
74f0: 69 74 68 20 61 6e 20 61 62 73 6f 6c 75 74 65 20  ith an absolute 
7500: 70 61 74 68 20 61 72 65 20 6e 6f 74 20 69 6d 70  path are not imp
7510: 61 63 74 65 64 0a 20 20 2a 2a 20 62 79 20 74 68  acted.  ** by th
7520: 69 73 20 73 65 74 74 69 6e 67 2c 20 72 65 67 61  is setting, rega
7530: 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20 76 61  rdless of its va
7540: 6c 75 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  lue..  **.  */. 
7550: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
7560: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 64 61 74 61  Cmp(zLeft, "data
7570: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7580: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  ")==0 ){.    if(
7590: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
75a0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 64 61    if( sqlite3_da
75b0: 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a  ta_directory ){.
75c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
75d0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
75e0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
75f0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
7600: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
7610: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
7620: 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72 65 5f      "data_store_
7630: 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49  directory", SQLI
7640: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
7650: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7660: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
7670: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71  ng8, 0, 1, 0, sq
7680: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7690: 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  tory, 0);.      
76a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
76b0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
76c0: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
76d0: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23    }.    }else{.#
76e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
76f0: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
7700: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
7710: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
7720: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
7730: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
7740: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
7750: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
7760: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
7770: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
7780: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
7790: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
77a0: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
77b0: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
77c0: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
77d0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
77e0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
77f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
7800: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7810: 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61 74 61  ree(sqlite3_data
7820: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
7830: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7840: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
7850: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
7860: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
7870: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
7880: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
7890: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
78a0: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20  _data_directory 
78b0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
78c0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
78d0: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
78e0: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
78f0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
7900: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
7910: 4e 47 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20  NG_STYLE).#  if 
7920: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
7930: 5f 29 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  _).#    define S
7940: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
7950: 4b 49 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20  KING_STYLE 1.#  
7960: 65 6c 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65  else.#    define
7970: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c   SQLITE_ENABLE_L
7980: 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23  OCKING_STYLE 0.#
7990: 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23    endif.#endif.#
79a0: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
79b0: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
79c0: 20 2f 2a 0a 20 20 20 2a 2a 20 20 20 50 52 41 47   /*.   **   PRAG
79d0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f  MA [database.]lo
79e0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20  ck_proxy_file.  
79f0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
7a00: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f  tabase.]lock_pro
7a10: 78 79 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f  xy_file = ":auto
7a20: 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61  :"|"lock_file_pa
7a30: 74 68 22 0a 20 20 20 2a 2a 0a 20 20 20 2a 2a 20  th".   **.   ** 
7a40: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
7a50: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c  e value of the l
7a60: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 66  ock_proxy_file f
7a70: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
7a80: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73    ** the value s
7a90: 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20 66  ets a specific f
7aa0: 69 6c 65 20 74 6f 20 62 65 20 75 73 65 64 20 66  ile to be used f
7ab0: 6f 72 20 64 61 74 61 62 61 73 65 20 61 63 63 65  or database acce
7ac0: 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 20 2a 2a 0a  ss locks..   **.
7ad0: 20 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69     */.  if( sqli
7ae0: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
7af0: 2c 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  , "lock_proxy_fi
7b00: 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  le")==0 ){.    i
7b10: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
7b20: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
7b30: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
7b40: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
7b50: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f  .      char *pro
7b60: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e  xy_file_path = N
7b70: 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ULL;.      sqlit
7b80: 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d  e3_file *pFile =
7b90: 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
7ba0: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
7bb0: 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f   sqlite3OsFileCo
7bc0: 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c  ntrolHint(pFile,
7bd0: 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b   SQLITE_GET_LOCK
7be0: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c00: 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69         &proxy_fi
7c10: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20  le_path);.      
7c20: 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f 78 79  .      if( proxy
7c30: 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20  _file_path ){.  
7c40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7c50: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
7c60: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
7c70: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
7c80: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
7c90: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f      "lock_proxy_
7cc0: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
7cd0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
7ce0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
7cf0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
7d00: 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66  0, 1, 0, proxy_f
7d10: 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20  ile_path, 0);.  
7d20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7d30: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
7d40: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
7d50: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
7d60: 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  e{.      Pager *
7d70: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
7d80: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
7d90: 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  pBt);.      sqli
7da0: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
7db0: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
7dc0: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
7dd0: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
7de0: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
7df0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
7e00: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
7e10: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
7e20: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
7e30: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 20 20 20 20 20 20 20 20 7a 52 69 67 68 74            zRight
7e60: 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  );.      } else 
7e70: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
7e80: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
7e90: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
7ea0: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
7eb0: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b            NULL);
7ee0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
7ef0: 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f  f( res!=SQLITE_O
7f00: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
7f10: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
7f20: 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  rse, "failed to 
7f30: 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66  set lock proxy f
7f40: 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67  ile");.        g
7f50: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
7f60: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
7f70: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
7f80: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
7f90: 43 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20  CKING_STYLE */  
7fa0: 20 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20      .    .  /*. 
7fb0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
7fc0: 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e  tabase.]synchron
7fd0: 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ous.  **   PRAGM
7fe0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 79 6e  A [database.]syn
7ff0: 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c  chronous=OFF|ON|
8000: 4e 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a  NORMAL|FULL.  **
8010: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
8020: 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61  set the local va
8030: 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e 63 68  lue of the synch
8040: 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43 68  ronous flag.  Ch
8050: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
8060: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73  local value does
8070: 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65   not make change
8080: 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69  s to the disk fi
8090: 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20  le and the.  ** 
80a0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69  default value wi
80b0: 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 74  ll be restored t
80c0: 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65  he next time the
80d0: 20 64 61 74 61 62 61 73 65 20 69 73 0a 20 20 2a   database is.  *
80e0: 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20  * opened..  */. 
80f0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
8100: 43 6d 70 28 7a 4c 65 66 74 2c 22 73 79 6e 63 68  Cmp(zLeft,"synch
8110: 72 6f 6e 6f 75 73 22 29 3d 3d 30 20 29 7b 0a 20  ronous")==0 ){. 
8120: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
8130: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
8140: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
8150: 75 74 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  ut;.    if( !zRi
8160: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
8170: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
8180: 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  rse, "synchronou
8190: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
81a0: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
81b0: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
81c0: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
81d0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
81e0: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
81f0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
8200: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
8210: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
8220: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
8230: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
8240: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62  lse{.        pDb
8250: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
8260: 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28   getSafetyLevel(
8270: 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20  zRight,0,1)+1;. 
8280: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
8290: 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53  else.#endif /* S
82a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
82b0: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
82c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
82d0: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20 20  _FLAG_PRAGMAS.  
82e0: 69 66 28 20 66 6c 61 67 50 72 61 67 6d 61 28 70  if( flagPragma(p
82f0: 50 61 72 73 65 2c 20 7a 4c 65 66 74 2c 20 7a 52  Parse, zLeft, zR
8300: 69 67 68 74 29 20 29 7b 0a 20 20 20 20 2f 2a 20  ight) ){.    /* 
8310: 54 68 65 20 66 6c 61 67 50 72 61 67 6d 61 28 29  The flagPragma()
8320: 20 73 75 62 72 6f 75 74 69 6e 65 20 61 6c 73 6f   subroutine also
8330: 20 67 65 6e 65 72 61 74 65 73 20 61 6e 79 20 6e   generates any n
8340: 65 63 65 73 73 61 72 79 20 63 6f 64 65 0a 20 20  ecessary code.  
8350: 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 6e 6f    ** there is no
8360: 74 68 69 6e 67 20 6d 6f 72 65 20 74 6f 20 64 6f  thing more to do
8370: 20 68 65 72 65 20 2a 2f 0a 20 20 7d 65 6c 73 65   here */.  }else
8380: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
8390: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
83a0: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
83b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
83c0: 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a  MA_PRAGMAS.  /*.
83d0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61    **   PRAGMA ta
83e0: 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e  ble_info(<table>
83f0: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ).  **.  ** Retu
8400: 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  rn a single row 
8410: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
8420: 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62  of the named tab
8430: 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  le. The columns 
8440: 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75  of.  ** the retu
8450: 72 6e 65 64 20 64 61 74 61 20 73 65 74 20 61 72  rned data set ar
8460: 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64  e:.  **.  ** cid
8470: 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  :        Column 
8480: 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f  id (numbered fro
8490: 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c  m left to right,
84a0: 20 73 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a   starting at 0).
84b0: 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20    ** name:      
84c0: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a   Column name.  *
84d0: 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f  * type:       Co
84e0: 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  lumn declaration
84f0: 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e   type..  ** notn
8500: 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20  ull:    True if 
8510: 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61  'NOT NULL' is pa
8520: 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63  rt of column dec
8530: 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66  laration.  ** df
8540: 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65  lt_value: The de
8550: 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
8560: 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61  the column, if a
8570: 6e 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  ny..  */.  if( s
8580: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
8590: 65 66 74 2c 20 22 74 61 62 6c 65 5f 69 6e 66 6f  eft, "table_info
85a0: 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68 74 20  ")==0 && zRight 
85b0: 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  ){.    Table *pT
85c0: 61 62 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  ab;.    if( sqli
85d0: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
85e0: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
85f0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 70 54 61  gma_out;.    pTa
8600: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
8610: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
8620: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
8630: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  Tab ){.      int
8640: 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74   i, k;.      int
8650: 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20   nHidden = 0;.  
8660: 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c      Column *pCol
8670: 3b 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70  ;.      Index *p
8680: 50 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 50  Pk;.      for(pP
8690: 6b 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  k=pTab->pIndex; 
86a0: 70 50 6b 20 26 26 20 70 50 6b 2d 3e 61 75 74 6f  pPk && pPk->auto
86b0: 49 6e 64 65 78 21 3d 32 3b 20 70 50 6b 3d 70 50  Index!=2; pPk=pP
86c0: 6b 2d 3e 70 4e 65 78 74 29 7b 7d 0a 20 20 20 20  k->pNext){}.    
86d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
86e0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20  NumCols(v, 6);. 
86f0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
8700: 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c  m = 6;.      sql
8710: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8720: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
8730: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8740: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
8750: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
8760: 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45  E, "cid", SQLITE
8770: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
8780: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8790: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
87a0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
87b0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
87c0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
87d0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
87e0: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
87f0: 2c 20 22 74 79 70 65 22 2c 20 53 51 4c 49 54 45  , "type", SQLITE
8800: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
8810: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8820: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
8830: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75  AME_NAME, "notnu
8840: 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ll", SQLITE_STAT
8850: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
8860: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
8870: 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 4, COLNAME_N
8880: 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65  AME, "dflt_value
8890: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
88a0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
88b0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
88c0: 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 5, COLNAME_NAM
88d0: 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49 54 45 5f  E, "pk", SQLITE_
88e0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
88f0: 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
8900: 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c  umnNames(pParse,
8910: 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f   pTab);.      fo
8920: 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62  r(i=0, pCol=pTab
8930: 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e  ->aCol; i<pTab->
8940: 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b  nCol; i++, pCol+
8950: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
8960: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70  IsHiddenColumn(p
8970: 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Col) ){.        
8980: 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20    nHidden++;.   
8990: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
89a0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
89b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
89c0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
89d0: 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e 2c 20 31  er, i-nHidden, 1
89e0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
89f0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
8a00: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
8a10: 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65  , 0, pCol->zName
8a20: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
8a30: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
8a40: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
8a50: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
8a60: 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f     pCol->zType ?
8a70: 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22   pCol->zType : "
8a80: 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  ", 0);.        s
8a90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
8aa0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
8ab0: 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f  (pCol->notNull ?
8ac0: 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a 20 20 20   1 : 0), 4);.   
8ad0: 20 20 20 20 20 69 66 28 20 70 43 6f 6c 2d 3e 7a       if( pCol->z
8ae0: 44 66 6c 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Dflt ){.        
8af0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8b00: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
8b10: 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28 63 68 61  8, 0, 5, 0, (cha
8b20: 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20  r*)pCol->zDflt, 
8b30: 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  0);.        }els
8b40: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e{.          sql
8b50: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
8b60: 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29  , OP_Null, 0, 5)
8b70: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
8b80: 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63      if( (pCol->c
8b90: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
8ba0: 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b  G_PRIMKEY)==0 ){
8bb0: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
8bc0: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
8bd0: 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20  if( pPk==0 ){.  
8be0: 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20          k = 1;. 
8bf0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
8c00: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b          for(k=1;
8c10: 20 41 4c 57 41 59 53 28 6b 3c 3d 70 54 61 62 2d   ALWAYS(k<=pTab-
8c20: 3e 6e 43 6f 6c 29 20 26 26 20 70 50 6b 2d 3e 61  >nCol) && pPk->a
8c30: 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b  iColumn[k-1]!=i;
8c40: 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20   k++){}.        
8c50: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
8c60: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8c70: 50 5f 49 6e 74 65 67 65 72 2c 20 6b 2c 20 36 29  P_Integer, k, 6)
8c80: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
8c90: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8ca0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
8cb0: 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  6);.      }.    
8cc0: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
8cd0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
8ce0: 7a 4c 65 66 74 2c 20 22 69 6e 64 65 78 5f 69 6e  zLeft, "index_in
8cf0: 66 6f 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68  fo")==0 && zRigh
8d00: 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  t ){.    Index *
8d10: 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20  pIdx;.    Table 
8d20: 2a 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20 73  *pTab;.    if( s
8d30: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
8d40: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
8d50: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
8d60: 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69  pIdx = sqlite3Fi
8d70: 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69 67  ndIndex(db, zRig
8d80: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
8d90: 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20  ( pIdx ){.      
8da0: 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 70 54 61  int i;.      pTa
8db0: 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65  b = pIdx->pTable
8dc0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8dd0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
8de0: 20 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73   3);.      pPars
8df0: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
8e00: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
8e10: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
8e20: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  e, iDb);.      s
8e30: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8e40: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
8e50: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e 6f 22  ME_NAME, "seqno"
8e60: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8e70: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8e80: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
8e90: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
8ea0: 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f  , "cid", SQLITE_
8eb0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
8ec0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
8ed0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
8ee0: 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c  ME_NAME, "name",
8ef0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
8f00: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
8f10: 69 3c 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b  i<pIdx->nColumn;
8f20: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
8f30: 6e 74 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e  nt cnum = pIdx->
8f40: 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20  aiColumn[i];.   
8f50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8f60: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
8f70: 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20  eger, i, 1);.   
8f80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8f90: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
8fa0: 65 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a  eger, cnum, 2);.
8fb0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
8fc0: 70 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20  pTab->nCol>cnum 
8fd0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8fe0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
8ff0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
9000: 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b  , 0, pTab->aCol[
9010: 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b  cnum].zName, 0);
9020: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9030: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9040: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
9050: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
9060: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
9070: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
9080: 4c 65 66 74 2c 20 22 69 6e 64 65 78 5f 6c 69 73  Left, "index_lis
9090: 74 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68 74  t")==0 && zRight
90a0: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
90b0: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
90c0: 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20 73 71  pTab;.    if( sq
90d0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
90e0: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
90f0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 70  ragma_out;.    p
9100: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
9110: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
9120: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
9130: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76   pTab ){.      v
9140: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
9150: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
9160: 20 70 49 64 78 20 3d 20 70 54 61 62 2d 3e 70 49   pIdx = pTab->pI
9170: 6e 64 65 78 3b 0a 20 20 20 20 20 20 69 66 28 20  ndex;.      if( 
9180: 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20 20 20  pIdx ){.        
9190: 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20  int i = 0; .    
91a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
91b0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b  etNumCols(v, 3);
91c0: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
91d0: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20  >nMem = 3;.     
91e0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
91f0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
9200: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20  e, iDb);.       
9210: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
9220: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
9230: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22  NAME_NAME, "seq"
9240: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9250: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9260: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9270: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
9280: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
9290: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
92a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
92b0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
92c0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75  COLNAME_NAME, "u
92d0: 6e 69 71 75 65 22 2c 20 53 51 4c 49 54 45 5f 53  nique", SQLITE_S
92e0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
92f0: 77 68 69 6c 65 28 70 49 64 78 29 7b 0a 20 20 20  while(pIdx){.   
9300: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9310: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
9320: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
9330: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9340: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
9350: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
9360: 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  0, pIdx->zName, 
9370: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  0);.          sq
9380: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9390: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
93a0: 49 64 78 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45  Idx->onError!=OE
93b0: 5f 4e 6f 6e 65 2c 20 33 29 3b 0a 20 20 20 20 20  _None, 3);.     
93c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
93d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
93e0: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
93f0: 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20           ++i;.  
9400: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 70          pIdx = p
9410: 49 64 78 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  Idx->pNext;.    
9420: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
9430: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
9440: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
9450: 70 28 7a 4c 65 66 74 2c 20 22 64 61 74 61 62 61  p(zLeft, "databa
9460: 73 65 5f 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a  se_list")==0 ){.
9470: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
9480: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
9490: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
94a0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
94b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
94c0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b  etNumCols(v, 3);
94d0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
94e0: 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74  m = 3;.    sqlit
94f0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
9500: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
9510: 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49  AME, "seq", SQLI
9520: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9530: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
9540: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
9550: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
9560: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9570: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9580: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
9590: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
95a0: 22 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  "file", SQLITE_S
95b0: 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
95c0: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
95d0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
95e0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d  db->aDb[i].pBt==
95f0: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
9600: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
9610: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20  aDb[i].zName!=0 
9620: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9630: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9640: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
9650: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9660: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
9670: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
9680: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
9690: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
96a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
96b0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
96c0: 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   3, 0,.         
96d0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
96e0: 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44  tFilename(db->aD
96f0: 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20  b[i].pBt), 0);. 
9700: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9710: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
9720: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
9730: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
9740: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
9750: 6d 70 28 7a 4c 65 66 74 2c 20 22 63 6f 6c 6c 61  mp(zLeft, "colla
9760: 74 69 6f 6e 5f 6c 69 73 74 22 29 3d 3d 30 20 29  tion_list")==0 )
9770: 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  {.    int i = 0;
9780: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70  .    HashElem *p
9790: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
97a0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32  eSetNumCols(v, 2
97b0: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
97c0: 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c  Mem = 2;.    sql
97d0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
97e0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
97f0: 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51  _NAME, "seq", SQ
9800: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9810: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9820: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
9830: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
9840: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
9850: 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71  C);.    for(p=sq
9860: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
9870: 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b  b->aCollSeq); p;
9880: 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   p=sqliteHashNex
9890: 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c  t(p)){.      Col
98a0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43  lSeq *pColl = (C
98b0: 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48  ollSeq *)sqliteH
98c0: 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20  ashData(p);.    
98d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
98e0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
98f0: 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20 20 20  r, i++, 1);.    
9900: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9910: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
9920: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c  8, 0, 2, 0, pCol
9930: 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  l->zName, 0);.  
9940: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9950: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
9960: 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20  ltRow, 1, 2);.  
9970: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
9980: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
9990: 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53  T_SCHEMA_PRAGMAS
99a0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
99b0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
99c0: 5f 4b 45 59 0a 20 20 69 66 28 20 73 71 6c 69 74  _KEY.  if( sqlit
99d0: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
99e0: 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69   "foreign_key_li
99f0: 73 74 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68  st")==0 && zRigh
9a00: 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70  t ){.    FKey *p
9a10: 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  FK;.    Table *p
9a20: 54 61 62 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  Tab;.    if( sql
9a30: 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70  ite3ReadSchema(p
9a40: 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72  Parse) ) goto pr
9a50: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 70 54  agma_out;.    pT
9a60: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
9a70: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
9a80: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
9a90: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20  pTab ){.      v 
9aa0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
9ab0: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
9ac0: 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65  pFK = pTab->pFKe
9ad0: 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b  y;.      if( pFK
9ae0: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
9af0: 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20  i = 0; .        
9b00: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
9b10: 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20 20  mCols(v, 8);.   
9b20: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
9b30: 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73  m = 8;.        s
9b40: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
9b50: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
9b60: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
9b70: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
9b80: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
9b90: 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53 51 4c  _NAME, "id", SQL
9ba0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
9bb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9bc0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
9bd0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9be0: 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  seq", SQLITE_STA
9bf0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
9c00: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9c10: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
9c20: 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c  E_NAME, "table",
9c30: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9c40: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9c50: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9c60: 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 3, COLNAME_NAM
9c70: 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54  E, "from", SQLIT
9c80: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
9c90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9ca0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43  tColName(v, 4, C
9cb0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f  OLNAME_NAME, "to
9cc0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
9cd0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9ce0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
9cf0: 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 5, COLNAME_N
9d00: 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22  AME, "on_update"
9d10: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9d20: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9d30: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9d40: 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 6, COLNAME_NA
9d50: 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c  ME, "on_delete",
9d60: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9d70: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9d80: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9d90: 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 7, COLNAME_NAM
9da0: 45 2c 20 22 6d 61 74 63 68 22 2c 20 53 51 4c 49  E, "match", SQLI
9db0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9dc0: 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a      while(pFK){.
9dd0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b            int j;
9de0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a  .          for(j
9df0: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
9e00: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
9e10: 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d 20     char *zCol = 
9e20: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f  pFK->aCol[j].zCo
9e30: 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  l;.            c
9e40: 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d  har *zOnDelete =
9e50: 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e   (char *)actionN
9e60: 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e  ame(pFK->aAction
9e70: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [0]);.          
9e80: 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61 74    char *zOnUpdat
9e90: 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69  e = (char *)acti
9ea0: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
9eb0: 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20  ion[1]);.       
9ec0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9ed0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
9ee0: 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20  eger, i, 1);.   
9ef0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9f00: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9f10: 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29 3b  _Integer, j, 2);
9f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
9f30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
9f40: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
9f50: 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c   3, 0, pFK->zTo,
9f60: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
9f70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9f80: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
9f90: 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20  , 0, 4, 0,.     
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fb0: 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61           pTab->a
9fc0: 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  Col[pFK->aCol[j]
9fd0: 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30  .iFrom].zName, 0
9fe0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
9ff0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
a000: 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74  (v, zCol ? OP_St
a010: 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c  ring8 : OP_Null,
a020: 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20   0, 5, 0, zCol, 
a030: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
a040: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a050: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
a060: 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70 64   0, 6, 0, zOnUpd
a070: 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ate, 0);.       
a080: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a090: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
a0a0: 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20 7a  ing8, 0, 7, 0, z
a0b0: 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20 20  OnDelete, 0);.  
a0c0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a0d0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
a0e0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 38 2c  P_String8, 0, 8,
a0f0: 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a   0, "NONE", 0);.
a100: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a110: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
a120: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
a130: 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 8);.          
a140: 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b  }.          ++i;
a150: 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d  .          pFK =
a160: 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b   pFK->pNextFrom;
a170: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
a180: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
a190: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
a1a0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
a1b0: 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a  FOREIGN_KEY) */.
a1c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a1d0: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
a1e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a1f0: 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 69  OMIT_TRIGGER.  i
a200: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
a210: 70 28 7a 4c 65 66 74 2c 20 22 66 6f 72 65 69 67  p(zLeft, "foreig
a220: 6e 5f 6b 65 79 5f 63 68 65 63 6b 22 29 3d 3d 30  n_key_check")==0
a230: 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46   ){.    FKey *pF
a240: 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
a250: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
a260: 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
a270: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
a280: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69 6c           /* Chil
a290: 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 20  d table contain 
a2a0: 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65 79  "REFERENCES" key
a2b0: 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62 6c  word */.    Tabl
a2c0: 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20 20  e *pParent;     
a2d0: 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61 62     /* Parent tab
a2e0: 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20 70 6f  le that child po
a2f0: 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20 49  ints to */.    I
a300: 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20  ndex *pIdx;     
a310: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
a320: 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62  n the parent tab
a330: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  le */.    int i;
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a350: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
a360: 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 6e  :  Foreign key n
a370: 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20 2a  umber for pTab *
a380: 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20 20  /.    int j;    
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a3a0: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
a3b0: 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72 65  ield of the fore
a3c0: 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20 48  ign key */.    H
a3d0: 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20 20  ashElem *k;     
a3e0: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
a3f0: 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61 62  unter:  Next tab
a400: 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a  le in schema */.
a410: 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20 20      int x;      
a420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65             /* re
a430: 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a 2f  sult variable */
a440: 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
a450: 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 33  lt;         /* 3
a460: 20 72 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   registers to ho
a470: 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77 20  ld a result row 
a480: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b 65  */.    int regKe
a490: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  y;            /*
a4a0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f 6c   Register to hol
a4b0: 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b 69  d key for checki
a4c0: 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20 20  ng the FK */.   
a4d0: 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20 20   int regRow;    
a4e0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
a4f0: 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72  ters to hold a r
a500: 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f 0a  ow from pTab */.
a510: 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70 3b      int addrTop;
a520: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
a530: 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65 63  p of a loop chec
a540: 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79  king foreign key
a550: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  s */.    int add
a560: 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  rOk;            
a570: 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66 20  /* Jump here if 
a580: 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a 2f  the key is OK */
a590: 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 73  .    int *aiCols
a5a0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63  ;           /* c
a5b0: 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20 63  hild to parent c
a5c0: 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a 2f  olumn mapping */
a5d0: 0a 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ..    if( sqlite
a5e0: 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72  3ReadSchema(pPar
a5f0: 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  se) ) goto pragm
a600: 61 5f 6f 75 74 3b 0a 20 20 20 20 72 65 67 52 65  a_out;.    regRe
a610: 73 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e  sult = pParse->n
a620: 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73  Mem+1;.    pPars
a630: 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20  e->nMem += 4;.  
a640: 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61    regKey = ++pPa
a650: 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72  rse->nMem;.    r
a660: 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65  egRow = ++pParse
a670: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20  ->nMem;.    v = 
a680: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
a690: 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69  Parse);.    sqli
a6a0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
a6b0: 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c  s(v, 4);.    sql
a6c0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a6d0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
a6e0: 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20  _NAME, "table", 
a6f0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
a700: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
a710: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
a720: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72  COLNAME_NAME, "r
a730: 6f 77 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  owid", SQLITE_ST
a740: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
a750: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
a760: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
a770: 41 4d 45 2c 20 22 70 61 72 65 6e 74 22 2c 20 53  AME, "parent", S
a780: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
a790: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a7a0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
a7b0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b  OLNAME_NAME, "fk
a7c0: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
a7d0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
a7e0: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
a7f0: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
a800: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
a810: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b  hFirst(&db->aDb[
a820: 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62  iDb].pSchema->tb
a830: 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c  lHash);.    whil
a840: 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66  e( k ){.      if
a850: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
a860: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
a870: 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50  e3LocateTable(pP
a880: 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c  arse, 0, zRight,
a890: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b   zDb);.        k
a8a0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
a8b0: 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  e{.        pTab 
a8c0: 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65  = (Table*)sqlite
a8d0: 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20  HashData(k);.   
a8e0: 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48       k = sqliteH
a8f0: 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20  ashNext(k);.    
a900: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54    }.      if( pT
a910: 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70  ab==0 || pTab->p
a920: 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  FKey==0 ) contin
a930: 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
a940: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
a950: 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e  e, iDb, pTab->tn
a960: 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  um, 0, pTab->zNa
a970: 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  me);.      if( p
a980: 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77  Tab->nCol+regRow
a990: 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20  >pParse->nMem ) 
a9a0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pParse->nMem = p
a9b0: 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52  Tab->nCol + regR
a9c0: 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ow;.      sqlite
a9d0: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
a9e0: 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c  e, 0, iDb, pTab,
a9f0: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
aa00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aa10: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
aa20: 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75  ing8, 0, regResu
aa30: 6c 74 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  lt, 0, pTab->zNa
aa40: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 50 34 5f 54              P4_T
aa60: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
aa70: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
aa80: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
aa90: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
aaa0: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
aab0: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
aac0: 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70  te3LocateTable(p
aad0: 50 61 72 73 65 2c 20 30 2c 20 70 46 4b 2d 3e 7a  Parse, 0, pFK->z
aae0: 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20  To, zDb);.      
aaf0: 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d 3d 30    if( pParent==0
ab00: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
ab10: 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20    pIdx = 0;.    
ab20: 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65      sqlite3Table
ab30: 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62  Lock(pParse, iDb
ab40: 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c  , pParent->tnum,
ab50: 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e 7a 4e 61   0, pParent->zNa
ab60: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 78 20 3d  me);.        x =
ab70: 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
ab80: 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70 50  Index(pParse, pP
ab90: 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64  arent, pFK, &pId
aba0: 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69  x, 0);.        i
abb0: 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20  f( x==0 ){.     
abc0: 20 20 20 20 20 69 66 28 20 70 49 64 78 3d 3d 30       if( pIdx==0
abd0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
abe0: 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
abf0: 28 70 50 61 72 73 65 2c 20 69 2c 20 69 44 62 2c  (pParse, i, iDb,
ac00: 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f 4f 70 65   pParent, OP_Ope
ac10: 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20  nRead);.        
ac20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
ac30: 20 20 20 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b       KeyInfo *pK
ac40: 65 79 20 3d 20 73 71 6c 69 74 65 33 49 6e 64 65  ey = sqlite3Inde
ac50: 78 4b 65 79 69 6e 66 6f 28 70 50 61 72 73 65 2c  xKeyinfo(pParse,
ac60: 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20   pIdx);.        
ac70: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ac80: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e  ddOp3(v, OP_Open
ac90: 52 65 61 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74  Read, i, pIdx->t
aca0: 6e 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  num, iDb);.     
acb0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
acc0: 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31  beChangeP4(v, -1
acd0: 2c 20 28 63 68 61 72 2a 29 70 4b 65 79 2c 20 50  , (char*)pKey, P
ace0: 34 5f 4b 45 59 49 4e 46 4f 5f 48 41 4e 44 4f 46  4_KEYINFO_HANDOF
acf0: 46 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  F);.          }.
ad00: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
ad10: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a           k = 0;.
ad20: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
ad30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
ad40: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b   }.      if( pFK
ad50: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
ad60: 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62  if( pParse->nTab
ad70: 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61  <i ) pParse->nTa
ad80: 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64  b = i;.      add
ad90: 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64  rTop = sqlite3Vd
ada0: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52  beAddOp1(v, OP_R
adb0: 65 77 69 6e 64 2c 20 30 29 3b 0a 20 20 20 20 20  ewind, 0);.     
adc0: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
add0: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
ade0: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
adf0: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
ae00: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
ae10: 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70  te3LocateTable(p
ae20: 50 61 72 73 65 2c 20 30 2c 20 70 46 4b 2d 3e 7a  Parse, 0, pFK->z
ae30: 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20  To, zDb);.      
ae40: 20 20 61 73 73 65 72 74 28 20 70 50 61 72 65 6e    assert( pParen
ae50: 74 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  t!=0 );.        
ae60: 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  pIdx = 0;.      
ae70: 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20    aiCols = 0;.  
ae80: 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65        x = sqlite
ae90: 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70  3FkLocateIndex(p
aea0: 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20  Parse, pParent, 
aeb0: 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43  pFK, &pIdx, &aiC
aec0: 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ols);.        as
aed0: 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20  sert( x==0 );.  
aee0: 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73        addrOk = s
aef0: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
af00: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
af10: 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20  if( pIdx==0 ){. 
af20: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 4b 65           int iKe
af30: 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d  y = pFK->aCol[0]
af40: 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  .iFrom;.        
af50: 20 20 61 73 73 65 72 74 28 20 69 4b 65 79 3e 3d    assert( iKey>=
af60: 30 20 26 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e  0 && iKey<pTab->
af70: 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  nCol );.        
af80: 20 20 69 66 28 20 69 4b 65 79 21 3d 70 54 61 62    if( iKey!=pTab
af90: 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20 20 20  ->iPKey ){.     
afa0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
afb0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
afc0: 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20  olumn, 0, iKey, 
afd0: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
afe0: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c 75       sqlite3Colu
aff0: 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20 70 54 61  mnDefault(v, pTa
b000: 62 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29  b, iKey, regRow)
b010: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
b020: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
b030: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65  v, OP_IsNull, re
b040: 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  gRow, addrOk);. 
b050: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b060: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b070: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c 20 72 65  OP_MustBeInt, re
b080: 67 52 6f 77 2c 0a 20 20 20 20 20 20 20 20 20 20  gRow,.          
b090: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b0a0: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 2b 33  CurrentAddr(v)+3
b0b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
b0c0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
b0d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b0e0: 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30  2(v, OP_Rowid, 0
b0f0: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
b100: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
b110: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b120: 70 33 28 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73  p3(v, OP_NotExis
b130: 74 73 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f 77  ts, i, 0, regRow
b140: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
b150: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b160: 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 61 64  , OP_Goto, 0, ad
b170: 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  drOk);.         
b180: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
b190: 48 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33 56  Here(v, sqlite3V
b1a0: 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76  dbeCurrentAddr(v
b1b0: 29 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  )-2);.        }e
b1c0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
b1d0: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e  or(j=0; j<pFK->n
b1e0: 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  Col; j++){.     
b1f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
b200: 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
b210: 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20  fTable(v, pTab, 
b220: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
b230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
b240: 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a  iCols ? aiCols[j
b250: 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d  ] : pFK->aCol[0]
b260: 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a  .iFrom, regRow+j
b270: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
b280: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b290: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72  (v, OP_IsNull, r
b2a0: 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29  egRow+j, addrOk)
b2b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
b2c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b2d0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
b2e0: 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67 52  MakeRecord, regR
b2f0: 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72  ow, pFK->nCol, r
b300: 65 67 4b 65 79 29 3b 0a 20 20 20 20 20 20 20 20  egKey);.        
b310: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
b320: 6e 67 65 50 34 28 76 2c 20 2d 31 2c 0a 20 20 20  ngeP4(v, -1,.   
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b340: 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
b350: 6e 69 74 79 53 74 72 28 76 2c 70 49 64 78 29 2c  nityStr(v,pIdx),
b360: 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a   P4_TRANSIENT);.
b370: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b380: 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
b390: 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61  , OP_Found, i, a
b3a0: 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30  ddrOk, regKey, 0
b3b0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
b3c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b3d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77  AddOp2(v, OP_Row
b3e0: 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  id, 0, regResult
b3f0: 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +1);.        sql
b400: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
b410: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
b420: 20 72 65 67 52 65 73 75 6c 74 2b 32 2c 20 30 2c   regResult+2, 0,
b430: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
b440: 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b 2d              pFK-
b450: 3e 7a 54 6f 2c 20 50 34 5f 54 52 41 4e 53 49 45  >zTo, P4_TRANSIE
b460: 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  NT);.        sql
b470: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b480: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d  , OP_Integer, i-
b490: 31 2c 20 72 65 67 52 65 73 75 6c 74 2b 33 29 3b  1, regResult+3);
b4a0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b4b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
b4c0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65 67 52  _ResultRow, regR
b4d0: 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20  esult, 4);.     
b4e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
b4f0: 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61 64  solveLabel(v, ad
b500: 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 73  drOk);.        s
b510: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
b520: 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20   aiCols);.      
b530: 7d 0a 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: 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54 6f 70  Next, 0, addrTop
b560: 2b 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  +1);.      sqlit
b570: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
b580: 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20 20 20 20  , addrTop);.    
b590: 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  }.  }else.#endif
b5a0: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
b5b0: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
b5c0: 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21  ) */.#endif /* !
b5d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
b5e0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
b5f0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45   */..#ifndef NDE
b600: 42 55 47 0a 20 20 69 66 28 20 73 71 6c 69 74 65  BUG.  if( sqlite
b610: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
b620: 22 70 61 72 73 65 72 5f 74 72 61 63 65 22 29 3d  "parser_trace")=
b630: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 52  =0 ){.    if( zR
b640: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
b650: 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  ( sqlite3GetBool
b660: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29  ean(zRight, 0) )
b670: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
b680: 33 50 61 72 73 65 72 54 72 61 63 65 28 73 74 64  3ParserTrace(std
b690: 65 72 72 2c 20 22 70 61 72 73 65 72 3a 20 22 29  err, "parser: ")
b6a0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
b6b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
b6c0: 72 73 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b  rserTrace(0, 0);
b6d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
b6e0: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
b6f0: 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68   /* Reinstall th
b700: 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20  e LIKE and GLOB 
b710: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
b720: 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a  variant of LIKE.
b730: 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62    ** used will b
b740: 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  e case sensitive
b750: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
b760: 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20  g on the RHS..  
b770: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
b780: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
b790: 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c  case_sensitive_l
b7a0: 69 6b 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ike")==0 ){.    
b7b0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
b7c0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69 73      sqlite3Regis
b7d0: 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
b7e0: 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74 42  (db, sqlite3GetB
b7f0: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
b800: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ));.    }.  }els
b810: 65 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  e..#ifndef SQLIT
b820: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
b830: 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65  K_ERROR_MAX.# de
b840: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  fine SQLITE_INTE
b850: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
b860: 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66  R_MAX 100.#endif
b870: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b880: 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
b890: 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d  CHECK.  /* Pragm
b8a0: 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20  a "quick_check" 
b8b0: 69 73 20 61 6e 20 65 78 70 65 72 69 6d 65 6e 74  is an experiment
b8c0: 61 6c 20 72 65 64 75 63 65 64 20 76 65 72 73 69  al reduced versi
b8d0: 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65  on of .  ** inte
b8e0: 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69  grity_check desi
b8f0: 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d  gned to detect m
b900: 6f 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ost database cor
b910: 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74  ruption.  ** wit
b920: 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65  hout most of the
b930: 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20 66   overhead of a f
b940: 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68  ull integrity-ch
b950: 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  eck..  */.  if( 
b960: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
b970: 4c 65 66 74 2c 20 22 69 6e 74 65 67 72 69 74 79  Left, "integrity
b980: 5f 63 68 65 63 6b 22 29 3d 3d 30 0a 20 20 20 7c  _check")==0.   |
b990: 7c 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  | sqlite3StrICmp
b9a0: 28 7a 4c 65 66 74 2c 20 22 71 75 69 63 6b 5f 63  (zLeft, "quick_c
b9b0: 68 65 63 6b 22 29 3d 3d 30 20 0a 20 20 29 7b 0a  heck")==0 .  ){.
b9c0: 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64      int i, j, ad
b9d0: 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20  dr, mxErr;..    
b9e0: 2f 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70 70  /* Code that app
b9f0: 65 61 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  ears at the end 
ba00: 6f 66 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  of the integrity
ba10: 20 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65   check.  If no e
ba20: 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73  rror.    ** mess
ba30: 61 67 65 73 20 68 61 76 65 20 62 65 65 6e 20 67  ages have been g
ba40: 65 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74  enerated, output
ba50: 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20   OK.  Otherwise 
ba60: 6f 75 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a  output the.    *
ba70: 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a  * error message.
ba80: 20 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69      */.    stati
ba90: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
baa0: 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b  st endCode[] = {
bab0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 41 64 64 49  .      { OP_AddI
bac0: 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30 2c 20 20  mm,      1, 0,  
bad0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
bae0: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
baf0: 49 66 4e 65 67 2c 20 20 20 20 20 20 20 31 2c 20  IfNeg,       1, 
bb00: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
bb10: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 1 */.      {
bb20: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20   OP_String8,    
bb30: 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d   0, 3,        0}
bb40: 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20  ,    /* 2 */.   
bb50: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
bb60: 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20 20 20  w,   3, 1,      
bb70: 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20    0},.    };..  
bb80: 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d 20    int isQuick = 
bb90: 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28  (sqlite3Tolower(
bba0: 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b  zLeft[0])=='q');
bbb0: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
bbc0: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77  PRAGMA command w
bbd0: 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  as of the form "
bbe0: 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65  PRAGMA <db>.inte
bbf0: 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20  grity_check",.  
bc00: 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69 73    ** then iDb is
bc10: 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64 65   set to the inde
bc20: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
bc30: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
bc40: 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20  <db>..    ** In 
bc50: 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 69  this case, the i
bc60: 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61 74 61  ntegrity of data
bc70: 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69 73  base iDb only is
bc80: 20 76 65 72 69 66 69 65 64 20 62 79 0a 20 20 20   verified by.   
bc90: 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72 65   ** the VDBE cre
bca0: 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20  ated below..    
bcb0: 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 77  **.    ** Otherw
bcc0: 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d  ise, if the comm
bcd0: 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20 22  and was simply "
bce0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
bcf0: 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20 20  _check" (or.    
bd00: 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63 6b  ** "PRAGMA quick
bd10: 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20 69  _check"), then i
bd20: 44 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e 20  Db is set to 0. 
bd30: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65  In this case, se
bd40: 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20  t iDb.    ** to 
bd50: 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64 69  -1 here, to indi
bd60: 63 61 74 65 20 74 68 61 74 20 74 68 65 20 56 44  cate that the VD
bd70: 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66 79  BE should verify
bd80: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a 20   the integrity. 
bd90: 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74     ** of all att
bda0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
bdb0: 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
bdc0: 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61   iDb>=0 );.    a
bdd0: 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c  ssert( iDb==0 ||
bde0: 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20   pId2->z );.    
bdf0: 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29  if( pId2->z==0 )
be00: 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20   iDb = -1;..    
be10: 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68  /* Initialize th
be20: 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 2a  e VDBE program *
be30: 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  /.    if( sqlite
be40: 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72  3ReadSchema(pPar
be50: 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  se) ) goto pragm
be60: 61 5f 6f 75 74 3b 0a 20 20 20 20 70 50 61 72 73  a_out;.    pPars
be70: 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20  e->nMem = 6;.   
be80: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
be90: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
bea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
beb0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
bec0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 74  LNAME_NAME, "int
bed0: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 20 53  egrity_check", S
bee0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a  QLITE_STATIC);..
bef0: 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 6d      /* Set the m
bf00: 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75  aximum error cou
bf10: 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20  nt */.    mxErr 
bf20: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  = SQLITE_INTEGRI
bf30: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
bf40: 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  AX;.    if( zRig
bf50: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
bf60: 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67  te3GetInt32(zRig
bf70: 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20 20  ht, &mxErr);.   
bf80: 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30 20     if( mxErr<=0 
bf90: 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72 72  ){.        mxErr
bfa0: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
bfb0: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
bfc0: 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  MAX;.      }.   
bfd0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
bfe0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
bff0: 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20 31  nteger, mxErr, 1
c000: 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f  );  /* reg[1] ho
c010: 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74 20  lds errors left 
c020: 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e  */..    /* Do an
c030: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
c040: 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61 73   on each databas
c050: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f  e file */.    fo
c060: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
c070: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61  ; i++){.      Ha
c080: 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20  shElem *x;.     
c090: 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20   Hash *pTbls;.  
c0a0: 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b      int cnt = 0;
c0b0: 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49 54  ..      if( OMIT
c0c0: 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31 20  _TEMPDB && i==1 
c0d0: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
c0e0: 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26 20    if( iDb>=0 && 
c0f0: 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e 75  i!=iDb ) continu
c100: 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e;..      sqlite
c110: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
c120: 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20 20  a(pParse, i);.  
c130: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
c140: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
c150: 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a  OP_IfPos, 1); /*
c160: 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66 20   Halt if out of 
c170: 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20  errors */.      
c180: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c190: 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  2(v, OP_Halt, 0,
c1a0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
c1b0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
c1c0: 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20  , addr);..      
c1d0: 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69  /* Do an integri
c1e0: 74 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20  ty check of the 
c1f0: 42 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a  B-Tree.      **.
c200: 20 20 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62        ** Begin b
c210: 79 20 66 69 6c 6c 69 6e 67 20 72 65 67 69 73 74  y filling regist
c220: 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69  ers 2, 3, ... wi
c230: 74 68 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  th the root page
c240: 73 20 6e 75 6d 62 65 72 73 0a 20 20 20 20 20 20  s numbers.      
c250: 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65  ** for all table
c260: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e  s and indices in
c270: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20   the database.. 
c280: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
c290: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
c2a0: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
c2b0: 20 69 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20   i, 0) );.      
c2c0: 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62  pTbls = &db->aDb
c2d0: 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c  [i].pSchema->tbl
c2e0: 48 61 73 68 3b 0a 20 20 20 20 20 20 66 6f 72 28  Hash;.      for(
c2f0: 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  x=sqliteHashFirs
c300: 74 28 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73  t(pTbls); x; x=s
c310: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29  qliteHashNext(x)
c320: 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65  ){.        Table
c330: 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
c340: 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20  ashData(x);.    
c350: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
c360: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
c370: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c380: 5f 49 6e 74 65 67 65 72 2c 20 70 54 61 62 2d 3e  _Integer, pTab->
c390: 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20  tnum, 2+cnt);.  
c3a0: 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
c3b0: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
c3c0: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
c3d0: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
c3e0: 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  xt){.          s
c3f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c400: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c410: 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e  pIdx->tnum, 2+cn
c420: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e  t);.          cn
c430: 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
c440: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
c450: 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66 66 69   Make sure suffi
c460: 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  cient number of 
c470: 72 65 67 69 73 74 65 72 73 20 68 61 76 65 20 62  registers have b
c480: 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  een allocated */
c490: 0a 20 20 20 20 20 20 69 66 28 20 70 50 61 72 73  .      if( pPars
c4a0: 65 2d 3e 6e 4d 65 6d 20 3c 20 63 6e 74 2b 34 20  e->nMem < cnt+4 
c4b0: 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73  ){.        pPars
c4c0: 65 2d 3e 6e 4d 65 6d 20 3d 20 63 6e 74 2b 34 3b  e->nMem = cnt+4;
c4d0: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
c4e0: 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65  /* Do the b-tree
c4f0: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
c500: 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  s */.      sqlit
c510: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
c520: 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20  OP_IntegrityCk, 
c530: 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20 20  2, cnt, 1);.    
c540: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
c550: 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69 29 3b  ngeP5(v, (u8)i);
c560: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
c570: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
c580: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32 29  v, OP_IsNull, 2)
c590: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c5a0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c5b0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
c5c0: 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  ,.         sqlit
c5d0: 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2a  e3MPrintf(db, "*
c5e0: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 25  ** in database %
c5f0: 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44  s ***\n", db->aD
c600: 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20  b[i].zName),.   
c610: 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d 49 43        P4_DYNAMIC
c620: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c630: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c640: 5f 4d 6f 76 65 2c 20 32 2c 20 34 29 3b 0a 20 20  _Move, 2, 4);.  
c650: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c660: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
c670: 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20  at, 4, 3, 2);.  
c680: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c690: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
c6a0: 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20  ltRow, 2, 1);.  
c6b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
c6c0: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
c6d0: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ;..      /* Make
c6e0: 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e   sure all the in
c6f0: 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72  dices are constr
c700: 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e  ucted correctly.
c710: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
c720: 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
c730: 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20  First(pTbls); x 
c740: 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73  && !isQuick; x=s
c750: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29  qliteHashNext(x)
c760: 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65  ){.        Table
c770: 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
c780: 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20  ashData(x);.    
c790: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
c7a0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f  .        int loo
c7b0: 70 54 6f 70 3b 0a 0a 20 20 20 20 20 20 20 20 69  pTop;..        i
c7c0: 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d  f( pTab->pIndex=
c7d0: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
c7e0: 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
c7f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
c800: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
c810: 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74    /* Stop if out
c820: 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20   of errors */.  
c830: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c840: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61  eAddOp2(v, OP_Ha
c850: 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  lt, 0, 0);.     
c860: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
c870: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
c880: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
c890: 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
c8a0: 63 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62  ces(pParse, pTab
c8b0: 2c 20 31 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  , 1, OP_OpenRead
c8c0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c8d0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c8e0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 32  OP_Integer, 0, 2
c8f0: 29 3b 20 20 2f 2a 20 72 65 67 28 32 29 20 77 69  );  /* reg(2) wi
c900: 6c 6c 20 63 6f 75 6e 74 20 65 6e 74 72 69 65 73  ll count entries
c910: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70   */.        loop
c920: 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Top = sqlite3Vdb
c930: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
c940: 77 69 6e 64 2c 20 31 2c 20 30 29 3b 0a 20 20 20  wind, 1, 0);.   
c950: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c960: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
c970: 49 6d 6d 2c 20 32 2c 20 31 29 3b 20 20 20 2f 2a  Imm, 2, 1);   /*
c980: 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79   increment entry
c990: 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20   count */.      
c9a0: 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
c9b0: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
c9c0: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
c9d0: 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
c9e0: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 3b 0a        int jmp2;.
c9f0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 31            int r1
ca00: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 74 61 74  ;.          stat
ca10: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
ca20: 69 73 74 20 69 64 78 45 72 72 5b 5d 20 3d 20 7b  ist idxErr[] = {
ca30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
ca40: 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31  P_AddImm,      1
ca50: 2c 20 2d 31 2c 20 20 30 7d 2c 0a 20 20 20 20 20  , -1,  0},.     
ca60: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69         { OP_Stri
ca70: 6e 67 38 2c 20 20 20 20 20 30 2c 20 20 33 2c 20  ng8,     0,  3, 
ca80: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
caa0: 5f 52 6f 77 69 64 2c 20 20 20 20 20 20 20 31 2c  _Rowid,       1,
cab0: 20 20 34 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20    4,  0},.      
cac0: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
cad0: 67 38 2c 20 20 20 20 20 30 2c 20 20 35 2c 20 20  g8,     0,  5,  
cae0: 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20  0},    /* 3 */. 
caf0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
cb00: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
cb10: 20 36 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34   6,  0},    /* 4
cb20: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
cb30: 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20  { OP_Concat,    
cb40: 20 20 34 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20    4,  3,  3},.  
cb50: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43            { OP_C
cb60: 6f 6e 63 61 74 2c 20 20 20 20 20 20 35 2c 20 20  oncat,      5,  
cb70: 33 2c 20 20 33 7d 2c 0a 20 20 20 20 20 20 20 20  3,  3},.        
cb80: 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c      { OP_Concat,
cb90: 20 20 20 20 20 20 36 2c 20 20 33 2c 20 20 33 7d        6,  3,  3}
cba0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  ,.            { 
cbb0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
cbc0: 33 2c 20 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20  3,  1,  0},.    
cbd0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50          { OP_IfP
cbe0: 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 20 30 2c  os,       1,  0,
cbf0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 39 20 2a 2f    0},    /* 9 */
cc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
cc10: 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20 30  P_Halt,        0
cc20: 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20  ,  0,  0},.     
cc30: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20       };.        
cc40: 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65    r1 = sqlite3Ge
cc50: 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 70  nerateIndexKey(p
cc60: 50 61 72 73 65 2c 20 70 49 64 78 2c 20 31 2c 20  Parse, pIdx, 1, 
cc70: 33 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 0);.         
cc80: 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56   jmp2 = sqlite3V
cc90: 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
cca0: 4f 50 5f 46 6f 75 6e 64 2c 20 6a 2b 32 2c 20 30  OP_Found, j+2, 0
ccb0: 2c 20 72 31 2c 20 70 49 64 78 2d 3e 6e 43 6f 6c  , r1, pIdx->nCol
ccc0: 75 6d 6e 2b 31 29 3b 0a 20 20 20 20 20 20 20 20  umn+1);.        
ccd0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
cce0: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
ccf0: 20 41 72 72 61 79 53 69 7a 65 28 69 64 78 45 72   ArraySize(idxEr
cd00: 72 29 2c 20 69 64 78 45 72 72 29 3b 0a 20 20 20  r), idxErr);.   
cd10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cd20: 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61 64  beChangeP4(v, ad
cd30: 64 72 2b 31 2c 20 22 72 6f 77 69 64 20 22 2c 20  dr+1, "rowid ", 
cd40: 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
cd50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cd60: 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64  eChangeP4(v, add
cd70: 72 2b 33 2c 20 22 20 6d 69 73 73 69 6e 67 20 66  r+3, " missing f
cd80: 72 6f 6d 20 69 6e 64 65 78 20 22 2c 20 50 34 5f  rom index ", P4_
cd90: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
cda0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
cdb0: 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 34  angeP4(v, addr+4
cdc0: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50  , pIdx->zName, P
cdd0: 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  4_TRANSIENT);.  
cde0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cdf0: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
ce00: 64 64 72 2b 39 29 3b 0a 20 20 20 20 20 20 20 20  ddr+9);.        
ce10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
ce20: 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a  pHere(v, jmp2);.
ce30: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ce40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ce50: 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20  Op2(v, OP_Next, 
ce60: 31 2c 20 6c 6f 6f 70 54 6f 70 2b 31 29 3b 0a 20  1, loopTop+1);. 
ce70: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ce80: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f  beJumpHere(v, lo
ce90: 6f 70 54 6f 70 29 3b 0a 20 20 20 20 20 20 20 20  opTop);.        
cea0: 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
ceb0: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
cec0: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
ced0: 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
cee0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
cef0: 20 56 64 62 65 4f 70 4c 69 73 74 20 63 6e 74 49   VdbeOpList cntI
cf00: 64 78 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  dx[] = {.       
cf10: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
cf20: 65 72 2c 20 20 20 20 20 20 30 2c 20 20 33 2c 20  er,      0,  3, 
cf30: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   0},.           
cf40: 20 20 7b 20 4f 50 5f 52 65 77 69 6e 64 2c 20 20    { OP_Rewind,  
cf50: 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
cf60: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
cf70: 20 20 20 20 20 20 20 7b 20 4f 50 5f 41 64 64 49         { OP_AddI
cf80: 6d 6d 2c 20 20 20 20 20 20 20 33 2c 20 20 31 2c  mm,       3,  1,
cf90: 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    0},.          
cfa0: 20 20 20 7b 20 4f 50 5f 4e 65 78 74 2c 20 20 20     { OP_Next,   
cfb0: 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d        0,  0,  0}
cfc0: 2c 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20  ,  /* 3 */.     
cfd0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 45 71 2c          { OP_Eq,
cfe0: 20 20 20 20 20 20 20 20 20 20 20 32 2c 20 20 30             2,  0
cff0: 2c 20 20 33 7d 2c 20 20 2f 2a 20 34 20 2a 2f 0a  ,  3},  /* 4 */.
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f               { O
d010: 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 20  P_AddImm,       
d020: 31 2c 20 2d 31 2c 20 20 30 7d 2c 0a 20 20 20 20  1, -1,  0},.    
d030: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74           { OP_St
d040: 72 69 6e 67 38 2c 20 20 20 20 20 20 30 2c 20 20  ring8,      0,  
d050: 32 2c 20 20 30 7d 2c 20 20 2f 2a 20 36 20 2a 2f  2,  0},  /* 6 */
d060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
d070: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20  OP_String8,     
d080: 20 30 2c 20 20 33 2c 20 20 30 7d 2c 20 20 2f 2a   0,  3,  0},  /*
d090: 20 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   7 */.          
d0a0: 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20     { OP_Concat, 
d0b0: 20 20 20 20 20 20 33 2c 20 20 32 2c 20 20 32 7d        3,  2,  2}
d0c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  ,.             {
d0d0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20   OP_ResultRow,  
d0e0: 20 20 32 2c 20 20 31 2c 20 20 30 7d 2c 0a 20 20    2,  1,  0},.  
d0f0: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
d100: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
d110: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
d120: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 0a 20   OP_IfPos, 1);. 
d130: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d140: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d150: 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
d160: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d170: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
d180: 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ddr);.          
d190: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
d1a0: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
d1b0: 72 72 61 79 53 69 7a 65 28 63 6e 74 49 64 78 29  rraySize(cntIdx)
d1c0: 2c 20 63 6e 74 49 64 78 29 3b 0a 20 20 20 20 20  , cntIdx);.     
d1d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d1e0: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
d1f0: 2b 31 2c 20 6a 2b 32 29 3b 0a 20 20 20 20 20 20  +1, j+2);.      
d200: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d210: 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b  hangeP2(v, addr+
d220: 31 2c 20 61 64 64 72 2b 34 29 3b 0a 20 20 20 20  1, addr+4);.    
d230: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d240: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
d250: 72 2b 33 2c 20 6a 2b 32 29 3b 0a 20 20 20 20 20  r+3, j+2);.     
d260: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d270: 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
d280: 2b 33 2c 20 61 64 64 72 2b 32 29 3b 0a 20 20 20  +3, addr+2);.   
d290: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d2a0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
d2b0: 64 72 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 20  dr+4);.         
d2c0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
d2d0: 67 65 50 34 28 76 2c 20 61 64 64 72 2b 36 2c 20  geP4(v, addr+6, 
d2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d2f0: 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23 20 6f        "wrong # o
d300: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
d310: 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29  ex ", P4_STATIC)
d320: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d330: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28  te3VdbeChangeP4(
d340: 76 2c 20 61 64 64 72 2b 37 2c 20 70 49 64 78 2d  v, addr+7, pIdx-
d350: 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53  >zName, P4_TRANS
d360: 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 7d  IENT);.        }
d370: 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a  .      } .    }.
d380: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
d390: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
d3a0: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64  v, ArraySize(end
d3b0: 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64 65 29 3b  Code), endCode);
d3c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d3d0: 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
d3e0: 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73  , -mxErr);.    s
d3f0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
d400: 72 65 28 76 2c 20 61 64 64 72 2b 31 29 3b 0a 20  re(v, addr+1);. 
d410: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
d420: 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 32  angeP4(v, addr+2
d430: 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49  , "ok", P4_STATI
d440: 43 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64  C);.  }else.#end
d450: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
d460: 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
d470: 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  K */..#ifndef SQ
d480: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
d490: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
d4a0: 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a  MA encoding.  **
d4b0: 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69     PRAGMA encodi
d4c0: 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75 74  ng = "utf-8"|"ut
d4d0: 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65 22  f-16"|"utf-16le"
d4e0: 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a 2a  |"utf-16be".  **
d4f0: 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69 72  .  ** In its fir
d500: 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70 72  st form, this pr
d510: 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68 65  agma returns the
d520: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65   encoding of the
d530: 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61 62   main.  ** datab
d540: 61 73 65 2e 20 49 66 20 74 68 65 20 64 61 74 61  ase. If the data
d550: 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69 74  base is not init
d560: 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20 69  ialized, it is i
d570: 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a  nitialized now..
d580: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65    **.  ** The se
d590: 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 69  cond form of thi
d5a0: 73 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e 6f  s pragma is a no
d5b0: 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e 20  -op if the main 
d5c0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20  database file.  
d5d0: 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65 61  ** has not alrea
d5e0: 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  dy been initiali
d5f0: 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  zed. In this cas
d600: 65 20 69 74 20 73 65 74 73 20 74 68 65 20 64 65  e it sets the de
d610: 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f 64  fault.  ** encod
d620: 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ing that will be
d630: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61   used for the ma
d640: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
d650: 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a 20   if a new file. 
d660: 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e 20   ** is created. 
d670: 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d  If an existing m
d680: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
d690: 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68 65  e is opened, the
d6a0: 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75  n the.  ** defau
d6b0: 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  lt text encoding
d6c0: 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e   for the existin
d6d0: 67 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73  g database is us
d6e0: 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  ed..  ** .  ** I
d6f0: 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77 20  n all cases new 
d700: 64 61 74 61 62 61 73 65 73 20 63 72 65 61 74 65  databases create
d710: 64 20 75 73 69 6e 67 20 74 68 65 20 41 54 54 41  d using the ATTA
d720: 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a 20  CH command are. 
d730: 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20 75   ** created to u
d740: 73 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61  se the same defa
d750: 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ult text encodin
d760: 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 61  g as the main da
d770: 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a 20  tabase. If.  ** 
d780: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
d790: 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 69  e has not been i
d7a0: 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f 6f  nitialized and/o
d7b0: 72 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 41  r created when A
d7c0: 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65 78  TTACH.  ** is ex
d7d0: 65 63 75 74 65 64 2c 20 74 68 69 73 20 69 73 20  ecuted, this is 
d7e0: 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20  done before the 
d7f0: 41 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f 6e  ATTACH operation
d800: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74  ..  **.  ** In t
d810: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74  he second form t
d820: 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20  his pragma sets 
d830: 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  the text encodin
d840: 67 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 0a  g to be used in.
d850: 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61 73    ** new databas
d860: 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20  e files created 
d870: 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62  using this datab
d880: 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20 69  ase handle. It i
d890: 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65 66  s only.  ** usef
d8a0: 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69 6d  ul if invoked im
d8b0: 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
d8c0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
d8d0: 65 20 69 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  e i.  */.  if( s
d8e0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
d8f0: 65 66 74 2c 20 22 65 6e 63 6f 64 69 6e 67 22 29  eft, "encoding")
d900: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69  ==0 ){.    stati
d910: 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45  c const struct E
d920: 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63  ncName {.      c
d930: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
d940: 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20    u8 enc;.    } 
d950: 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20  encnames[] = {. 
d960: 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20       { "UTF8",  
d970: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20     SQLITE_UTF8  
d980: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
d990: 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c   "UTF-8",    SQL
d9a0: 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20  ITE_UTF8        
d9b0: 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65  },  /* Must be e
d9c0: 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20  lement [1] */.  
d9d0: 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22      { "UTF-16le"
d9e0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
d9f0: 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
da00: 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20   be element [2] 
da10: 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  */.      { "UTF-
da20: 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16be", SQLITE_UT
da30: 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a  F16BE     },  /*
da40: 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74   Must be element
da50: 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20   [3] */.      { 
da60: 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49  "UTF16le",  SQLI
da70: 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d  TE_UTF16LE     }
da80: 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  ,.      { "UTF16
da90: 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46  be",  SQLITE_UTF
daa0: 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20  16BE     },.    
dab0: 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20    { "UTF-16",   
dac0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
dad0: 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f     }, /* SQLITE_
dae0: 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20  UTF16NATIVE */. 
daf0: 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20       { "UTF16", 
db00: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
db10: 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
db20: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
db30: 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d  /.      { 0, 0 }
db40: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73  .    };.    cons
db50: 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65  t struct EncName
db60: 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20   *pEnc;.    if( 
db70: 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a  !zRight ){    /*
db80: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
db90: 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  g" */.      if( 
dba0: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
dbb0: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
dbc0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
dbd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
dbe0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
dbf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
dc00: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
dc10: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
dc20: 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49  "encoding", SQLI
dc30: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
dc40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
dc50: 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op2(v, OP_String
dc60: 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20  8, 0, 1);.      
dc70: 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
dc80: 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e  [SQLITE_UTF8].en
dc90: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  c==SQLITE_UTF8 )
dca0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
dcb0: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
dcc0: 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51  UTF16LE].enc==SQ
dcd0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
dce0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
dcf0: 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
dd00: 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49  F16BE].enc==SQLI
dd10: 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
dd20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
dd30: 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 65  hangeP4(v, -1, e
dd40: 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72  ncnames[ENC(pPar
dd50: 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20  se->db)].zName, 
dd60: 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
dd70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
dd80: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
dd90: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
dda0: 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20  }else{          
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ddc0: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
ddd0: 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20  g = XXX" */.    
dde0: 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65    /* Only change
ddf0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71   the value of sq
de00: 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20  lite.enc if the 
de10: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
de20: 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  is not.      ** 
de30: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20  initialized. If 
de40: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
de50: 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65  e exists, the ne
de60: 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c  w sqlite.enc val
de70: 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  ue.      ** will
de80: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
de90: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
dea0: 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20  is next loaded. 
deb0: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20  If it does not. 
dec0: 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20       ** already 
ded0: 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20  exists, it will 
dee0: 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  be created to us
def0: 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69  e the new encodi
df00: 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ng value..      
df10: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20  */.      if( .  
df20: 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f        !(DbHasPro
df30: 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f  perty(db, 0, DB_
df40: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c  SchemaLoaded)) |
df50: 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73  | .        DbHas
df60: 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
df70: 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20  DB_Empty) .     
df80: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
df90: 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30  pEnc=&encnames[0
dfa0: 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20  ]; pEnc->zName; 
dfb0: 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20  pEnc++){.       
dfc0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
dfd0: 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
dfe0: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b   pEnc->zName) ){
dff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 45 4e 43  .            ENC
e000: 28 70 50 61 72 73 65 2d 3e 64 62 29 20 3d 20 70  (pParse->db) = p
e010: 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d  Enc->enc ? pEnc-
e020: 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55 54  >enc : SQLITE_UT
e030: 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 20  F16NATIVE;.     
e040: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
e050: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e060: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
e070: 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a  !pEnc->zName ){.
e080: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e090: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
e0a0: 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 65  , "unsupported e
e0b0: 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52  ncoding: %s", zR
e0c0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  ight);.        }
e0d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
e0e0: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
e0f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
e100: 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  16 */..#ifndef S
e110: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
e120: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
e130: 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  S.  /*.  **   PR
e140: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
e150: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20  schema_version. 
e160: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
e170: 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76  tabase.]schema_v
e180: 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65  ersion = <intege
e190: 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
e1a0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
e1b0: 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20  ]user_version.  
e1c0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
e1d0: 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73  abase.]user_vers
e1e0: 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  ion = <integer>.
e1f0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72    **.  ** The pr
e200: 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76 65  agma's schema_ve
e210: 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76  rsion and user_v
e220: 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64 20  ersion are used 
e230: 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20 20  to set or get.  
e240: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
e250: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
e260: 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72 73  on and user-vers
e270: 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
e280: 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65  y. Both.  ** the
e290: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
e2a0: 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65 72  and the user-ver
e2b0: 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74 20  sion are 32-bit 
e2c0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 0a  signed integers.
e2d0: 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
e2e0: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
e2f0: 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er..  **.  ** Th
e300: 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
e310: 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20  is usually only 
e320: 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74 65  manipulated inte
e330: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
e340: 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63  . It.  ** is inc
e350: 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c 69  remented by SQLi
e360: 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  te whenever the 
e370: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
e380: 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79 0a  is modified (by.
e390: 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f 72    ** creating or
e3a0: 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62 6c   dropping a tabl
e3b0: 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68 65  e or index). The
e3c0: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
e3d0: 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  is used by.  ** 
e3e0: 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d 65  SQLite each time
e3f0: 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63   a query is exec
e400: 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  uted to ensure t
e410: 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  hat the internal
e420: 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74   cache.  ** of t
e430: 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20 77  he schema used w
e440: 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68  hen compiling th
e450: 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63  e SQL query matc
e460: 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f  hes the schema o
e470: 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
e480: 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63  ase against whic
e490: 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  h the compiled q
e4a0: 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79  uery is actually
e4b0: 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20   executed..  ** 
e4c0: 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73 20  Subverting this 
e4d0: 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73 69  mechanism by usi
e4e0: 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d  ng "PRAGMA schem
e4f0: 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f  a_version" to mo
e500: 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73 63  dify.  ** the sc
e510: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73 20  hema-version is 
e520: 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67  potentially dang
e530: 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c 65  erous and may le
e540: 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20  ad to program.  
e550: 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64 61  ** crashes or da
e560: 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
e570: 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75 74  n. Use with caut
e580: 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ion!.  **.  ** T
e590: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
e5a0: 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
e5b0: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
e5c0: 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65 64  . It may be used
e5d0: 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61   by.  ** applica
e5e0: 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70 75  tions for any pu
e5f0: 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 69 66  rpose..  */.  if
e600: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
e610: 28 7a 4c 65 66 74 2c 20 22 73 63 68 65 6d 61 5f  (zLeft, "schema_
e620: 76 65 72 73 69 6f 6e 22 29 3d 3d 30 20 0a 20 20  version")==0 .  
e630: 20 7c 7c 20 73 71 6c 69 74 65 33 53 74 72 49 43   || sqlite3StrIC
e640: 6d 70 28 7a 4c 65 66 74 2c 20 22 75 73 65 72 5f  mp(zLeft, "user_
e650: 76 65 72 73 69 6f 6e 22 29 3d 3d 30 20 0a 20 20  version")==0 .  
e660: 20 7c 7c 20 73 71 6c 69 74 65 33 53 74 72 49 43   || sqlite3StrIC
e670: 6d 70 28 7a 4c 65 66 74 2c 20 22 66 72 65 65 6c  mp(zLeft, "freel
e680: 69 73 74 5f 63 6f 75 6e 74 22 29 3d 3d 30 20 0a  ist_count")==0 .
e690: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f    ){.    int iCo
e6a0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 43 6f 6f 6b 69  okie;   /* Cooki
e6b0: 65 20 69 6e 64 65 78 2e 20 31 20 66 6f 72 20 73  e index. 1 for s
e6c0: 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 2c 20 36 20  chema-cookie, 6 
e6d0: 66 6f 72 20 75 73 65 72 2d 63 6f 6f 6b 69 65 2e  for user-cookie.
e6e0: 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
e6f0: 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20  dbeUsesBtree(v, 
e700: 69 44 62 29 3b 0a 20 20 20 20 73 77 69 74 63 68  iDb);.    switch
e710: 28 20 7a 4c 65 66 74 5b 30 5d 20 29 7b 0a 20 20  ( zLeft[0] ){.  
e720: 20 20 20 20 63 61 73 65 20 27 66 27 3a 20 63 61      case 'f': ca
e730: 73 65 20 27 46 27 3a 0a 20 20 20 20 20 20 20 20  se 'F':.        
e740: 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f  iCookie = BTREE_
e750: 46 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54 3b  FREE_PAGE_COUNT;
e760: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
e770: 20 20 20 20 20 20 63 61 73 65 20 27 73 27 3a 20        case 's': 
e780: 63 61 73 65 20 27 53 27 3a 0a 20 20 20 20 20 20  case 'S':.      
e790: 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45    iCookie = BTRE
e7a0: 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
e7b0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
e7c0: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a  .      default:.
e7d0: 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20          iCookie 
e7e0: 3d 20 42 54 52 45 45 5f 55 53 45 52 5f 56 45 52  = BTREE_USER_VER
e7f0: 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20 20 62 72  SION;.        br
e800: 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  eak;.    }..    
e810: 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 69 43  if( zRight && iC
e820: 6f 6f 6b 69 65 21 3d 42 54 52 45 45 5f 46 52 45  ookie!=BTREE_FRE
e830: 45 5f 50 41 47 45 5f 43 4f 55 4e 54 20 29 7b 0a  E_PAGE_COUNT ){.
e840: 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74        /* Write t
e850: 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f  he specified coo
e860: 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  kie value */.   
e870: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
e880: 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f  VdbeOpList setCo
e890: 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  okie[] = {.     
e8a0: 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
e8b0: 69 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20  ion,    0,  1,  
e8c0: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
e8d0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65         { OP_Inte
e8e0: 67 65 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20  ger,        0,  
e8f0: 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20  1,  0},    /* 1 
e900: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
e910: 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20  SetCookie,      
e920: 30 2c 20 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f  0,  0,  1},    /
e930: 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a  * 2 */.      };.
e940: 20 20 20 20 20 20 69 6e 74 20 61 64 64 72 20 3d        int addr =
e950: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e960: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
e970: 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73  ze(setCookie), s
e980: 65 74 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20  etCookie);.     
e990: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
e9a0: 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44  geP1(v, addr, iD
e9b0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
e9c0: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
e9d0: 20 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65 33   addr+1, sqlite3
e9e0: 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
e9f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ea00: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
ea10: 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  +2, iDb);.      
ea20: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
ea30: 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69  eP2(v, addr+2, i
ea40: 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c  Cookie);.    }el
ea50: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61  se{.      /* Rea
ea60: 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  d the specified 
ea70: 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a  cookie value */.
ea80: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
ea90: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65  st VdbeOpList re
eaa0: 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20  adCookie[] = {. 
eab0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
eac0: 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20  saction,     0, 
ead0: 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30   0,  0},    /* 0
eae0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
eaf0: 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20  _ReadCookie,    
eb00: 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
eb10: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20   /* 1 */.       
eb20: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
eb30: 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30         1,  1,  0
eb40: 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  }.      };.     
eb50: 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69   int addr = sqli
eb60: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
eb70: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65  (v, ArraySize(re
eb80: 61 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43  adCookie), readC
eb90: 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71  ookie);.      sq
eba0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
ebb0: 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b  1(v, addr, iDb);
ebc0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ebd0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
ebe0: 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20  dr+1, iDb);.    
ebf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
ec00: 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP3(v, addr+1,
ec10: 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20   iCookie);.     
ec20: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
ec30: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
ec40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
ec50: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
ec60: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c  COLNAME_NAME, zL
ec70: 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  eft, SQLITE_TRAN
ec80: 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20  SIENT);.    }.  
ec90: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
eca0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
ecb0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
ecc0: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
ecd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
ece0: 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20  LEOPTION_DIAGS. 
ecf0: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
ed00: 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e  A compile_option
ed10: 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  s.  **.  ** Retu
ed20: 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  rn the names of 
ed30: 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  all compile-time
ed40: 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e   options used in
ed50: 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a   this build,.  *
ed60: 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72  * one option per
ed70: 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 69 66 28   row..  */.  if(
ed80: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
ed90: 7a 4c 65 66 74 2c 20 22 63 6f 6d 70 69 6c 65 5f  zLeft, "compile_
eda0: 6f 70 74 69 6f 6e 73 22 29 3d 3d 30 20 29 7b 0a  options")==0 ){.
edb0: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20      int i = 0;. 
edc0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
edd0: 4f 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Opt;.    sqlite3
ede0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
edf0: 2c 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 1);.    pParse
ee00: 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20  ->nMem = 1;.    
ee10: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
ee20: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
ee30: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69  AME_NAME, "compi
ee40: 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49  le_option", SQLI
ee50: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
ee60: 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73  while( (zOpt = s
ee70: 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
ee80: 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d  tion_get(i++))!=
ee90: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
eea0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
eeb0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
eec0: 2c 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20  , 0, zOpt, 0);. 
eed0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
eee0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
eef0: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
ef00: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
ef10: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
ef20: 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
ef30: 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64  _DIAGS */..#ifnd
ef40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
ef50: 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AL.  /*.  **   P
ef60: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
ef70: 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20  ]wal_checkpoint 
ef80: 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72  = passive|full|r
ef90: 65 73 74 61 72 74 0a 20 20 2a 2a 0a 20 20 2a 2a  estart.  **.  **
efa0: 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20   Checkpoint the 
efb0: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
efc0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
efd0: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 77 61 6c 5f  Cmp(zLeft, "wal_
efe0: 63 68 65 63 6b 70 6f 69 6e 74 22 29 3d 3d 30 20  checkpoint")==0 
eff0: 29 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d  ){.    int iBt =
f000: 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51   (pId2->z?iDb:SQ
f010: 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
f020: 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  D);.    int eMod
f030: 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b  e = SQLITE_CHECK
f040: 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20  POINT_PASSIVE;. 
f050: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
f060: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
f070: 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
f080: 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  , "full")==0 ){.
f090: 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
f0a0: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f0b0: 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65  T_FULL;.      }e
f0c0: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
f0d0: 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
f0e0: 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a  restart")==0 ){.
f0f0: 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
f100: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f110: 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20  T_RESTART;.     
f120: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
f130: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
f140: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
f150: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
f160: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
f170: 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
f180: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
f190: 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 3;.    sqlite3
f1a0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
f1b0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
f1c0: 45 2c 20 22 62 75 73 79 22 2c 20 53 51 4c 49 54  E, "busy", SQLIT
f1d0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
f1e0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
f1f0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
f200: 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c 20  ME_NAME, "log", 
f210: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
f220: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
f230: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
f240: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
f250: 68 65 63 6b 70 6f 69 6e 74 65 64 22 2c 20 53 51  heckpointed", SQ
f260: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20  LITE_STATIC);.. 
f270: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f280: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b  dOp3(v, OP_Check
f290: 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64  point, iBt, eMod
f2a0: 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  e, 1);.    sqlit
f2b0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
f2c0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
f2d0: 20 33 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20   3);.  }else..  
f2e0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
f2f0: 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f   wal_autocheckpo
f300: 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  int.  **   PRAGM
f310: 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
f320: 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  oint = N.  **.  
f330: 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64  ** Configure a d
f340: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
f350: 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61  on to automatica
f360: 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61  lly checkpoint a
f370: 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61   database.  ** a
f380: 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e  fter accumulatin
f390: 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68  g N frames in th
f3a0: 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20  e log. Or query 
f3b0: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
f3c0: 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e  value.  ** of N.
f3d0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
f3e0: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
f3f0: 2c 20 22 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  , "wal_autocheck
f400: 70 6f 69 6e 74 22 29 3d 3d 30 20 29 7b 0a 20 20  point")==0 ){.  
f410: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
f420: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61        sqlite3_wa
f430: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
f440: 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  (db, sqlite3Atoi
f450: 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d  (zRight));.    }
f460: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
f470: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61  eInt(pParse, "wa
f480: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
f490: 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78  ", .       db->x
f4a0: 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c  WalCallback==sql
f4b0: 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
f4c0: 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20  ok ? .          
f4d0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
f4e0: 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20  NT(db->pWalArg) 
f4f0: 3a 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65  : 0);.  }else.#e
f500: 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ndif..  /*.  ** 
f510: 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d   PRAGMA shrink_m
f520: 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20  emory.  **.  ** 
f530: 54 68 69 73 20 70 72 61 67 6d 61 20 61 74 74 65  This pragma atte
f540: 6d 70 74 73 20 74 6f 20 66 72 65 65 20 61 73 20  mpts to free as 
f550: 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 70  much memory as p
f560: 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20 74 68 65  ossible from the
f570: 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61  .  ** current da
f580: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
f590: 6e 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  n..  */.  if( sq
f5a0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
f5b0: 66 74 2c 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f  ft, "shrink_memo
f5c0: 72 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ry")==0 ){.    s
f5d0: 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
f5e0: 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20  e_memory(db);.  
f5f0: 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  }else..  /*.  **
f600: 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74     PRAGMA busy_t
f610: 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52  imeout.  **   PR
f620: 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
f630: 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  t = N.  **.  ** 
f640: 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75 73  Call sqlite3_bus
f650: 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29  y_timeout(db, N)
f660: 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63 75  .  Return the cu
f670: 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76 61  rrent timeout va
f680: 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20  lue.  ** if one 
f690: 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20 62  is set.  If no b
f6a0: 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20 61  usy handler or a
f6b0: 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79 20   different busy 
f6c0: 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a 20  handler is set. 
f6d0: 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72 65   ** then 0 is re
f6e0: 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e 67  turned.  Setting
f6f0: 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f 75   the busy_timeou
f700: 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74 69  t to 0 or negati
f710: 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 73  ve.  ** disables
f720: 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20   the timeout..  
f730: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
f740: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
f750: 62 75 73 79 5f 74 69 6d 65 6f 75 74 22 29 3d 3d  busy_timeout")==
f760: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  0 ){.    if( zRi
f770: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
f780: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
f790: 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f  t(db, sqlite3Ato
f7a0: 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
f7b0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
f7c0: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74  leInt(pParse, "t
f7d0: 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75  imeout",  db->bu
f7e0: 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 7d 65  syTimeout);.  }e
f7f0: 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  lse..#if defined
f800: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
f810: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
f820: 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a  _TEST).  /*.  **
f830: 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72 72   Report the curr
f840: 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69 6c  ent state of fil
f850: 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64  e logs for all d
f860: 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20  atabases.  */.  
f870: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
f880: 6d 70 28 7a 4c 65 66 74 2c 20 22 6c 6f 63 6b 5f  mp(zLeft, "lock_
f890: 73 74 61 74 75 73 22 29 3d 3d 30 20 29 7b 0a 20  status")==0 ){. 
f8a0: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f8b0: 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f  char *const azLo
f8c0: 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  ckName[] = {.   
f8d0: 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22     "unlocked", "
f8e0: 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76  shared", "reserv
f8f0: 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20  ed", "pending", 
f900: 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20  "exclusive".    
f910: 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
f920: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
f930: 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20  NumCols(v, 2);. 
f940: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
f950: 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 2;.    sqlite3
f960: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
f970: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
f980: 45 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20 53  E, "database", S
f990: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
f9a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
f9b0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
f9c0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74  OLNAME_NAME, "st
f9d0: 61 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  atus", SQLITE_ST
f9e0: 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
f9f0: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
fa00: 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65  ++){.      Btree
fa10: 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e   *pBt;.      con
fa20: 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20  st char *zState 
fa30: 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20  = "unknown";.   
fa40: 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
fa50: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  if( db->aDb[i].z
fa60: 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  Name==0 ) contin
fa70: 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
fa80: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
fa90: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
faa0: 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a   0, db->aDb[i].z
fab0: 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29  Name, P4_STATIC)
fac0: 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62  ;.      pBt = db
fad0: 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20  ->aDb[i].pBt;.  
fae0: 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c      if( pBt==0 |
faf0: 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  | sqlite3BtreePa
fb00: 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20  ger(pBt)==0 ){. 
fb10: 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
fb20: 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20  "closed";.      
fb30: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
fb40: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
fb50: 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69  b, i ? db->aDb[i
fb60: 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20  ].zName : 0, .  
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb90: 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f     SQLITE_FCNTL_
fba0: 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d  LOCKSTATE, &j)==
fbb0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
fbc0: 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61        zState = a
fbd0: 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20  zLockName[j];.  
fbe0: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
fbf0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
fc00: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
fc10: 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34  2, 0, zState, P4
fc20: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
fc30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
fc40: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
fc50: 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
fc60: 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
fc70: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
fc80: 41 53 5f 43 4f 44 45 43 0a 20 20 69 66 28 20 73  AS_CODEC.  if( s
fc90: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
fca0: 65 66 74 2c 20 22 6b 65 79 22 29 3d 3d 30 20 26  eft, "key")==0 &
fcb0: 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  & zRight ){.    
fcc0: 73 71 6c 69 74 65 33 5f 6b 65 79 28 64 62 2c 20  sqlite3_key(db, 
fcd0: 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53  zRight, sqlite3S
fce0: 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29  trlen30(zRight))
fcf0: 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 69 66 28 20  ;.  }else.  if( 
fd00: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
fd10: 4c 65 66 74 2c 20 22 72 65 6b 65 79 22 29 3d 3d  Left, "rekey")==
fd20: 30 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20  0 && zRight ){. 
fd30: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79     sqlite3_rekey
fd40: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c  (db, zRight, sql
fd50: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69  ite3Strlen30(zRi
fd60: 67 68 74 29 29 3b 0a 20 20 7d 65 6c 73 65 0a 20  ght));.  }else. 
fd70: 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 28   if( zRight && (
fd80: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
fd90: 4c 65 66 74 2c 20 22 68 65 78 6b 65 79 22 29 3d  Left, "hexkey")=
fda0: 3d 30 20 7c 7c 0a 20 20 20 20 20 20 20 20 20 20  =0 ||.          
fdb0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74         sqlite3St
fdc0: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 68 65  rICmp(zLeft, "he
fdd0: 78 72 65 6b 65 79 22 29 3d 3d 30 29 20 29 7b 0a  xrekey")==0) ){.
fde0: 20 20 20 20 69 6e 74 20 69 2c 20 68 31 2c 20 68      int i, h1, h
fdf0: 32 3b 0a 20 20 20 20 63 68 61 72 20 7a 4b 65 79  2;.    char zKey
fe00: 5b 34 30 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  [40];.    for(i=
fe10: 30 3b 20 28 68 31 20 3d 20 7a 52 69 67 68 74 5b  0; (h1 = zRight[
fe20: 69 5d 29 21 3d 30 20 26 26 20 28 68 32 20 3d 20  i])!=0 && (h2 = 
fe30: 7a 52 69 67 68 74 5b 69 2b 31 5d 29 21 3d 30 3b  zRight[i+1])!=0;
fe40: 20 69 2b 3d 32 29 7b 0a 20 20 20 20 20 20 68 31   i+=2){.      h1
fe50: 20 2b 3d 20 39 2a 28 31 26 28 68 31 3e 3e 36 29   += 9*(1&(h1>>6)
fe60: 29 3b 0a 20 20 20 20 20 20 68 32 20 2b 3d 20 39  );.      h2 += 9
fe70: 2a 28 31 26 28 68 32 3e 3e 36 29 29 3b 0a 20 20  *(1&(h2>>6));.  
fe80: 20 20 20 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20      zKey[i/2] = 
fe90: 28 68 32 20 26 20 30 78 30 66 29 20 7c 20 28 28  (h2 & 0x0f) | ((
fea0: 68 31 20 26 20 30 78 66 29 3c 3c 34 29 3b 0a 20  h1 & 0xf)<<4);. 
feb0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 7a 4c     }.    if( (zL
fec0: 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30  eft[3] & 0xf)==0
fed0: 78 62 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  xb ){.      sqli
fee0: 74 65 33 5f 6b 65 79 28 64 62 2c 20 7a 4b 65 79  te3_key(db, zKey
fef0: 2c 20 69 2f 32 29 3b 0a 20 20 20 20 7d 65 6c 73  , i/2);.    }els
ff00: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
ff10: 5f 72 65 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c  _rekey(db, zKey,
ff20: 20 69 2f 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d   i/2);.    }.  }
ff30: 65 6c 73 65 0a 23 65 6e 64 69 66 0a 23 69 66 20  else.#endif.#if 
ff40: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
ff50: 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66  AS_CODEC) || def
ff60: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
ff70: 4c 45 5f 43 45 52 4f 44 29 0a 20 20 69 66 28 20  LE_CEROD).  if( 
ff80: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
ff90: 4c 65 66 74 2c 20 22 61 63 74 69 76 61 74 65 5f  Left, "activate_
ffa0: 65 78 74 65 6e 73 69 6f 6e 73 22 29 3d 3d 30 20  extensions")==0 
ffb0: 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 23 69 66  && zRight ){.#if
ffc0: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
ffd0: 4f 44 45 43 0a 20 20 20 20 69 66 28 20 73 71 6c  ODEC.    if( sql
ffe0: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69  ite3StrNICmp(zRi
fff0: 67 68 74 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d  ght, "see-", 4)=
10000 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
10010 74 65 33 5f 61 63 74 69 76 61 74 65 5f 73 65 65  te3_activate_see
10020 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20  (&zRight[4]);.  
10030 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65    }.#endif.#ifde
10040 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
10050 43 45 52 4f 44 0a 20 20 20 20 69 66 28 20 73 71  CEROD.    if( sq
10060 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52  lite3StrNICmp(zR
10070 69 67 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20  ight, "cerod-", 
10080 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  6)==0 ){.      s
10090 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f  qlite3_activate_
100a0 63 65 72 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d  cerod(&zRight[6]
100b0 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
100c0 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
100d0 20 0a 20 20 7b 2f 2a 20 45 6d 70 74 79 20 45 4c   .  {/* Empty EL
100e0 53 45 20 63 6c 61 75 73 65 20 2a 2f 7d 0a 0a 20  SE clause */}.. 
100f0 20 2f 2a 0a 20 20 2a 2a 20 52 65 73 65 74 20 74   /*.  ** Reset t
10100 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c 2c  he safety level,
10110 20 69 6e 20 63 61 73 65 20 74 68 65 20 66 75 6c   in case the ful
10120 6c 66 73 79 6e 63 20 66 6c 61 67 20 6f 72 20 73  lfsync flag or s
10130 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
10140 73 65 74 74 69 6e 67 20 63 68 61 6e 67 65 64 2e  setting changed.
10150 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
10160 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
10170 50 52 41 47 4d 41 53 0a 20 20 69 66 28 20 64 62  PRAGMAS.  if( db
10180 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
10190 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
101a0 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 70  SetSafetyLevel(p
101b0 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 73 61  Db->pBt, pDb->sa
101c0 66 65 74 79 5f 6c 65 76 65 6c 2c 0a 20 20 20 20  fety_level,.    
101d0 20 20 20 20 20 20 20 20 20 20 20 28 64 62 2d 3e             (db->
101e0 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 46 75 6c  flags&SQLITE_Ful
101f0 6c 46 53 79 6e 63 29 21 3d 30 2c 0a 20 20 20 20  lFSync)!=0,.    
10200 20 20 20 20 20 20 20 20 20 20 20 28 64 62 2d 3e             (db->
10210 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6b 70  flags&SQLITE_Ckp
10220 74 46 75 6c 6c 46 53 79 6e 63 29 21 3d 30 29 3b  tFullFSync)!=0);
10230 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 70 72 61 67  .  }.#endif.prag
10240 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65  ma_out:.  sqlite
10250 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65 66  3DbFree(db, zLef
10260 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  t);.  sqlite3DbF
10270 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29 3b  ree(db, zRight);
10280 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .}..#endif /* SQ
10290 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
102a0 20 2a 2f 0a                                       */.