/ Hex Artifact Content
Login

Artifact 3aa3d8c8623b7b71c5b1bfb72dcc31fb0c25665f:


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 0a 2f 2a 0a 2a 2a 20 53 65 74  );.}.../*.** Set
1420: 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65   the safety_leve
1430: 6c 20 61 6e 64 20 70 61 67 65 72 20 66 6c 61 67  l and pager flag
1440: 73 20 66 6f 72 20 70 61 67 65 72 20 69 44 62 2e  s for pager iDb.
1450: 20 20 4f 72 20 69 66 20 69 44 62 3c 30 0a 2a 2a    Or if iDb<0.**
1460: 20 73 65 74 20 74 68 65 73 65 20 76 61 6c 75 65   set these value
1470: 73 20 66 6f 72 20 61 6c 6c 20 70 61 67 65 72 73  s for all pagers
1480: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
1490: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
14a0: 52 41 47 4d 41 53 0a 73 74 61 74 69 63 20 76 6f  RAGMAS.static vo
14b0: 69 64 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c  id setAllPagerFl
14c0: 61 67 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ags(sqlite3 *db)
14d0: 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f  {.  if( db->auto
14e0: 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 44 62  Commit ){.    Db
14f0: 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61 44 62 3b   *pDb = db->aDb;
1500: 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 64 62 2d  .    int n = db-
1510: 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73 65 72 74  >nDb;.    assert
1520: 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  ( SQLITE_FullFSy
1530: 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c 4c 46 53  nc==PAGER_FULLFS
1540: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
1550: 74 28 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  t( SQLITE_CkptFu
1560: 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 43  llFSync==PAGER_C
1570: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b  KPT_FULLFSYNC );
1580: 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c  .    assert( SQL
1590: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3d 3d  ITE_CacheSpill==
15a0: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
15b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
15c0: 28 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43  (PAGER_FULLFSYNC
15d0: 20 7c 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55   | PAGER_CKPT_FU
15e0: 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f  LLFSYNC | PAGER_
15f0: 43 41 43 48 45 53 50 49 4c 4c 29 0a 20 20 20 20  CACHESPILL).    
1600: 20 20 20 20 20 20 20 20 20 3d 3d 20 20 50 41 47           ==  PAG
1610: 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 20 29 3b  ER_FLAGS_MASK );
1620: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 44  .    assert( (pD
1630: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
1640: 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  & PAGER_SYNCHRON
1650: 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44 62 2d 3e  OUS_MASK)==pDb->
1660: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 29 3b 0a  safety_level );.
1670: 20 20 20 20 77 68 69 6c 65 28 20 28 6e 2d 2d 29      while( (n--)
1680: 20 3e 20 30 20 29 7b 0a 20 20 20 20 20 20 69 66   > 0 ){.      if
1690: 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20  ( pDb->pBt ){.  
16a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
16b0: 65 65 53 65 74 50 61 67 65 72 46 6c 61 67 73 28  eeSetPagerFlags(
16c0: 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20 20 20 20  pDb->pBt,.      
16d0: 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2d 3e             pDb->
16e0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 7c 20 28  safety_level | (
16f0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 50 41 47 45  db->flags & PAGE
1700: 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20 29 3b  R_FLAGS_MASK) );
1710: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1720: 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Db++;.    }.  }.
1730: 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  }.#else.# define
1740: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
1750: 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  s(X)  /* no-op *
1760: 2f 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  /.#endif...#ifnd
1770: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1780: 4c 41 47 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a  LAG_PRAGMAS./*.*
1790: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
17a0: 66 20 7a 52 69 67 68 74 20 61 6e 64 20 7a 4c 65  f zRight and zLe
17b0: 66 74 20 72 65 66 65 72 20 74 6f 20 61 20 70 72  ft refer to a pr
17c0: 61 67 6d 61 20 74 68 61 74 20 71 75 65 72 69 65  agma that querie
17d0: 73 0a 2a 2a 20 6f 72 20 63 68 61 6e 67 65 73 20  s.** or changes 
17e0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6c 61 67 73  one of the flags
17f0: 20 69 6e 20 64 62 2d 3e 66 6c 61 67 73 2e 20 20   in db->flags.  
1800: 52 65 74 75 72 6e 20 31 20 69 66 20 73 6f 20 61  Return 1 if so a
1810: 6e 64 20 30 20 69 66 20 6e 6f 74 2e 0a 2a 2a 20  nd 0 if not..** 
1820: 41 6c 73 6f 2c 20 69 6d 70 6c 65 6d 65 6e 74 20  Also, implement 
1830: 74 68 65 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 73  the pragma..*/.s
1840: 74 61 74 69 63 20 69 6e 74 20 66 6c 61 67 50 72  tatic int flagPr
1850: 61 67 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  agma(Parse *pPar
1860: 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  se, const char *
1870: 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61  zLeft, const cha
1880: 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20 20 73 74  r *zRight){.  st
1890: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
18a0: 74 20 73 50 72 61 67 6d 61 54 79 70 65 20 7b 0a  t sPragmaType {.
18b0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
18c0: 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  zName;  /* Name 
18d0: 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 2a 2f  of the pragma */
18e0: 0a 20 20 20 20 69 6e 74 20 6d 61 73 6b 3b 20 20  .    int mask;  
18f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
1900: 20 66 6f 72 20 74 68 65 20 64 62 2d 3e 66 6c 61   for the db->fla
1910: 67 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  gs value */.  } 
1920: 61 50 72 61 67 6d 61 5b 5d 20 3d 20 7b 0a 20 20  aPragma[] = {.  
1930: 20 20 7b 20 22 66 75 6c 6c 5f 63 6f 6c 75 6d 6e    { "full_column
1940: 5f 6e 61 6d 65 73 22 2c 20 20 20 20 20 20 20 20  _names",        
1950: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
1960: 6d 65 73 20 20 7d 2c 0a 20 20 20 20 7b 20 22 73  mes  },.    { "s
1970: 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  hort_column_name
1980: 73 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45  s",       SQLITE
1990: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 7d  _ShortColNames }
19a0: 2c 0a 20 20 20 20 7b 20 22 63 6f 75 6e 74 5f 63  ,.    { "count_c
19b0: 68 61 6e 67 65 73 22 2c 20 20 20 20 20 20 20 20  hanges",        
19c0: 20 20 20 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74      SQLITE_Count
19d0: 52 6f 77 73 20 20 20 20 20 7d 2c 0a 20 20 20 20  Rows     },.    
19e0: 7b 20 22 65 6d 70 74 79 5f 72 65 73 75 6c 74 5f  { "empty_result_
19f0: 63 61 6c 6c 62 61 63 6b 73 22 2c 20 20 20 53 51  callbacks",   SQ
1a00: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
1a10: 6b 20 20 7d 2c 0a 20 20 20 20 7b 20 22 6c 65 67  k  },.    { "leg
1a20: 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22  acy_file_format"
1a30: 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c  ,       SQLITE_L
1a40: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 7d 2c 0a  egacyFileFmt },.
1a50: 20 20 20 20 7b 20 22 66 75 6c 6c 66 73 79 6e 63      { "fullfsync
1a60: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
1a70: 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79    SQLITE_FullFSy
1a80: 6e 63 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20  nc     },.    { 
1a90: 22 63 68 65 63 6b 70 6f 69 6e 74 5f 66 75 6c 6c  "checkpoint_full
1aa0: 66 73 79 6e 63 22 2c 20 20 20 20 20 53 51 4c 49  fsync",     SQLI
1ab0: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
1ac0: 20 7d 2c 0a 20 20 20 20 7b 20 22 63 61 63 68 65   },.    { "cache
1ad0: 5f 73 70 69 6c 6c 22 2c 20 20 20 20 20 20 20 20  _spill",        
1ae0: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63        SQLITE_Cac
1af0: 68 65 53 70 69 6c 6c 20 20 20 20 7d 2c 0a 20 20  heSpill    },.  
1b00: 20 20 7b 20 22 72 65 76 65 72 73 65 5f 75 6e 6f    { "reverse_uno
1b10: 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c  rdered_selects",
1b20: 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f   SQLITE_ReverseO
1b30: 72 64 65 72 20 20 7d 2c 0a 20 20 20 20 7b 20 22  rder  },.    { "
1b40: 71 75 65 72 79 5f 6f 6e 6c 79 22 2c 20 20 20 20  query_only",    
1b50: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
1b60: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
1b70: 7d 2c 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  },.#ifndef SQLIT
1b80: 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41 54 49 43  E_OMIT_AUTOMATIC
1b90: 5f 49 4e 44 45 58 0a 20 20 20 20 7b 20 22 61 75  _INDEX.    { "au
1ba0: 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78 22 2c 20  tomatic_index", 
1bb0: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
1bc0: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 7d 2c  AutoIndex     },
1bd0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1be0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1bf0: 7b 20 22 73 71 6c 5f 74 72 61 63 65 22 2c 20 20  { "sql_trace",  
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1c10: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
1c20: 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 76 64 62     },.    { "vdb
1c30: 65 5f 6c 69 73 74 69 6e 67 22 2c 20 20 20 20 20  e_listing",     
1c40: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 56          SQLITE_V
1c50: 64 62 65 4c 69 73 74 69 6e 67 20 20 20 7d 2c 0a  dbeListing   },.
1c60: 20 20 20 20 7b 20 22 76 64 62 65 5f 74 72 61 63      { "vdbe_trac
1c70: 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  e",             
1c80: 20 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61    SQLITE_VdbeTra
1c90: 63 65 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20  ce     },.    { 
1ca0: 22 76 64 62 65 5f 61 64 64 6f 70 74 72 61 63 65  "vdbe_addoptrace
1cb0: 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
1cc0: 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63  TE_VdbeAddopTrac
1cd0: 65 7d 2c 0a 20 20 20 20 7b 20 22 76 64 62 65 5f  e},.    { "vdbe_
1ce0: 64 65 62 75 67 22 2c 20 20 20 20 53 51 4c 49 54  debug",    SQLIT
1cf0: 45 5f 53 71 6c 54 72 61 63 65 20 7c 20 53 51 4c  E_SqlTrace | SQL
1d00: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 0a  ITE_VdbeListing.
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c                 |
1d30: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
1d40: 65 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66  e      },.#endif
1d50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d60: 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 20 20 7b  OMIT_CHECK.    {
1d70: 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63   "ignore_check_c
1d80: 6f 6e 73 74 72 61 69 6e 74 73 22 2c 20 53 51 4c  onstraints", SQL
1d90: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
1da0: 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20    },.#endif.    
1db0: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
1dc0: 20 69 73 20 56 45 52 59 20 65 78 70 65 72 69 6d   is VERY experim
1dd0: 65 6e 74 61 6c 20 2a 2f 0a 20 20 20 20 7b 20 22  ental */.    { "
1de0: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 22  writable_schema"
1df0: 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ,          SQLIT
1e00: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 7c 53 51  E_WriteSchema|SQ
1e10: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
1e20: 65 20 7d 2c 0a 0a 20 20 20 20 2f 2a 20 54 4f 44  e },..    /* TOD
1e30: 4f 3a 20 4d 61 79 62 65 20 69 74 20 73 68 6f 75  O: Maybe it shou
1e40: 6c 64 6e 27 74 20 62 65 20 70 6f 73 73 69 62 6c  ldn't be possibl
1e50: 65 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  e to change the 
1e60: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 0a  ReadUncommitted.
1e70: 20 20 20 20 2a 2a 20 66 6c 61 67 20 69 66 20 74      ** flag if t
1e80: 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
1e90: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ive statements. 
1ea0: 2a 2f 0a 20 20 20 20 7b 20 22 72 65 61 64 5f 75  */.    { "read_u
1eb0: 6e 63 6f 6d 6d 69 74 74 65 64 22 2c 20 20 20 20  ncommitted",    
1ec0: 20 20 20 20 20 53 51 4c 49 54 45 5f 52 65 61 64       SQLITE_Read
1ed0: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 7d 2c 0a 20  Uncommitted },. 
1ee0: 20 20 20 7b 20 22 72 65 63 75 72 73 69 76 65 5f     { "recursive_
1ef0: 74 72 69 67 67 65 72 73 22 2c 20 20 20 20 20 20  triggers",      
1f00: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
1f10: 65 72 73 20 20 20 7d 2c 0a 0a 20 20 20 20 2f 2a  ers   },..    /*
1f20: 20 54 68 69 73 20 66 6c 61 67 20 6d 61 79 20 6f   This flag may o
1f30: 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 62 6f  nly be set if bo
1f40: 74 68 20 66 6f 72 65 69 67 6e 2d 6b 65 79 20 61  th foreign-key a
1f50: 6e 64 20 74 72 69 67 67 65 72 20 73 75 70 70 6f  nd trigger suppo
1f60: 72 74 0a 20 20 20 20 2a 2a 20 61 72 65 20 70 72  rt.    ** are pr
1f70: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 62 75 69  esent in the bui
1f80: 6c 64 2e 20 20 2a 2f 0a 23 69 66 20 21 64 65 66  ld.  */.#if !def
1f90: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1fa0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
1fb0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1fc0: 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
1fd0: 20 20 20 7b 20 22 66 6f 72 65 69 67 6e 5f 6b 65     { "foreign_ke
1fe0: 79 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ys",            
1ff0: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
2000: 65 79 73 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22  eys   },.    { "
2010: 64 65 66 65 72 5f 66 6f 72 65 69 67 6e 5f 6b 65  defer_foreign_ke
2020: 79 73 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54  ys",       SQLIT
2030: 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20 20  E_DeferFKs      
2040: 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7d 3b 0a 20  },.#endif.  };. 
2050: 20 69 6e 74 20 69 3b 0a 20 20 63 6f 6e 73 74 20   int i;.  const 
2060: 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 54 79  struct sPragmaTy
2070: 70 65 20 2a 70 3b 0a 20 20 66 6f 72 28 69 3d 30  pe *p;.  for(i=0
2080: 2c 20 70 3d 61 50 72 61 67 6d 61 3b 20 69 3c 41  , p=aPragma; i<A
2090: 72 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61  rraySize(aPragma
20a0: 29 3b 20 69 2b 2b 2c 20 70 2b 2b 29 7b 0a 20 20  ); i++, p++){.  
20b0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
20c0: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 70 2d 3e 7a  ICmp(zLeft, p->z
20d0: 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Name)==0 ){.    
20e0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
20f0: 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20 20 20  pParse->db;.    
2100: 20 20 56 64 62 65 20 2a 76 3b 0a 20 20 20 20 20    Vdbe *v;.     
2110: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
2120: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
2130: 20 20 20 61 73 73 65 72 74 28 20 76 21 3d 30 20     assert( v!=0 
2140: 29 3b 20 20 2f 2a 20 41 6c 72 65 61 64 79 20 61  );  /* Already a
2150: 6c 6c 6f 63 61 74 65 64 20 62 79 20 73 71 6c 69  llocated by sqli
2160: 74 65 33 50 72 61 67 6d 61 28 29 20 2a 2f 0a 20  te3Pragma() */. 
2170: 20 20 20 20 20 69 66 28 20 41 4c 57 41 59 53 28       if( ALWAYS(
2180: 76 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  v) ){.        if
2190: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
21a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 53           returnS
21b0: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
21c0: 20 70 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e   p->zName, (db->
21d0: 66 6c 61 67 73 20 26 20 70 2d 3e 6d 61 73 6b 29  flags & p->mask)
21e0: 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 7d  !=0 );.        }
21f0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
2200: 69 6e 74 20 6d 61 73 6b 20 3d 20 70 2d 3e 6d 61  int mask = p->ma
2210: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  sk;          /* 
2220: 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20  Mask of bits to 
2230: 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f  set or clear. */
2240: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 64  .          if( d
2250: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
2260: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2270: 2f 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73  /* Foreign key s
2280: 75 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62  upport may not b
2290: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
22a0: 61 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a  abled while not.
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69              ** i
22c0: 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f  n auto-commit mo
22d0: 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20  de.  */.        
22e0: 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51      mask &= ~(SQ
22f0: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
2300: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a  );.          }..
2310: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73 71            if( sq
2320: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
2330: 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20  zRight, 0) ){.  
2340: 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c            db->fl
2350: 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20  ags |= mask;.   
2360: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
2370: 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c            db->fl
2380: 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20  ags &= ~mask;.  
2390: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6d 61            if( ma
23a0: 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65 72  sk==SQLITE_Defer
23b0: 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65 66 65 72  FKs ) db->nDefer
23c0: 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a  redImmCons = 0;.
23d0: 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20            }..   
23e0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f         /* Many o
23f0: 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61 67 6d  f the flag-pragm
2400: 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f  as modify the co
2410: 64 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  de generated by 
2420: 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20 20 20  the SQL .       
2430: 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28     ** compiler (
2440: 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  eg. count_change
2450: 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70  s). So add an op
2460: 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20 61  code to expire a
2470: 6c 6c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  ll.          ** 
2480: 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61  compiled SQL sta
2490: 74 65 6d 65 6e 74 73 20 61 66 74 65 72 20 6d 6f  tements after mo
24a0: 64 69 66 79 69 6e 67 20 61 20 70 72 61 67 6d 61  difying a pragma
24b0: 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 20 20   value..        
24c0: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73    */.          s
24d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
24e0: 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c 20 30  (v, OP_Expire, 0
24f0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 0);.        }.
2500: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72        }..      r
2510: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
2520: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
2530: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2540: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
2550: 4d 41 53 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  MAS */../*.** Re
2560: 74 75 72 6e 20 61 20 68 75 6d 61 6e 2d 72 65 61  turn a human-rea
2570: 64 61 62 6c 65 20 6e 61 6d 65 20 66 6f 72 20 61  dable name for a
2580: 20 63 6f 6e 73 74 72 61 69 6e 74 20 72 65 73 6f   constraint reso
2590: 6c 75 74 69 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a  lution action..*
25a0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
25b0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
25c0: 59 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63  Y.static const c
25d0: 68 61 72 20 2a 61 63 74 69 6f 6e 4e 61 6d 65 28  har *actionName(
25e0: 75 38 20 61 63 74 69 6f 6e 29 7b 0a 20 20 63 6f  u8 action){.  co
25f0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
2600: 0a 20 20 73 77 69 74 63 68 28 20 61 63 74 69 6f  .  switch( actio
2610: 6e 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 45  n ){.    case OE
2620: 5f 53 65 74 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65  _SetNull:  zName
2630: 20 3d 20 22 53 45 54 20 4e 55 4c 4c 22 3b 20 20   = "SET NULL";  
2640: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2650: 20 63 61 73 65 20 4f 45 5f 53 65 74 44 66 6c 74   case OE_SetDflt
2660: 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20  :  zName = "SET 
2670: 44 45 46 41 55 4c 54 22 3b 20 20 20 20 20 62 72  DEFAULT";     br
2680: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45  eak;.    case OE
2690: 5f 43 61 73 63 61 64 65 3a 20 20 7a 4e 61 6d 65  _Cascade:  zName
26a0: 20 3d 20 22 43 41 53 43 41 44 45 22 3b 20 20 20   = "CASCADE";   
26b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
26c0: 20 63 61 73 65 20 4f 45 5f 52 65 73 74 72 69 63   case OE_Restric
26d0: 74 3a 20 7a 4e 61 6d 65 20 3d 20 22 52 45 53 54  t: zName = "REST
26e0: 52 49 43 54 22 3b 20 20 20 20 20 20 20 20 62 72  RICT";        br
26f0: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
2700: 3a 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65  :          zName
2710: 20 3d 20 22 4e 4f 20 41 43 54 49 4f 4e 22 3b 20   = "NO ACTION"; 
2720: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
2730: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
2740: 61 63 74 69 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20  action==OE_None 
2750: 29 3b 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20  ); break;.  }.  
2760: 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a  return zName;.}.
2770: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50  #endif.../*.** P
2780: 61 72 61 6d 65 74 65 72 20 65 4d 6f 64 65 20 6d  arameter eMode m
2790: 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
27a0: 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  e PAGER_JOURNALM
27b0: 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74  ODE_XXX constant
27c0: 73 0a 2a 2a 20 64 65 66 69 6e 65 64 20 69 6e 20  s.** defined in 
27d0: 70 61 67 65 72 2e 68 2e 20 54 68 69 73 20 66 75  pager.h. This fu
27e0: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
27f0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 6c 6f  he associated lo
2800: 77 65 72 63 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e  wercase.** journ
2810: 61 6c 2d 6d 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f  al-mode name..*/
2820: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2830: 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
2840: 61 6d 65 28 69 6e 74 20 65 4d 6f 64 65 29 7b 0a  ame(int eMode){.
2850: 20 20 73 74 61 74 69 63 20 63 68 61 72 20 2a 20    static char * 
2860: 63 6f 6e 73 74 20 61 7a 4d 6f 64 65 4e 61 6d 65  const azModeName
2870: 5b 5d 20 3d 20 7b 0a 20 20 20 20 22 64 65 6c 65  [] = {.    "dele
2880: 74 65 22 2c 20 22 70 65 72 73 69 73 74 22 2c 20  te", "persist", 
2890: 22 6f 66 66 22 2c 20 22 74 72 75 6e 63 61 74 65  "off", "truncate
28a0: 22 2c 20 22 6d 65 6d 6f 72 79 22 0a 23 69 66 6e  ", "memory".#ifn
28b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
28c0: 57 41 4c 0a 20 20 20 20 20 2c 20 22 77 61 6c 22  WAL.     , "wal"
28d0: 0a 23 65 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 61  .#endif.  };.  a
28e0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
28f0: 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 3d  RNALMODE_DELETE=
2900: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2910: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2920: 45 5f 50 45 52 53 49 53 54 3d 3d 31 20 29 3b 0a  E_PERSIST==1 );.
2930: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
2940: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d  JOURNALMODE_OFF=
2950: 3d 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =2 );.  assert( 
2960: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2970: 45 5f 54 52 55 4e 43 41 54 45 3d 3d 33 20 29 3b  E_TRUNCATE==3 );
2980: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
2990: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
29a0: 4f 52 59 3d 3d 34 20 29 3b 0a 20 20 61 73 73 65  ORY==4 );.  asse
29b0: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
29c0: 4c 4d 4f 44 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a  LMODE_WAL==5 );.
29d0: 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65 3e    assert( eMode>
29e0: 3d 30 20 26 26 20 65 4d 6f 64 65 3c 3d 41 72 72  =0 && eMode<=Arr
29f0: 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d  aySize(azModeNam
2a00: 65 29 20 29 3b 0a 0a 20 20 69 66 28 20 65 4d 6f  e) );..  if( eMo
2a10: 64 65 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a  de==ArraySize(az
2a20: 4d 6f 64 65 4e 61 6d 65 29 20 29 20 72 65 74 75  ModeName) ) retu
2a30: 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 61  rn 0;.  return a
2a40: 7a 4d 6f 64 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d  zModeName[eMode]
2a50: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  ;.}../*.** Proce
2a60: 73 73 20 61 20 70 72 61 67 6d 61 20 73 74 61 74  ss a pragma stat
2a70: 65 6d 65 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50  ement.  .**.** P
2a80: 72 61 67 6d 61 73 20 61 72 65 20 6f 66 20 74 68  ragmas are of th
2a90: 69 73 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20  is form:.**.**  
2aa0: 20 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61      PRAGMA [data
2ab0: 62 61 73 65 2e 5d 69 64 20 5b 3d 20 76 61 6c 75  base.]id [= valu
2ac0: 65 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 64 65  e].**.** The ide
2ad0: 6e 74 69 66 69 65 72 20 6d 69 67 68 74 20 61 6c  ntifier might al
2ae0: 73 6f 20 62 65 20 61 20 73 74 72 69 6e 67 2e 20  so be a string. 
2af0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 61 20   The value is a 
2b00: 73 74 72 69 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69  string, and.** i
2b10: 64 65 6e 74 69 66 69 65 72 2c 20 6f 72 20 61 20  dentifier, or a 
2b20: 6e 75 6d 62 65 72 2e 20 20 49 66 20 6d 69 6e 75  number.  If minu
2b30: 73 46 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74  sFlag is true, t
2b40: 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 69 73  hen the value is
2b50: 0a 2a 2a 20 61 20 6e 75 6d 62 65 72 20 74 68 61  .** a number tha
2b60: 74 20 77 61 73 20 70 72 65 63 65 64 65 64 20 62  t was preceded b
2b70: 79 20 61 20 6d 69 6e 75 73 20 73 69 67 6e 2e 0a  y a minus sign..
2b80: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6c 65 66  **.** If the lef
2b90: 74 20 73 69 64 65 20 69 73 20 22 64 61 74 61 62  t side is "datab
2ba0: 61 73 65 2e 69 64 22 20 74 68 65 6e 20 70 49 64  ase.id" then pId
2bb0: 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
2bc0: 65 20 6e 61 6d 65 0a 2a 2a 20 61 6e 64 20 70 49  e name.** and pI
2bd0: 64 32 20 69 73 20 74 68 65 20 69 64 2e 20 20 49  d2 is the id.  I
2be0: 66 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20  f the left side 
2bf0: 69 73 20 6a 75 73 74 20 22 69 64 22 20 74 68 65  is just "id" the
2c00: 6e 20 70 49 64 31 20 69 73 20 74 68 65 0a 2a 2a  n pId1 is the.**
2c10: 20 69 64 20 61 6e 64 20 70 49 64 32 20 69 73 20   id and pId2 is 
2c20: 61 6e 79 20 65 6d 70 74 79 20 73 74 72 69 6e 67  any empty string
2c30: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2c40: 33 50 72 61 67 6d 61 28 0a 20 20 50 61 72 73 65  3Pragma(.  Parse
2c50: 20 2a 70 50 61 72 73 65 2c 20 0a 20 20 54 6f 6b   *pParse, .  Tok
2c60: 65 6e 20 2a 70 49 64 31 2c 20 20 20 20 20 20 20  en *pId1,       
2c70: 20 2f 2a 20 46 69 72 73 74 20 70 61 72 74 20 6f   /* First part o
2c80: 66 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20  f [database.]id 
2c90: 66 69 65 6c 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e  field */.  Token
2ca0: 20 2a 70 49 64 32 2c 20 20 20 20 20 20 20 20 2f   *pId2,        /
2cb0: 2a 20 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66  * Second part of
2cc0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66   [database.]id f
2cd0: 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ield, or NULL */
2ce0: 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61 6c 75 65  .  Token *pValue
2cf0: 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20  ,      /* Token 
2d00: 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20  for <value>, or 
2d10: 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 6d 69  NULL */.  int mi
2d20: 6e 75 73 46 6c 61 67 20 20 20 20 20 20 20 2f 2a  nusFlag       /*
2d30: 20 54 72 75 65 20 69 66 20 61 20 27 2d 27 20 73   True if a '-' s
2d40: 69 67 6e 20 70 72 65 63 65 64 65 64 20 3c 76 61  ign preceded <va
2d50: 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20 63 68 61  lue> */.){.  cha
2d60: 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b 20 20 20  r *zLeft = 0;   
2d70: 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69      /* Nul-termi
2d80: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
2d90: 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20 63 68 61  ng <id> */.  cha
2da0: 72 20 2a 7a 52 69 67 68 74 20 3d 20 30 3b 20 20  r *zRight = 0;  
2db0: 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69      /* Nul-termi
2dc0: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
2dd0: 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e  ng <value>, or N
2de0: 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ULL */.  const c
2df0: 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 20 20 20  har *zDb = 0;   
2e00: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
2e10: 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
2e20: 2a 70 49 64 3b 20 20 20 20 20 20 20 20 20 20 20  *pId;           
2e30: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 3c   /* Pointer to <
2e40: 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 69  id> token */.  i
2e50: 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
2e60: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
2e70: 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64 61 74  e index for <dat
2e80: 61 62 61 73 65 3e 20 2a 2f 0a 20 20 63 68 61 72  abase> */.  char
2e90: 20 2a 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20 20   *aFcntl[4];    
2ea0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
2eb0: 6f 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  o SQLITE_FCNTL_P
2ec0: 52 41 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20 72  RAGMA */.  int r
2ed0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
2ee0: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
2ef0: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
2f00: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
2f10: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
2f20: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
2f30: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
2f40: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
2f50: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f70: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
2f80: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
2f90: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
2fa0: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
2fb0: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
2fc0: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
2fd0: 65 6d 65 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20  ement */..  if( 
2fe0: 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  v==0 ) return;. 
2ff0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 75 6e 4f   sqlite3VdbeRunO
3000: 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50  nlyOnce(v);.  pP
3010: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
3020: 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72 65 74 20  .  /* Interpret 
3030: 74 68 65 20 5b 64 61 74 61 62 61 73 65 2e 5d 20  the [database.] 
3040: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
3050: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44  ma statement. iD
3060: 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e  b is the.  ** in
3070: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
3080: 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20  ase this pragma 
3090: 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64  is being applied
30a0: 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e   to in db.aDb[].
30b0: 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69   */.  iDb = sqli
30c0: 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70  te3TwoPartName(p
30d0: 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64  Parse, pId1, pId
30e0: 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20  2, &pId);.  if( 
30f0: 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a  iDb<0 ) return;.
3100: 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
3110: 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  [iDb];..  /* If 
3120: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
3130: 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69  e has been expli
3140: 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70  citly named as p
3150: 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  art of the .  **
3160: 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75   pragma, make su
3170: 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a  re it is open. .
3180: 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d    */.  if( iDb==
3190: 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e  1 && sqlite3Open
31a0: 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61  TempDatabase(pPa
31b0: 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  rse) ){.    retu
31c0: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74  rn;.  }..  zLeft
31d0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
31e0: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29  omToken(db, pId)
31f0: 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29  ;.  if( !zLeft )
3200: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d   return;.  if( m
3210: 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20  inusFlag ){.    
3220: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
3230: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54  MPrintf(db, "-%T
3240: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
3250: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
3260: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
3270: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75  mToken(db, pValu
3280: 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  e);.  }..  asser
3290: 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62  t( pId2 );.  zDb
32a0: 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70   = pId2->n>0 ? p
32b0: 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20  Db->zName : 0;. 
32c0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68   if( sqlite3Auth
32d0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
32e0: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
32f0: 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  ft, zRight, zDb)
3300: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61   ){.    goto pra
3310: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
3320: 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54  /* Send an SQLIT
3330: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66  E_FCNTL_PRAGMA f
3340: 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ile-control to t
3350: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
3360: 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  S.  ** connectio
3370: 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72 6e  n.  If it return
3380: 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65  s SQLITE_OK, the
3390: 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68  n assume that th
33a0: 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c  e VFS.  ** handl
33b0: 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e  ed the pragma an
33c0: 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d  d generate a no-
33d0: 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61 74  op prepared stat
33e0: 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46  ement..  */.  aF
33f0: 63 6e 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  cntl[0] = 0;.  a
3400: 46 63 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74  Fcntl[1] = zLeft
3410: 3b 0a 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20  ;.  aFcntl[2] = 
3420: 7a 52 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c  zRight;.  aFcntl
3430: 5b 33 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  [3] = 0;.  db->b
3440: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
3450: 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
3460: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
3470: 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54  l(db, zDb, SQLIT
3480: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20  E_FCNTL_PRAGMA, 
3490: 28 76 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a  (void*)aFcntl);.
34a0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
34b0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 61  _OK ){.    if( a
34c0: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
34d0: 20 20 69 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50    int mem = ++pP
34e0: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
34f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
3500: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
3510: 38 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46  8, 0, mem, 0, aF
3520: 63 6e 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20  cntl[0], 0);.   
3530: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
3540: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
3550: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3560: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
3570: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
3580: 22 72 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45  "result", SQLITE
3590: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
35a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
35b0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
35c0: 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20  w, mem, 1);.    
35d0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
35e0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
35f0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21  .  }else if( rc!
3600: 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44  =SQLITE_NOTFOUND
3610: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e   ){.    if( aFcn
3620: 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73  tl[0] ){.      s
3630: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
3640: 50 61 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63  Parse, "%s", aFc
3650: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73  ntl[0]);.      s
3660: 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e  qlite3_free(aFcn
3670: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  tl[0]);.    }.  
3680: 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b    pParse->nErr++
3690: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63  ;.    pParse->rc
36a0: 20 3d 20 72 63 3b 0a 20 20 7d 65 6c 73 65 0a 20   = rc;.  }else. 
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c0: 20 20 20 20 20 20 20 20 20 20 20 0a 20 0a 23 69             . .#i
36d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
36e0: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
36f0: 47 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65  GMAS) && !define
3700: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  d(SQLITE_OMIT_DE
3710: 50 52 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20  PRECATED).  /*. 
3720: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
3730: 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63  abase.]default_c
3740: 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20  ache_size.  **  
3750: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
3760: 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  .]default_cache_
3770: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
3780: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
3790: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
37a0: 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73  ent persistent s
37b0: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
37c0: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
37d0: 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ize.  The value 
37e0: 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20  returned is the 
37f0: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
3800: 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20  f.  ** pages in 
3810: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20  the page cache. 
3820: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
3830: 20 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63   sets both the c
3840: 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65  urrent.  ** page
3850: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
3860: 65 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73  e and the persis
3870: 74 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20  tent page cache 
3880: 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20  size value.  ** 
3890: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
38a0: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a  tabase file..  *
38b0: 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72  *.  ** Older ver
38c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
38d0: 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65  would set the de
38e0: 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
38f0: 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74   to a.  ** negat
3900: 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e  ive number to in
3910: 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f  dicate synchrono
3920: 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64  us=OFF.  These d
3930: 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ays, synchronous
3940: 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20  .  ** is always 
3950: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65  on by default re
3960: 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
3970: 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61  sign of the defa
3980: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
3990: 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e  ize.  But contin
39a0: 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61  ue to take the a
39b0: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
39c0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
39d0: 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20  he.  ** size of 
39e0: 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61  historical compa
39f0: 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20  tibility..  */. 
3a00: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
3a10: 43 6d 70 28 7a 4c 65 66 74 2c 22 64 65 66 61 75  Cmp(zLeft,"defau
3a20: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 22 29 3d  lt_cache_size")=
3a30: 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  =0 ){.    static
3a40: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
3a50: 74 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d  t getCacheSize[]
3a60: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
3a70: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20  Transaction, 0, 
3a80: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
3a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3aa0: 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20        /* 0 */.  
3ab0: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
3ac0: 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20  kie,  0, 1,     
3ad0: 20 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54     BTREE_DEFAULT
3ae0: 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f  _CACHE_SIZE},  /
3af0: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 1 */.      { O
3b00: 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
3b10: 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 8,        0},.
3b20: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
3b30: 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20  er,     0, 2,   
3b40: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
3b50: 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20   OP_Subtract,   
3b60: 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d   1, 2,        1}
3b70: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50  ,.      { OP_IfP
3b80: 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20  os,       1, 8, 
3b90: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
3ba0: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
3bb0: 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20     0, 1,        
3bc0: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36              /* 6
3be0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e   */.      { OP_N
3bf0: 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30  oop,        0, 0
3c00: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
3c10: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
3c20: 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20  w,   1, 1,      
3c30: 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20    0},.    };.   
3c40: 20 69 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 69   int addr;.    i
3c50: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
3c60: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
3c70: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
3c80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
3c90: 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29  sesBtree(v, iDb)
3ca0: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
3cb0: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
3cc0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
3cd0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
3ce0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
3cf0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
3d00: 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65 5f 73  E_NAME, "cache_s
3d10: 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ize", SQLITE_STA
3d20: 54 49 43 29 3b 0a 20 20 20 20 20 20 70 50 61 72  TIC);.      pPar
3d30: 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b 0a 20  se->nMem += 2;. 
3d40: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
3d50: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
3d60: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65  (v, ArraySize(ge
3d70: 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74  tCacheSize), get
3d80: 43 61 63 68 65 53 69 7a 65 29 3b 0a 20 20 20 20  CacheSize);.    
3d90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
3da0: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69  ngeP1(v, addr, i
3db0: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
3dc0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
3dd0: 2c 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a  , addr+1, iDb);.
3de0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3df0: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
3e00: 72 2b 36 2c 20 53 51 4c 49 54 45 5f 44 45 46 41  r+6, SQLITE_DEFA
3e10: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b  ULT_CACHE_SIZE);
3e20: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3e30: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c    int size = sql
3e40: 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c  ite3AbsInt32(sql
3e50: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
3e60: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3e70: 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
3e80: 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69  ion(pParse, 0, i
3e90: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
3ea0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
3eb0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a 65  OP_Integer, size
3ec0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
3ed0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
3ee0: 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69   OP_SetCookie, i
3ef0: 44 62 2c 20 42 54 52 45 45 5f 44 45 46 41 55 4c  Db, BTREE_DEFAUL
3f00: 54 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 31 29  T_CACHE_SIZE, 1)
3f10: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3f20: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
3f30: 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
3f40: 30 29 20 29 3b 0a 20 20 20 20 20 20 70 44 62 2d  0) );.      pDb-
3f50: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
3f60: 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20  size = size;.   
3f70: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
3f80: 65 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d  etCacheSize(pDb-
3f90: 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65  >pBt, pDb->pSche
3fa0: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b  ma->cache_size);
3fb0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23  .    }.  }else.#
3fc0: 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45  endif /* !SQLITE
3fd0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
3fe0: 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f  MAS && !SQLITE_O
3ff0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
4000: 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
4010: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
4020: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a  R_PRAGMAS).  /*.
4030: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
4040: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a  tabase.]page_siz
4050: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
4060: 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73  database.]page_s
4070: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
4080: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
4090: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
40a0: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
40b0: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
40c0: 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79   page size in by
40d0: 74 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  tes.  The second
40e0: 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20   form sets the. 
40f0: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
4100: 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54  e size value.  T
4110: 68 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c  he value can onl
4120: 79 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a  y be set if.  **
4130: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
4140: 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63  s not yet been c
4150: 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69  reated..  */.  i
4160: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
4170: 70 28 7a 4c 65 66 74 2c 22 70 61 67 65 5f 73 69  p(zLeft,"page_si
4180: 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 42  ze")==0 ){.    B
4190: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
41a0: 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  >pBt;.    assert
41b0: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
41c0: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
41d0: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
41e0: 41 4c 57 41 59 53 28 70 42 74 29 20 3f 20 73 71  ALWAYS(pBt) ? sq
41f0: 6c 69 74 65 33 42 74 72 65 65 47 65 74 50 61 67  lite3BtreeGetPag
4200: 65 53 69 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a  eSize(pBt) : 0;.
4210: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
4220: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 70  leInt(pParse, "p
4230: 61 67 65 5f 73 69 7a 65 22 2c 20 73 69 7a 65 29  age_size", size)
4240: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4250: 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79     /* Malloc may
4260: 20 66 61 69 6c 20 77 68 65 6e 20 73 65 74 74 69   fail when setti
4270: 6e 67 20 74 68 65 20 70 61 67 65 2d 73 69 7a 65  ng the page-size
4280: 2c 20 61 73 20 74 68 65 72 65 20 69 73 20 61 6e  , as there is an
4290: 20 69 6e 74 65 72 6e 61 6c 0a 20 20 20 20 20 20   internal.      
42a0: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 74  ** buffer that t
42b0: 68 65 20 70 61 67 65 72 20 6d 6f 64 75 6c 65 20  he pager module 
42c0: 72 65 73 69 7a 65 73 20 75 73 69 6e 67 20 73 71  resizes using sq
42d0: 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 29 2e  lite3_realloc().
42e0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
42f0: 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65  db->nextPagesize
4300: 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a   = sqlite3Atoi(z
4310: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 69 66  Right);.      if
4320: 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d  ( SQLITE_NOMEM==
4330: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50  sqlite3BtreeSetP
4340: 61 67 65 53 69 7a 65 28 70 42 74 2c 20 64 62 2d  ageSize(pBt, db-
4350: 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 2c 2d 31  >nextPagesize,-1
4360: 2c 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64  ,0) ){.        d
4370: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
4380: 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
4390: 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a   }.  }else..  /*
43a0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
43b0: 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65 5f  atabase.]secure_
43c0: 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50 52 41  delete.  **  PRA
43d0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
43e0: 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f  ecure_delete=ON/
43f0: 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  OFF.  **.  ** Th
4400: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
4410: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
4420: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
4430: 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64 65 6c  .  ** secure_del
4440: 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65 20 73  ete flag.  The s
4450: 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67  econd form chang
4460: 65 73 20 74 68 65 20 73 65 63 75 72 65 5f 64 65  es the secure_de
4470: 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67 20 73  lete.  ** flag s
4480: 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70 6f 72  etting and repor
4490: 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75 65 2e  ts thenew value.
44a0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
44b0: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
44c0: 2c 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22  ,"secure_delete"
44d0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 42 74 72 65  )==0 ){.    Btre
44e0: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
44f0: 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d  t;.    int b = -
4500: 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
4510: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
4520: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
4530: 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42   b = sqlite3GetB
4540: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
4550: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
4560: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62   pId2->n==0 && b
4570: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  >=0 ){.      int
4580: 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   ii;.      for(i
4590: 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
45a0: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
45b0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75  sqlite3BtreeSecu
45c0: 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62  reDelete(db->aDb
45d0: 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20  [ii].pBt, b);.  
45e0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
45f0: 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  b = sqlite3Btree
4600: 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74  SecureDelete(pBt
4610: 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , b);.    return
4620: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
4630: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
4640: 22 2c 20 62 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  ", b);.  }else..
4650: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
4660: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78  A [database.]max
4670: 5f 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a  _page_count.  **
4680: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
4690: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
46a0: 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  nt=N.  **.  ** T
46b0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
46c0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
46d0: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
46e0: 65 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e  e.  ** maximum n
46f0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
4700: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
4710: 69 6c 65 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20  ile.  The .  ** 
4720: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65  second form atte
4730: 6d 70 74 73 20 74 6f 20 63 68 61 6e 67 65 20 74  mpts to change t
4740: 68 69 73 20 73 65 74 74 69 6e 67 2e 20 20 42 6f  his setting.  Bo
4750: 74 68 0a 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65  th.  ** forms re
4760: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
4770: 20 73 65 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20   setting..  **. 
4780: 20 2a 2a 20 54 68 65 20 61 62 73 6f 6c 75 74 65   ** The absolute
4790: 20 76 61 6c 75 65 20 6f 66 20 4e 20 69 73 20 75   value of N is u
47a0: 73 65 64 2e 20 20 54 68 69 73 20 69 73 20 75 6e  sed.  This is un
47b0: 64 6f 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d  documented and m
47c0: 69 67 68 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65  ight.  ** change
47d0: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 70 75 72 70  .  The only purp
47e0: 6f 73 65 20 69 73 20 74 6f 20 70 72 6f 76 69 64  ose is to provid
47f0: 65 20 61 6e 20 65 61 73 79 20 77 61 79 20 74 6f  e an easy way to
4800: 20 74 65 73 74 0a 20 20 2a 2a 20 74 68 65 20 73   test.  ** the s
4810: 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 29  qlite3AbsInt32()
4820: 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a   function..  **.
4830: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
4840: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75  tabase.]page_cou
4850: 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  nt.  **.  ** Ret
4860: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
4870: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
4880: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
4890: 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  e..  */.  if( sq
48a0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
48b0: 66 74 2c 22 70 61 67 65 5f 63 6f 75 6e 74 22 29  ft,"page_count")
48c0: 3d 3d 30 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  ==0.   || sqlite
48d0: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22  3StrICmp(zLeft,"
48e0: 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22 29  max_page_count")
48f0: 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74  ==0.  ){.    int
4900: 20 69 52 65 67 3b 0a 20 20 20 20 69 66 28 20 73   iReg;.    if( s
4910: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
4920: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
4930: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
4940: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
4950: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
4960: 69 44 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d  iDb);.    iReg =
4970: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
4980: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
4990: 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d  Tolower(zLeft[0]
49a0: 29 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20  )=='p' ){.      
49b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
49c0: 32 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e  2(v, OP_Pagecoun
49d0: 74 2c 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20  t, iDb, iReg);. 
49e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
49f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4a00: 33 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74  3(v, OP_MaxPgcnt
4a10: 2c 20 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20  , iDb, iReg, .  
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 62 73        sqlite3Abs
4a40: 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f  Int32(sqlite3Ato
4a50: 69 28 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20  i(zRight)));.   
4a60: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
4a70: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
4a80: 65 73 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20  esultRow, iReg, 
4a90: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
4aa0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
4ab0: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
4ac0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
4ad0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
4ae0: 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45  E, zLeft, SQLITE
4af0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d  _TRANSIENT);.  }
4b00: 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  else..  /*.  ** 
4b10: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
4b20: 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a  e.]locking_mode.
4b30: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
4b40: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f  tabase.]locking_
4b50: 6d 6f 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65  mode = (normal|e
4b60: 78 63 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20  xclusive).  */. 
4b70: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
4b80: 43 6d 70 28 7a 4c 65 66 74 2c 22 6c 6f 63 6b 69  Cmp(zLeft,"locki
4b90: 6e 67 5f 6d 6f 64 65 22 29 3d 3d 30 20 29 7b 0a  ng_mode")==0 ){.
4ba0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
4bb0: 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b  zRet = "normal";
4bc0: 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d  .    int eMode =
4bd0: 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28   getLockingMode(
4be0: 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20 20 69 66  zRight);..    if
4bf0: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20  ( pId2->n==0 && 
4c00: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4c10: 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 20 29  KINGMODE_QUERY )
4c20: 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c  {.      /* Simpl
4c30: 65 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e  e "PRAGMA lockin
4c40: 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74 65 6d 65  g_mode;" stateme
4c50: 6e 74 2e 20 54 68 69 73 20 69 73 20 61 20 71 75  nt. This is a qu
4c60: 65 72 79 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ery for.      **
4c70: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 65 66   the current def
4c80: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64  ault locking mod
4c90: 65 20 28 77 68 69 63 68 20 6d 61 79 20 62 65 20  e (which may be 
4ca0: 64 69 66 66 65 72 65 6e 74 20 74 6f 0a 20 20 20  different to.   
4cb0: 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e     ** the lockin
4cc0: 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65 20 6d 61  g-mode of the ma
4cd0: 69 6e 20 64 61 74 61 62 61 73 65 29 2e 0a 20 20  in database)..  
4ce0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f      */.      eMo
4cf0: 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63  de = db->dfltLoc
4d00: 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65  kMode;.    }else
4d10: 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70  {.      Pager *p
4d20: 50 61 67 65 72 3b 0a 20 20 20 20 20 20 69 66 28  Pager;.      if(
4d30: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20   pId2->n==0 ){. 
4d40: 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
4d50: 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 6e 6f  ndicates that no
4d60: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 77   database name w
4d70: 61 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  as specified as 
4d80: 70 61 72 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  part.        ** 
4d90: 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f  of the PRAGMA co
4da0: 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69 73 20 63  mmand. In this c
4db0: 61 73 65 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d  ase the locking-
4dc0: 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a 20 20 20  mode must be.   
4dd0: 20 20 20 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61       ** set on a
4de0: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
4df0: 62 61 73 65 73 2c 20 61 73 20 77 65 6c 6c 20 61  bases, as well a
4e00: 73 20 74 68 65 20 6d 61 69 6e 20 64 62 20 66 69  s the main db fi
4e10: 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20  le..        **. 
4e20: 20 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20         ** Also, 
4e30: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 66 6c 74  the sqlite3.dflt
4e40: 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c  LockMode variabl
4e50: 65 20 69 73 20 73 65 74 20 73 6f 20 74 68 61 74  e is set so that
4e60: 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 79 20  .        ** any 
4e70: 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61 74 74  subsequently att
4e80: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
4e90: 61 6c 73 6f 20 75 73 65 20 74 68 65 20 73 70 65  also use the spe
4ea0: 63 69 66 69 65 64 0a 20 20 20 20 20 20 20 20 2a  cified.        *
4eb0: 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a  * locking mode..
4ec0: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
4ed0: 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
4ee0: 20 20 20 61 73 73 65 72 74 28 70 44 62 3d 3d 26     assert(pDb==&
4ef0: 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20  db->aDb[0]);.   
4f00: 20 20 20 20 20 66 6f 72 28 69 69 3d 32 3b 20 69       for(ii=2; i
4f10: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
4f20: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 50 61 67  {.          pPag
4f30: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
4f40: 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 69  ePager(db->aDb[i
4f50: 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 20  i].pBt);.       
4f60: 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c     sqlite3PagerL
4f70: 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65  ockingMode(pPage
4f80: 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20  r, eMode);.     
4f90: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
4fa0: 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20  >dfltLockMode = 
4fb0: 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20  (u8)eMode;.     
4fc0: 20 7d 0a 20 20 20 20 20 20 70 50 61 67 65 72 20   }.      pPager 
4fd0: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
4fe0: 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ger(pDb->pBt);. 
4ff0: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c       eMode = sql
5000: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
5010: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
5020: 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  de);.    }..    
5030: 61 73 73 65 72 74 28 65 4d 6f 64 65 3d 3d 50 41  assert(eMode==PA
5040: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
5050: 4e 4f 52 4d 41 4c 7c 7c 65 4d 6f 64 65 3d 3d 50  NORMAL||eMode==P
5060: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
5070: 5f 45 58 43 4c 55 53 49 56 45 29 3b 0a 20 20 20  _EXCLUSIVE);.   
5080: 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45   if( eMode==PAGE
5090: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58  R_LOCKINGMODE_EX
50a0: 43 4c 55 53 49 56 45 20 29 7b 0a 20 20 20 20 20  CLUSIVE ){.     
50b0: 20 7a 52 65 74 20 3d 20 22 65 78 63 6c 75 73 69   zRet = "exclusi
50c0: 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ve";.    }.    s
50d0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
50e0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
50f0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
5100: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
5110: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 63 6b 69  AME_NAME, "locki
5120: 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45  ng_mode", SQLITE
5130: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
5140: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
5150: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
5160: 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c 20 30 29  , 1, 0, zRet, 0)
5170: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5180: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
5190: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
51a0: 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20    }else..  /*.  
51b0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
51c0: 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f  base.]journal_mo
51d0: 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  de.  **  PRAGMA 
51e0: 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e  [database.]journ
51f0: 61 6c 5f 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20 20  al_mode =.  **  
5200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5210: 20 20 20 20 28 64 65 6c 65 74 65 7c 70 65 72 73      (delete|pers
5220: 69 73 74 7c 6f 66 66 7c 74 72 75 6e 63 61 74 65  ist|off|truncate
5230: 7c 6d 65 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66 29  |memory|wal|off)
5240: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
5250: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
5260: 2c 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 29  ,"journal_mode")
5270: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 65  ==0 ){.    int e
5280: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Mode;        /* 
5290: 4f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52  One of the PAGER
52a0: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
52b0: 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20 20   symbols */.    
52c0: 69 6e 74 20 69 69 3b 20 20 20 20 20 20 20 20 20  int ii;         
52d0: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
52e0: 72 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 46 6f 72  r */..    /* For
52f0: 63 65 20 74 68 65 20 73 63 68 65 6d 61 20 74 6f  ce the schema to
5300: 20 62 65 20 6c 6f 61 64 65 64 20 6f 6e 20 61 6c   be loaded on al
5310: 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 54 68  l databases.  Th
5320: 69 73 20 63 61 75 73 65 73 20 61 6c 6c 0a 20 20  is causes all.  
5330: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69    ** database fi
5340: 6c 65 73 20 74 6f 20 62 65 20 6f 70 65 6e 65 64  les to be opened
5350: 20 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c   and the journal
5360: 5f 6d 6f 64 65 73 20 73 65 74 2e 20 20 54 68 69  _modes set.  Thi
5370: 73 20 69 73 0a 20 20 20 20 2a 2a 20 6e 65 63 65  s is.    ** nece
5380: 73 73 61 72 79 20 62 65 63 61 75 73 65 20 73 75  ssary because su
5390: 62 73 65 71 75 65 6e 74 20 70 72 6f 63 65 73 73  bsequent process
53a0: 69 6e 67 20 6d 75 73 74 20 6b 6e 6f 77 20 69 66  ing must know if
53b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 73 0a 20   the databases. 
53c0: 20 20 20 2a 2a 20 61 72 65 20 69 6e 20 57 41 4c     ** are in WAL
53d0: 20 6d 6f 64 65 2e 20 2a 2f 0a 20 20 20 20 69 66   mode. */.    if
53e0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
53f0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 7b 0a 20  ema(pParse) ){. 
5400: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
5410: 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  _out;.    }..   
5420: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
5430: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
5440: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
5450: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
5460: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f 75  LNAME_NAME, "jou
5470: 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c 49  rnal_mode", SQLI
5480: 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20  TE_STATIC);..   
5490: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29   if( zRight==0 )
54a0: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
54b0: 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45  ere is no "=MODE
54c0: 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  " part of the pr
54d0: 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72 79  agma, do a query
54e0: 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 2a   for the.      *
54f0: 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a  * current mode *
5500: 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  /.      eMode = 
5510: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
5520: 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c  E_QUERY;.    }el
5530: 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  se{.      const 
5540: 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20  char *zMode;.   
5550: 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74     int n = sqlit
5560: 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
5570: 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65 4d  t);.      for(eM
5580: 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20  ode=0; (zMode = 
5590: 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
55a0: 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d  dename(eMode))!=
55b0: 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20  0; eMode++){.   
55c0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
55d0: 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c  StrNICmp(zRight,
55e0: 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20   zMode, n)==0 ) 
55f0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
5600: 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65 20       if( !zMode 
5610: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
5620: 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61 72   the "=MODE" par
5630: 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  t does not match
5640: 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e   any known journ
5650: 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20  al mode,.       
5660: 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71 75   ** then do a qu
5670: 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 65  ery */.        e
5680: 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55  Mode = PAGER_JOU
5690: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  RNALMODE_QUERY;.
56a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
56b0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47    if( eMode==PAG
56c0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
56d0: 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d  UERY && pId2->n=
56e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43  =0 ){.      /* C
56f0: 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20 6a  onvert "PRAGMA j
5700: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74  ournal_mode" int
5710: 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a  o "PRAGMA main.j
5720: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a  ournal_mode" */.
5730: 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a 20        iDb = 0;. 
5740: 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31       pId2->n = 1
5750: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
5760: 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69  ii=db->nDb-1; ii
5770: 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20  >=0; ii--){.    
5780: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69    if( db->aDb[ii
5790: 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44  ].pBt && (ii==iD
57a0: 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29  b || pId2->n==0)
57b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
57c0: 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65  te3VdbeUsesBtree
57d0: 28 76 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 20  (v, ii);.       
57e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
57f0: 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c  p3(v, OP_Journal
5800: 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d 6f  Mode, ii, 1, eMo
5810: 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  de);.      }.   
5820: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
5830: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
5840: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
5850: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20  .  }else..  /*. 
5860: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
5870: 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73  abase.]journal_s
5880: 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20  ize_limit.  **  
5890: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
58a0: 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c  .]journal_size_l
58b0: 69 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  imit=N.  **.  **
58c0: 20 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20   Get or set the 
58d0: 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f  size limit on ro
58e0: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
58f0: 69 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  iles..  */.  if(
5900: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
5910: 7a 4c 65 66 74 2c 22 6a 6f 75 72 6e 61 6c 5f 73  zLeft,"journal_s
5920: 69 7a 65 5f 6c 69 6d 69 74 22 29 3d 3d 30 20 29  ize_limit")==0 )
5930: 7b 0a 20 20 20 20 50 61 67 65 72 20 2a 70 50 61  {.    Pager *pPa
5940: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
5950: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
5960: 29 3b 0a 20 20 20 20 69 36 34 20 69 4c 69 6d 69  );.    i64 iLimi
5970: 74 20 3d 20 2d 32 3b 0a 20 20 20 20 69 66 28 20  t = -2;.    if( 
5980: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
5990: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 52  sqlite3Atoi64(zR
59a0: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 2c 20 73  ight, &iLimit, s
59b0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
59c0: 52 69 67 68 74 29 2c 20 53 51 4c 49 54 45 5f 55  Right), SQLITE_U
59d0: 54 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28 20  TF8);.      if( 
59e0: 69 4c 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d  iLimit<-1 ) iLim
59f0: 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20  it = -1;.    }. 
5a00: 20 20 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69     iLimit = sqli
5a10: 74 65 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53  te3PagerJournalS
5a20: 69 7a 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c  izeLimit(pPager,
5a30: 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65   iLimit);.    re
5a40: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
5a50: 61 72 73 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73  arse, "journal_s
5a60: 69 7a 65 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d  ize_limit", iLim
5a70: 69 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 65  it);.  }else..#e
5a80: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
5a90: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
5aa0: 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  S */..  /*.  ** 
5ab0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
5ac0: 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20  e.]auto_vacuum. 
5ad0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
5ae0: 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75  abase.]auto_vacu
5af0: 75 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47  um=N.  **.  ** G
5b00: 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  et or set the va
5b10: 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
5b20: 61 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d  ase 'auto-vacuum
5b30: 27 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a  ' parameter..  *
5b40: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f  * The value is o
5b50: 6e 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31  ne of:  0 NONE 1
5b60: 20 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e   FULL 2 INCREMEN
5b70: 54 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66  TAL.  */.#ifndef
5b80: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
5b90: 4f 56 41 43 55 55 4d 0a 20 20 69 66 28 20 73 71  OVACUUM.  if( sq
5ba0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
5bb0: 66 74 2c 22 61 75 74 6f 5f 76 61 63 75 75 6d 22  ft,"auto_vacuum"
5bc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 42 74 72 65  )==0 ){.    Btre
5bd0: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
5be0: 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  t;.    assert( p
5bf0: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
5c00: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
5c10: 6d 61 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  ma(pParse) ){.  
5c20: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
5c30: 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  out;.    }.    i
5c40: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
5c50: 20 20 20 20 69 6e 74 20 61 75 74 6f 5f 76 61 63      int auto_vac
5c60: 75 75 6d 3b 0a 20 20 20 20 20 20 69 66 28 20 41  uum;.      if( A
5c70: 4c 57 41 59 53 28 70 42 74 29 20 29 7b 0a 20 20  LWAYS(pBt) ){.  
5c80: 20 20 20 20 20 20 20 61 75 74 6f 5f 76 61 63 75         auto_vacu
5c90: 75 6d 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  um = sqlite3Btre
5ca0: 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70  eGetAutoVacuum(p
5cb0: 42 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  Bt);.      }else
5cc0: 7b 0a 20 20 20 20 20 20 20 20 20 61 75 74 6f 5f  {.         auto_
5cd0: 76 61 63 75 75 6d 20 3d 20 53 51 4c 49 54 45 5f  vacuum = SQLITE_
5ce0: 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55  DEFAULT_AUTOVACU
5cf0: 55 4d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  UM;.      }.    
5d00: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
5d10: 74 28 70 50 61 72 73 65 2c 20 22 61 75 74 6f 5f  t(pParse, "auto_
5d20: 76 61 63 75 75 6d 22 2c 20 61 75 74 6f 5f 76 61  vacuum", auto_va
5d30: 63 75 75 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  cuum);.    }else
5d40: 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75 74  {.      int eAut
5d50: 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75  o = getAutoVacuu
5d60: 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  m(zRight);.     
5d70: 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d   assert( eAuto>=
5d80: 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b  0 && eAuto<=2 );
5d90: 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41  .      db->nextA
5da0: 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75  utovac = (u8)eAu
5db0: 74 6f 3b 0a 20 20 20 20 20 20 69 66 28 20 41 4c  to;.      if( AL
5dc0: 57 41 59 53 28 65 41 75 74 6f 3e 3d 30 29 20 29  WAYS(eAuto>=0) )
5dd0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  {.        /* Cal
5de0: 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28  l SetAutoVacuum(
5df0: 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c  ) to set initial
5e00: 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ize the internal
5e10: 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20   auto and.      
5e20: 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d    ** incr-vacuum
5e30: 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20   flags. This is 
5e40: 72 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65  required in case
5e50: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
5e60: 0a 20 20 20 20 20 20 20 20 2a 2a 20 63 72 65 61  .        ** crea
5e70: 74 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  tes the database
5e80: 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70   file. It is imp
5e90: 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74 20 69  ortant that it i
5ea0: 73 20 63 72 65 61 74 65 64 0a 20 20 20 20 20 20  s created.      
5eb0: 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d    ** as an auto-
5ec0: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
5ed0: 62 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  b..        */.  
5ee0: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
5ef0: 65 33 42 74 72 65 65 53 65 74 41 75 74 6f 56 61  e3BtreeSetAutoVa
5f00: 63 75 75 6d 28 70 42 74 2c 20 65 41 75 74 6f 29  cuum(pBt, eAuto)
5f10: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
5f20: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 28  ==SQLITE_OK && (
5f30: 65 41 75 74 6f 3d 3d 31 20 7c 7c 20 65 41 75 74  eAuto==1 || eAut
5f40: 6f 3d 3d 32 29 20 29 7b 0a 20 20 20 20 20 20 20  o==2) ){.       
5f50: 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74 74 69     /* When setti
5f60: 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61 63 75  ng the auto_vacu
5f70: 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74 68 65  um mode to eithe
5f80: 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20 20 20  r "full" or .   
5f90: 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65         ** "incre
5fa0: 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74  mental", write t
5fb0: 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61  he value of meta
5fc0: 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62  [6] in the datab
5fd0: 61 73 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a  ase.          **
5fe0: 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72   file. Before wr
5ff0: 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d  iting to meta[6]
6000: 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74  , check that met
6010: 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20  a[3] indicates. 
6020: 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74           ** that
6030: 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20   this really is 
6040: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63  an auto-vacuum c
6050: 61 70 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e  apable database.
6060: 0a 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  .          */.  
6070: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
6080: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
6090: 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20  setMeta6[] = {. 
60a0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
60b0: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
60c0: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d                0}
60e0: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
60f0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
6100: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c  adCookie,     0,
6110: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
6120: 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53      BTREE_LARGES
6130: 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20  T_ROOT_PAGE},.  
6140: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49            { OP_I
6150: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 31  f,             1
6160: 2c 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20  ,         0,    
6170: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
6180: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
6190: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c          { OP_Hal
61a0: 74 2c 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  t,           SQL
61b0: 49 54 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74  ITE_OK, OE_Abort
61c0: 2c 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20  ,          0},  
61d0: 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20    /* 3 */.      
61e0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
61f0: 65 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 20  er,        0,   
6200: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
6210: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
6220: 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 4 */.        
6230: 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b      { OP_SetCook
6240: 69 65 2c 20 20 20 20 20 20 30 2c 20 20 20 20 20  ie,      0,     
6250: 20 20 20 20 42 54 52 45 45 5f 49 4e 43 52 5f 56      BTREE_INCR_V
6260: 41 43 55 55 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a  ACUUM, 1},    /*
6270: 20 35 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   5 */.          
6280: 7d 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  };.          int
6290: 20 69 41 64 64 72 3b 0a 20 20 20 20 20 20 20 20   iAddr;.        
62a0: 20 20 69 41 64 64 72 20 3d 20 73 71 6c 69 74 65    iAddr = sqlite
62b0: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
62c0: 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 4d  , ArraySize(setM
62d0: 65 74 61 36 29 2c 20 73 65 74 4d 65 74 61 36 29  eta6), setMeta6)
62e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
62f0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
6300: 76 2c 20 69 41 64 64 72 2c 20 69 44 62 29 3b 0a  v, iAddr, iDb);.
6310: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
6320: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
6330: 20 69 41 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a   iAddr+1, iDb);.
6340: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
6350: 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c  3VdbeChangeP2(v,
6360: 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72 2b   iAddr+2, iAddr+
6370: 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  4);.          sq
6380: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
6390: 31 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41  1(v, iAddr+4, eA
63a0: 75 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20  uto-1);.        
63b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
63c0: 6e 67 65 50 31 28 76 2c 20 69 41 64 64 72 2b 35  ngeP1(v, iAddr+5
63d0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
63e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
63f0: 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
6400: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6410: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
6420: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a  #endif..  /*.  *
6430: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
6440: 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74 61 6c  ase.]incremental
6450: 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a  _vacuum(N).  **.
6460: 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70 73 20    ** Do N steps 
6470: 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  of incremental v
6480: 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20 64 61  acuuming on a da
6490: 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23 69 66  tabase..  */.#if
64a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
64b0: 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 69 66  _AUTOVACUUM.  if
64c0: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
64d0: 28 7a 4c 65 66 74 2c 22 69 6e 63 72 65 6d 65 6e  (zLeft,"incremen
64e0: 74 61 6c 5f 76 61 63 75 75 6d 22 29 3d 3d 30 20  tal_vacuum")==0 
64f0: 29 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d 69  ){.    int iLimi
6500: 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28  t, addr;.    if(
6510: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
6520: 6d 61 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  ma(pParse) ){.  
6530: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
6540: 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  out;.    }.    i
6550: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20  f( zRight==0 || 
6560: 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32  !sqlite3GetInt32
6570: 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74  (zRight, &iLimit
6580: 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29  ) || iLimit<=0 )
6590: 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d  {.      iLimit =
65a0: 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20   0x7fffffff;.   
65b0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65   }.    sqlite3Be
65c0: 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
65d0: 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62  n(pParse, 0, iDb
65e0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
65f0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
6600: 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20  nteger, iLimit, 
6610: 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d 20 73  1);.    addr = s
6620: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
6630: 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  (v, OP_IncrVacuu
6640: 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c  m, iDb);.    sql
6650: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
6660: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
6670: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
6680: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
6690: 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a  AddImm, 1, -1);.
66a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
66b0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp2(v, OP_IfPo
66c0: 73 2c 20 31 2c 20 61 64 64 72 29 3b 0a 20 20 20  s, 1, addr);.   
66d0: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
66e0: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
66f0: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23   }else.#endif..#
6700: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6710: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
6720: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6730: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61  MA [database.]ca
6740: 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50  che_size.  **  P
6750: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
6760: 5d 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20  ]cache_size=N.  
6770: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
6780: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
6790: 68 65 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c  he current local
67a0: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
67b0: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
67c0: 20 73 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e   size. The secon
67d0: 64 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 20  d form sets the 
67e0: 6c 6f 63 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20  local.  ** page 
67f0: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
6800: 2e 20 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74  .  If N is posit
6810: 69 76 65 20 74 68 65 6e 20 74 68 61 74 20 69 73  ive then that is
6820: 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72   the.  ** number
6830: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
6840: 20 63 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73   cache.  If N is
6850: 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20   negative, then 
6860: 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20  the.  ** number 
6870: 6f 66 20 70 61 67 65 73 20 69 73 20 61 64 6a 75  of pages is adju
6880: 73 74 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  sted so that the
6890: 20 63 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b   cache uses -N k
68a0: 69 62 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66  ibibytes.  ** of
68b0: 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20   memory..  */.  
68c0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
68d0: 6d 70 28 7a 4c 65 66 74 2c 22 63 61 63 68 65 5f  mp(zLeft,"cache_
68e0: 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  size")==0 ){.   
68f0: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
6900: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
6910: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
6920: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  ;.    assert( sq
6930: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
6940: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
6950: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
6960: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
6970: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
6980: 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a 65  rse, "cache_size
6990: 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  ", pDb->pSchema-
69a0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
69b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
69c0: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
69d0: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
69e0: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
69f0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
6a00: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
6a10: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
6a20: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
6a30: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
6a40: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
6a50: 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20    }else..  /*.  
6a60: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
6a70: 62 61 73 65 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28  base.]mmap_size(
6a80: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65  N).  **.  ** Use
6a90: 64 20 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67  d to set mapping
6aa0: 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65   size limit. The
6ab0: 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69   mapping size li
6ac0: 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64  mit is.  ** used
6ad0: 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67   to limit the ag
6ae0: 67 72 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20  gregate size of 
6af0: 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65  all memory mappe
6b00: 64 20 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65  d regions of the
6b10: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66  .  ** database f
6b20: 69 6c 65 2e 20 49 66 20 74 68 69 73 20 70 61 72  ile. If this par
6b30: 61 6d 65 74 65 72 20 69 73 20 73 65 74 20 74 6f  ameter is set to
6b40: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f   zero, then memo
6b50: 72 79 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20  ry mapping.  ** 
6b60: 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61  is not used at a
6b70: 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  ll.  If N is neg
6b80: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20  ative, then the 
6b90: 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d  default memory m
6ba0: 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65  ap.  ** limit de
6bb0: 74 65 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69  termined by sqli
6bc0: 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
6bd0: 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49  E_CONFIG_MMAP_SI
6be0: 5a 45 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a  ZE) is set..  **
6bf0: 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e   The parameter N
6c00: 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20   is measured in 
6c10: 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  bytes..  **.  **
6c20: 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 61   This value is a
6c30: 64 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e  dvisory.  The un
6c40: 64 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20  derlying VFS is 
6c50: 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d  free to memory m
6c60: 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c  ap.  ** as littl
6c70: 65 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20  e or as much as 
6c80: 69 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70  it wants.  Excep
6c90: 74 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20 74  t, if N is set t
6ca0: 6f 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  o 0 then the.  *
6cb0: 2a 20 75 70 70 65 72 20 6c 61 79 65 72 73 20 77  * upper layers w
6cc0: 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65  ill never invoke
6cd0: 20 74 68 65 20 78 46 65 74 63 68 20 69 6e 74 65   the xFetch inte
6ce0: 72 66 61 63 65 73 20 74 6f 20 74 68 65 20 56 46  rfaces to the VF
6cf0: 53 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  S..  */.  if( sq
6d00: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
6d10: 66 74 2c 22 6d 6d 61 70 5f 73 69 7a 65 22 29 3d  ft,"mmap_size")=
6d20: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
6d30: 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66 20  3_int64 sz;.#if 
6d40: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6d50: 53 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65 72  SIZE>0.    asser
6d60: 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
6d70: 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
6d80: 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
6d90: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
6da0: 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 73   int ii;.      s
6db0: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 52 69  qlite3Atoi64(zRi
6dc0: 67 68 74 2c 20 26 73 7a 2c 20 73 71 6c 69 74 65  ght, &sz, sqlite
6dd0: 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
6de0: 29 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  ), SQLITE_UTF8);
6df0: 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20  .      if( sz<0 
6e00: 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c  ) sz = sqlite3Gl
6e10: 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61  obalConfig.szMma
6e20: 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  p;.      if( pId
6e30: 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a  2->n==0 ) db->sz
6e40: 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20  Mmap = sz;.     
6e50: 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d   for(ii=db->nDb-
6e60: 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b  1; ii>=0; ii--){
6e70: 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
6e80: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20  >aDb[ii].pBt && 
6e90: 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32  (ii==iDb || pId2
6ea0: 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20  ->n==0) ){.     
6eb0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
6ec0: 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62  eSetMmapLimit(db
6ed0: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73  ->aDb[ii].pBt, s
6ee0: 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  z);.        }.  
6ef0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
6f00: 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20  sz = -1;.    rc 
6f10: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  = sqlite3_file_c
6f20: 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20  ontrol(db, zDb, 
6f30: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41  SQLITE_FCNTL_MMA
6f40: 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65  P_SIZE, &sz);.#e
6f50: 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a  lse.    sz = 0;.
6f60: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
6f70: 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  OK;.#endif.    i
6f80: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
6f90: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
6fa0: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
6fb0: 2c 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 20 73  , "mmap_size", s
6fc0: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  z);.    }else if
6fd0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54  ( rc!=SQLITE_NOT
6fe0: 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20 20 70  FOUND ){.      p
6ff0: 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20  Parse->nErr++;. 
7000: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20       pParse->rc 
7010: 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  = rc;.    }.  }e
7020: 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  lse..  /*.  **  
7030: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
7040: 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  re.  **   PRAGMA
7050: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64   temp_store = "d
7060: 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22  efault"|"memory"
7070: 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a  |"file".  **.  *
7080: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
7090: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
70a0: 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72  of the temp_stor
70b0: 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  e flag.  Changin
70c0: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
70d0: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
70e0: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
70f0: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
7100: 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  d the default.  
7110: 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  ** value will be
7120: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
7130: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
7140: 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a  base is opened..
7150: 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74    **.  ** Note t
7160: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
7170: 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61  le for the libra
7180: 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ry compile-time 
7190: 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20  options to.  ** 
71a0: 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65  override this se
71b0: 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 69 66 28  tting.  */.  if(
71c0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
71d0: 7a 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74 6f  zLeft, "temp_sto
71e0: 72 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  re")==0 ){.    i
71f0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
7200: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
7210: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d  Int(pParse, "tem
7220: 70 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65  p_store", db->te
7230: 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d  mp_store);.    }
7240: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e  else{.      chan
7250: 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50  geTempStorage(pP
7260: 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20  arse, zRight);. 
7270: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
7280: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
7290: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
72a0: 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41  ctory.  **   PRA
72b0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
72c0: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64  irectory = ""|"d
72d0: 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20  irectory_name". 
72e0: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
72f0: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
7300: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
7310: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7320: 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  ry flag.  Changi
7330: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
7340: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
7350: 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62  c directory to b
7360: 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
7370: 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a  rary files..  **
7380: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
7390: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
73a0: 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74  s to the default
73b0: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
73c0: 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a  tory search..  *
73d0: 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64  * If temporary d
73e0: 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e  irectory is chan
73f0: 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69  ged, then invali
7400: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e  dateTempStorage.
7410: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 69 66 28  .  **.  */.  if(
7420: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
7430: 7a 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74 6f  zLeft, "temp_sto
7440: 72 65 5f 64 69 72 65 63 74 6f 72 79 22 29 3d 3d  re_directory")==
7450: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  0 ){.    if( !zR
7460: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
7470: 28 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64  ( sqlite3_temp_d
7480: 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20  irectory ){.    
7490: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
74a0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
74b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
74c0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
74d0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
74e0: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
74f0: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
7500: 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53  ctory", SQLITE_S
7510: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
7520: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
7530: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
7540: 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65   0, 1, 0, sqlite
7550: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
7560: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
7570: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
7580: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
7590: 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 1);.      }.
75a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
75b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
75c0: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
75d0: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
75e0: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
75f0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
7600: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
7610: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
7620: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
7630: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
7640: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
7650: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
7660: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
7670: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
7680: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
7690: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
76a0: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
76b0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
76c0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
76d0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45     if( SQLITE_TE
76e0: 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20  MP_STORE==0.    
76f0: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
7700: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
7710: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
7720: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  ).       || (SQL
7730: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
7740: 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  2 && db->temp_st
7750: 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b  ore==1).      ){
7760: 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64  .        invalid
7770: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70  ateTempStorage(p
7780: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
7790: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
77a0: 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ee(sqlite3_temp_
77b0: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
77c0: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
77d0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
77e0: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
77f0: 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
7800: 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74  ntf("%s", zRight
7810: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
7820: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
7830: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
7840: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   0;.      }.#end
7850: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
7860: 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20  T_WSD */.    }. 
7870: 20 7d 65 6c 73 65 0a 0a 23 69 66 20 53 51 4c 49   }else..#if SQLI
7880: 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 2f 2a 0a 20  TE_OS_WIN.  /*. 
7890: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74   **   PRAGMA dat
78a0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
78b0: 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  y.  **   PRAGMA 
78c0: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
78d0: 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63  tory = ""|"direc
78e0: 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a  tory_name".  **.
78f0: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
7900: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
7910: 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 5f 73  ue of the data_s
7920: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66  tore_directory f
7930: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
7940: 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65   ** the value se
7950: 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64 69  ts a specific di
7960: 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73  rectory to be us
7970: 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ed for database 
7980: 66 69 6c 65 73 20 74 68 61 74 0a 20 20 2a 2a 20  files that.  ** 
7990: 77 65 72 65 20 73 70 65 63 69 66 69 65 64 20 77  were specified w
79a0: 69 74 68 20 61 20 72 65 6c 61 74 69 76 65 20 70  ith a relative p
79b0: 61 74 68 6e 61 6d 65 2e 20 20 53 65 74 74 69 6e  athname.  Settin
79c0: 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69  g to a null stri
79d0: 6e 67 20 72 65 76 65 72 74 73 0a 20 20 2a 2a 20  ng reverts.  ** 
79e0: 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20 64  to the default d
79f0: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
7a00: 79 2c 20 77 68 69 63 68 20 66 6f 72 20 64 61 74  y, which for dat
7a10: 61 62 61 73 65 20 66 69 6c 65 73 20 73 70 65 63  abase files spec
7a20: 69 66 69 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ified with.  ** 
7a30: 61 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 20  a relative path 
7a40: 77 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 62 65  will probably be
7a50: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 75   based on the cu
7a60: 72 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20  rrent directory 
7a70: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 72 6f  for the.  ** pro
7a80: 63 65 73 73 2e 20 20 44 61 74 61 62 61 73 65 20  cess.  Database 
7a90: 66 69 6c 65 20 73 70 65 63 69 66 69 65 64 20 77  file specified w
7aa0: 69 74 68 20 61 6e 20 61 62 73 6f 6c 75 74 65 20  ith an absolute 
7ab0: 70 61 74 68 20 61 72 65 20 6e 6f 74 20 69 6d 70  path are not imp
7ac0: 61 63 74 65 64 0a 20 20 2a 2a 20 62 79 20 74 68  acted.  ** by th
7ad0: 69 73 20 73 65 74 74 69 6e 67 2c 20 72 65 67 61  is setting, rega
7ae0: 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20 76 61  rdless of its va
7af0: 6c 75 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  lue..  **.  */. 
7b00: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
7b10: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 64 61 74 61  Cmp(zLeft, "data
7b20: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7b30: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  ")==0 ){.    if(
7b40: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
7b50: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 64 61    if( sqlite3_da
7b60: 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a  ta_directory ){.
7b70: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
7b80: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
7b90: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
7ba0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
7bb0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
7bc0: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
7bd0: 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72 65 5f      "data_store_
7be0: 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49  directory", SQLI
7bf0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
7c00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7c10: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
7c20: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71  ng8, 0, 1, 0, sq
7c30: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7c40: 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  tory, 0);.      
7c50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
7c60: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
7c70: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
7c80: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23    }.    }else{.#
7c90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7ca0: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
7cb0: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
7cc0: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
7cd0: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
7ce0: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
7cf0: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
7d00: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
7d10: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
7d20: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
7d30: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
7d40: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
7d50: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7d60: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
7d70: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
7d80: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
7d90: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
7da0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
7db0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7dc0: 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61 74 61  ree(sqlite3_data
7dd0: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
7de0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7df0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
7e00: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
7e10: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
7e20: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
7e30: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
7e40: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
7e50: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20  _data_directory 
7e60: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
7e70: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
7e80: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
7e90: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
7ea0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
7eb0: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
7ec0: 4e 47 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20  NG_STYLE).#  if 
7ed0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
7ee0: 5f 29 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  _).#    define S
7ef0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
7f00: 4b 49 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20  KING_STYLE 1.#  
7f10: 65 6c 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65  else.#    define
7f20: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c   SQLITE_ENABLE_L
7f30: 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23  OCKING_STYLE 0.#
7f40: 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23    endif.#endif.#
7f50: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
7f60: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
7f70: 20 2f 2a 0a 20 20 20 2a 2a 20 20 20 50 52 41 47   /*.   **   PRAG
7f80: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f  MA [database.]lo
7f90: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20  ck_proxy_file.  
7fa0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
7fb0: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f  tabase.]lock_pro
7fc0: 78 79 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f  xy_file = ":auto
7fd0: 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61  :"|"lock_file_pa
7fe0: 74 68 22 0a 20 20 20 2a 2a 0a 20 20 20 2a 2a 20  th".   **.   ** 
7ff0: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
8000: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c  e value of the l
8010: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 66  ock_proxy_file f
8020: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
8030: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73    ** the value s
8040: 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20 66  ets a specific f
8050: 69 6c 65 20 74 6f 20 62 65 20 75 73 65 64 20 66  ile to be used f
8060: 6f 72 20 64 61 74 61 62 61 73 65 20 61 63 63 65  or database acce
8070: 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 20 2a 2a 0a  ss locks..   **.
8080: 20 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69     */.  if( sqli
8090: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
80a0: 2c 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  , "lock_proxy_fi
80b0: 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  le")==0 ){.    i
80c0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
80d0: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
80e0: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
80f0: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
8100: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f  .      char *pro
8110: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e  xy_file_path = N
8120: 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ULL;.      sqlit
8130: 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d  e3_file *pFile =
8140: 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
8150: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
8160: 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f   sqlite3OsFileCo
8170: 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c  ntrolHint(pFile,
8180: 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b   SQLITE_GET_LOCK
8190: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81b0: 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69         &proxy_fi
81c0: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20  le_path);.      
81d0: 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f 78 79  .      if( proxy
81e0: 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20  _file_path ){.  
81f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8200: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
8210: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8220: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
8230: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
8240: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8260: 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f      "lock_proxy_
8270: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
8280: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
8290: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
82a0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
82b0: 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66  0, 1, 0, proxy_f
82c0: 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20  ile_path, 0);.  
82d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
82e0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
82f0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
8300: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
8310: 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  e{.      Pager *
8320: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
8330: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
8340: 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  pBt);.      sqli
8350: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
8360: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
8370: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
8380: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
8390: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
83a0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
83b0: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
83c0: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
83d0: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
83e0: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8400: 20 20 20 20 20 20 20 20 20 20 7a 52 69 67 68 74            zRight
8410: 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  );.      } else 
8420: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
8430: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
8440: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
8450: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
8460: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
8470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8480: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b            NULL);
8490: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
84a0: 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f  f( res!=SQLITE_O
84b0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
84c0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
84d0: 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  rse, "failed to 
84e0: 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66  set lock proxy f
84f0: 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67  ile");.        g
8500: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
8510: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
8520: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
8530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
8540: 43 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20  CKING_STYLE */  
8550: 20 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20      .    .  /*. 
8560: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
8570: 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e  tabase.]synchron
8580: 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ous.  **   PRAGM
8590: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 79 6e  A [database.]syn
85a0: 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c  chronous=OFF|ON|
85b0: 4e 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a  NORMAL|FULL.  **
85c0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
85d0: 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61  set the local va
85e0: 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e 63 68  lue of the synch
85f0: 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43 68  ronous flag.  Ch
8600: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
8610: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73  local value does
8620: 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65   not make change
8630: 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69  s to the disk fi
8640: 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20  le and the.  ** 
8650: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69  default value wi
8660: 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 74  ll be restored t
8670: 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65  he next time the
8680: 20 64 61 74 61 62 61 73 65 20 69 73 0a 20 20 2a   database is.  *
8690: 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20  * opened..  */. 
86a0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
86b0: 43 6d 70 28 7a 4c 65 66 74 2c 22 73 79 6e 63 68  Cmp(zLeft,"synch
86c0: 72 6f 6e 6f 75 73 22 29 3d 3d 30 20 29 7b 0a 20  ronous")==0 ){. 
86d0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
86e0: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
86f0: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
8700: 75 74 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  ut;.    if( !zRi
8710: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
8720: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
8730: 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  rse, "synchronou
8740: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
8750: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
8760: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
8770: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
8780: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
8790: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
87a0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
87b0: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
87c0: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
87d0: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
87e0: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
87f0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62  lse{.        pDb
8800: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
8810: 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28   getSafetyLevel(
8820: 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20  zRight,0,1)+1;. 
8830: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67         setAllPag
8840: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
8850: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
8860: 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  se.#endif /* SQL
8870: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
8880: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
8890: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
88a0: 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20 20 69 66  LAG_PRAGMAS.  if
88b0: 28 20 66 6c 61 67 50 72 61 67 6d 61 28 70 50 61  ( flagPragma(pPa
88c0: 72 73 65 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67  rse, zLeft, zRig
88d0: 68 74 29 20 29 7b 0a 20 20 20 20 73 65 74 41 6c  ht) ){.    setAl
88e0: 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b  lPagerFlags(db);
88f0: 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20  .  }else.#endif 
8900: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  /* SQLITE_OMIT_F
8910: 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  LAG_PRAGMAS */..
8920: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8930: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
8940: 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AS.  /*.  **   P
8950: 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f  RAGMA table_info
8960: 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20  (<table>).  **. 
8970: 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 69 6e   ** Return a sin
8980: 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68  gle row for each
8990: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e   column of the n
89a0: 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68 65 20  amed table. The 
89b0: 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20  columns of.  ** 
89c0: 74 68 65 20 72 65 74 75 72 6e 65 64 20 64 61 74  the returned dat
89d0: 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a  a set are:.  **.
89e0: 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20 20 20    ** cid:       
89f0: 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62   Column id (numb
8a00: 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  ered from left t
8a10: 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74 69 6e  o right, startin
8a20: 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d  g at 0).  ** nam
8a30: 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  e:       Column 
8a40: 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20  name.  ** type: 
8a50: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63        Column dec
8a60: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20  laration type.. 
8a70: 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20   ** notnull:    
8a80: 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c  True if 'NOT NUL
8a90: 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20 63 6f  L' is part of co
8aa0: 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  lumn declaration
8ab0: 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65  .  ** dflt_value
8ac0: 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  : The default va
8ad0: 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  lue for the colu
8ae0: 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f  mn, if any..  */
8af0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
8b00: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 74 61  rICmp(zLeft, "ta
8b10: 62 6c 65 5f 69 6e 66 6f 22 29 3d 3d 30 20 26 26  ble_info")==0 &&
8b20: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 54   zRight ){.    T
8b30: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
8b40: 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53  if( sqlite3ReadS
8b50: 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20  chema(pParse) ) 
8b60: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
8b70: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
8b80: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
8b90: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
8ba0: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
8bb0: 20 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20       int i, k;. 
8bc0: 20 20 20 20 20 69 6e 74 20 6e 48 69 64 64 65 6e       int nHidden
8bd0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75   = 0;.      Colu
8be0: 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20  mn *pCol;.      
8bf0: 49 6e 64 65 78 20 2a 70 50 6b 3b 0a 20 20 20 20  Index *pPk;.    
8c00: 20 20 66 6f 72 28 70 50 6b 3d 70 54 61 62 2d 3e    for(pPk=pTab->
8c10: 70 49 6e 64 65 78 3b 20 70 50 6b 20 26 26 20 70  pIndex; pPk && p
8c20: 50 6b 2d 3e 61 75 74 6f 49 6e 64 65 78 21 3d 32  Pk->autoIndex!=2
8c30: 3b 20 70 50 6b 3d 70 50 6b 2d 3e 70 4e 65 78 74  ; pPk=pPk->pNext
8c40: 29 7b 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ){}.      sqlite
8c50: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
8c60: 76 2c 20 36 29 3b 0a 20 20 20 20 20 20 70 50 61  v, 6);.      pPa
8c70: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
8c80: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
8c90: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
8ca0: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
8cb0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
8cc0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
8cd0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22  NAME_NAME, "cid"
8ce0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8cf0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8d00: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
8d10: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
8d20: 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45  , "name", SQLITE
8d30: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
8d40: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8d50: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
8d60: 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 79 70 65 22  AME_NAME, "type"
8d70: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8d80: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8d90: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
8da0: 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   3, COLNAME_NAME
8db0: 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c  , "notnull", SQL
8dc0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8dd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8de0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43  tColName(v, 4, C
8df0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 66  OLNAME_NAME, "df
8e00: 6c 74 5f 76 61 6c 75 65 22 2c 20 53 51 4c 49 54  lt_value", SQLIT
8e10: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
8e20: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
8e30: 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c  olName(v, 5, COL
8e40: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c  NAME_NAME, "pk",
8e50: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
8e60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 69  .      sqlite3Vi
8e70: 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
8e80: 28 70 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a  (pParse, pTab);.
8e90: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 70        for(i=0, p
8ea0: 43 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b 20  Col=pTab->aCol; 
8eb0: 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b  i<pTab->nCol; i+
8ec0: 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20  +, pCol++){.    
8ed0: 20 20 20 20 69 66 28 20 49 73 48 69 64 64 65 6e      if( IsHidden
8ee0: 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a  Column(pCol) ){.
8ef0: 20 20 20 20 20 20 20 20 20 20 6e 48 69 64 64 65            nHidde
8f00: 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63  n++;.          c
8f10: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
8f20: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
8f30: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8f40: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 6e 48  OP_Integer, i-nH
8f50: 69 64 64 65 6e 2c 20 31 29 3b 0a 20 20 20 20 20  idden, 1);.     
8f60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8f70: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
8f80: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f  g8, 0, 2, 0, pCo
8f90: 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  l->zName, 0);.  
8fa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8fb0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
8fc0: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a  ring8, 0, 3, 0,.
8fd0: 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d             pCol-
8fe0: 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a  >zType ? pCol->z
8ff0: 54 79 70 65 20 3a 20 22 22 2c 20 30 29 3b 0a 20  Type : "", 0);. 
9000: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9010: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
9020: 6e 74 65 67 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e  nteger, (pCol->n
9030: 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 29 2c  otNull ? 1 : 0),
9040: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28   4);.        if(
9050: 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a   pCol->zDflt ){.
9060: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9070: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
9080: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 35 2c  P_String8, 0, 5,
9090: 20 30 2c 20 28 63 68 61 72 2a 29 70 43 6f 6c 2d   0, (char*)pCol-
90a0: 3e 7a 44 66 6c 74 2c 20 30 29 3b 0a 20 20 20 20  >zDflt, 0);.    
90b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
90c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
90d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c  AddOp2(v, OP_Nul
90e0: 6c 2c 20 30 2c 20 35 29 3b 0a 20 20 20 20 20 20  l, 0, 5);.      
90f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
9100: 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20  (pCol->colFlags 
9110: 26 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45  & COLFLAG_PRIMKE
9120: 59 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  Y)==0 ){.       
9130: 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20     k = 0;.      
9140: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d    }else if( pPk=
9150: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
9160: 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  k = 1;.        }
9170: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
9180: 66 6f 72 28 6b 3d 31 3b 20 41 4c 57 41 59 53 28  for(k=1; ALWAYS(
9190: 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 29 20 26  k<=pTab->nCol) &
91a0: 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b  & pPk->aiColumn[
91b0: 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a  k-1]!=i; k++){}.
91c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
91d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
91e0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
91f0: 72 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20 20  r, k, 6);.      
9200: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9210: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9220: 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20  Row, 1, 6);.    
9230: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
9240: 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  e..  if( sqlite3
9250: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
9260: 69 6e 64 65 78 5f 69 6e 66 6f 22 29 3d 3d 30 20  index_info")==0 
9270: 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  && zRight ){.   
9280: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
9290: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
92a0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
92b0: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
92c0: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
92d0: 75 74 3b 0a 20 20 20 20 70 49 64 78 20 3d 20 73  ut;.    pIdx = s
92e0: 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
92f0: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
9300: 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 20 29  ;.    if( pIdx )
9310: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  {.      int i;. 
9320: 20 20 20 20 20 70 54 61 62 20 3d 20 70 49 64 78       pTab = pIdx
9330: 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20  ->pTable;.      
9340: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
9350: 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20  mCols(v, 3);.   
9360: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
9370: 3d 20 33 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 3;.      sqlit
9380: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
9390: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
93a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
93b0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
93c0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
93d0: 20 22 73 65 71 6e 6f 22 2c 20 53 51 4c 49 54 45   "seqno", SQLITE
93e0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
93f0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
9400: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
9410: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c  AME_NAME, "cid",
9420: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9430: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9440: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
9450: 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
9460: 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f   "name", SQLITE_
9470: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 66  STATIC);.      f
9480: 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e  or(i=0; i<pIdx->
9490: 6e 43 6f 6c 75 6d 6e 3b 20 69 2b 2b 29 7b 0a 20  nColumn; i++){. 
94a0: 20 20 20 20 20 20 20 69 6e 74 20 63 6e 75 6d 20         int cnum 
94b0: 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e  = pIdx->aiColumn
94c0: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  [i];.        sql
94d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
94e0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c  , OP_Integer, i,
94f0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
9500: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9510: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 63 6e  , OP_Integer, cn
9520: 75 6d 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20  um, 2);.        
9530: 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e 6e 43  assert( pTab->nC
9540: 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20 20 20 20  ol>cnum );.     
9550: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9560: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
9570: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 54 61  g8, 0, 3, 0, pTa
9580: 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e  b->aCol[cnum].zN
9590: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
95a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
95b0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
95c0: 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20  ow, 1, 3);.     
95d0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
95e0: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ..  if( sqlite3S
95f0: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 69  trICmp(zLeft, "i
9600: 6e 64 65 78 5f 6c 69 73 74 22 29 3d 3d 30 20 26  ndex_list")==0 &
9610: 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  & zRight ){.    
9620: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
9630: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
9640: 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61    if( sqlite3Rea
9650: 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20  dSchema(pParse) 
9660: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
9670: 74 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71  t;.    pTab = sq
9680: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
9690: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  b, zRight, zDb);
96a0: 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b  .    if( pTab ){
96b0: 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
96c0: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
96d0: 29 3b 0a 20 20 20 20 20 20 70 49 64 78 20 3d 20  );.      pIdx = 
96e0: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 0a 20 20  pTab->pIndex;.  
96f0: 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a      if( pIdx ){.
9700: 20 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20          int i = 
9710: 30 3b 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0; .        sqli
9720: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
9730: 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  s(v, 3);.       
9740: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9750: 33 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  3;.        sqlit
9760: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
9770: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
9780: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9790: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
97a0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
97b0: 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45  E, "seq", SQLITE
97c0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
97d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
97e0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
97f0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
9800: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
9810: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
9820: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
9830: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
9840: 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c 20  NAME, "unique", 
9850: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9860: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 49          while(pI
9870: 64 78 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  dx){.          s
9880: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9890: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
98a0: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  i, 1);.         
98b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
98c0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
98d0: 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d  , 0, 2, 0, pIdx-
98e0: 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  >zName, 0);.    
98f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9900: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
9910: 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45  teger, pIdx->onE
9920: 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 33  rror!=OE_None, 3
9930: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
9940: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9950: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9960: 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  1, 3);.         
9970: 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20   ++i;.          
9980: 70 49 64 78 20 3d 20 70 49 64 78 2d 3e 70 4e 65  pIdx = pIdx->pNe
9990: 78 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  xt;.        }.  
99a0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
99b0: 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  lse..  if( sqlit
99c0: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
99d0: 20 22 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22   "database_list"
99e0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )==0 ){.    int 
99f0: 69 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  i;.    if( sqlit
9a00: 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61  e3ReadSchema(pPa
9a10: 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67  rse) ) goto prag
9a20: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 73 71 6c 69  ma_out;.    sqli
9a30: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
9a40: 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61  s(v, 3);.    pPa
9a50: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
9a60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
9a70: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
9a80: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65  OLNAME_NAME, "se
9a90: 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  q", SQLITE_STATI
9aa0: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
9ab0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
9ac0: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
9ad0: 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45  , "name", SQLITE
9ae0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
9af0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
9b00: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
9b10: 45 5f 4e 41 4d 45 2c 20 22 66 69 6c 65 22 2c 20  E_NAME, "file", 
9b20: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9b30: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
9b40: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
9b50: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
9b60: 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74  i].pBt==0 ) cont
9b70: 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65  inue;.      asse
9b80: 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  rt( db->aDb[i].z
9b90: 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20  Name!=0 );.     
9ba0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9bb0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
9bc0: 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  , i, 1);.      s
9bd0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
9be0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
9bf0: 30 2c 20 32 2c 20 30 2c 20 64 62 2d 3e 61 44 62  0, 2, 0, db->aDb
9c00: 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  [i].zName, 0);. 
9c10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9c20: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
9c30: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
9c40: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9c50: 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d  3BtreeGetFilenam
9c60: 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  e(db->aDb[i].pBt
9c70: 29 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  ), 0);.      sql
9c80: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9c90: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9ca0: 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  1, 3);.    }.  }
9cb0: 65 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69  else..  if( sqli
9cc0: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
9cd0: 2c 20 22 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73  , "collation_lis
9ce0: 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e  t")==0 ){.    in
9cf0: 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73  t i = 0;.    Has
9d00: 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 73 71  hElem *p;.    sq
9d10: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
9d20: 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70  ols(v, 2);.    p
9d30: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b  Parse->nMem = 2;
9d40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9d50: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
9d60: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
9d70: 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  seq", SQLITE_STA
9d80: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
9d90: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9da0: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
9db0: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
9dc0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
9dd0: 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68  for(p=sqliteHash
9de0: 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c  First(&db->aColl
9df0: 53 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74  Seq); p; p=sqlit
9e00: 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20  eHashNext(p)){. 
9e10: 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43       CollSeq *pC
9e20: 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a  oll = (CollSeq *
9e30: 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28  )sqliteHashData(
9e40: 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  p);.      sqlite
9e50: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9e60: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2b 2b 2c 20  P_Integer, i++, 
9e70: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
9e80: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
9e90: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
9ea0: 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65   0, pColl->zName
9eb0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
9ec0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9ed0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9ee0: 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  , 2);.    }.  }e
9ef0: 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  lse.#endif /* SQ
9f00: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
9f10: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
9f20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9f30: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 69  _FOREIGN_KEY.  i
9f40: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
9f50: 70 28 7a 4c 65 66 74 2c 20 22 66 6f 72 65 69 67  p(zLeft, "foreig
9f60: 6e 5f 6b 65 79 5f 6c 69 73 74 22 29 3d 3d 30 20  n_key_list")==0 
9f70: 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  && zRight ){.   
9f80: 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20   FKey *pFK;.    
9f90: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
9fa0: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
9fb0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
9fc0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
9fd0: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
9fe0: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
9ff0: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
a000: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
a010: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
a020: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
a030: 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54  ;.      pFK = pT
a040: 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20  ab->pFKey;.     
a050: 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20   if( pFK ){.    
a060: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a      int i = 0; .
a070: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a080: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
a090: 20 38 29 3b 0a 20 20 20 20 20 20 20 20 70 50 61   8);.        pPa
a0a0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20  rse->nMem = 8;. 
a0b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f         sqlite3Co
a0c0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
a0d0: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
a0e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a0f0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
a100: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
a110: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
a120: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
a130: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a140: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
a150: 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51  _NAME, "seq", SQ
a160: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
a170: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a180: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
a190: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
a1a0: 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f  "table", SQLITE_
a1b0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
a1c0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
a1d0: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
a1e0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d  NAME_NAME, "from
a1f0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
a200: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
a210: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
a220: 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 4, COLNAME_N
a230: 41 4d 45 2c 20 22 74 6f 22 2c 20 53 51 4c 49 54  AME, "to", SQLIT
a240: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
a250: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a260: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43  tColName(v, 5, C
a270: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e  OLNAME_NAME, "on
a280: 5f 75 70 64 61 74 65 22 2c 20 53 51 4c 49 54 45  _update", SQLITE
a290: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
a2a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a2b0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c 20 43 4f  ColName(v, 6, CO
a2c0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f  LNAME_NAME, "on_
a2d0: 64 65 6c 65 74 65 22 2c 20 53 51 4c 49 54 45 5f  delete", SQLITE_
a2e0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
a2f0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
a300: 6f 6c 4e 61 6d 65 28 76 2c 20 37 2c 20 43 4f 4c  olName(v, 7, COL
a310: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d 61 74 63  NAME_NAME, "matc
a320: 68 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  h", SQLITE_STATI
a330: 43 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c  C);.        whil
a340: 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20  e(pFK){.        
a350: 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20    int j;.       
a360: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46     for(j=0; j<pF
a370: 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  K->nCol; j++){. 
a380: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20             char 
a390: 2a 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f  *zCol = pFK->aCo
a3a0: 6c 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20  l[j].zCol;.     
a3b0: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e         char *zOn
a3c0: 44 65 6c 65 74 65 20 3d 20 28 63 68 61 72 20 2a  Delete = (char *
a3d0: 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d  )actionName(pFK-
a3e0: 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20  >aAction[0]);.  
a3f0: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
a400: 7a 4f 6e 55 70 64 61 74 65 20 3d 20 28 63 68 61  zOnUpdate = (cha
a410: 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70  r *)actionName(p
a420: 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 3b  FK->aAction[1]);
a430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
a440: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
a450: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c  , OP_Integer, i,
a460: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   1);.           
a470: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a480: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
a490: 2c 20 6a 2c 20 32 29 3b 0a 20 20 20 20 20 20 20  , j, 2);.       
a4a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a4b0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
a4c0: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70  ing8, 0, 3, 0, p
a4d0: 46 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20  FK->zTo, 0);.   
a4e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a4f0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
a500: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20  _String8, 0, 4, 
a510: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
a520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a530: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d   pTab->aCol[pFK-
a540: 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e  >aCol[j].iFrom].
a550: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
a560: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a570: 62 65 41 64 64 4f 70 34 28 76 2c 20 7a 43 6f 6c  beAddOp4(v, zCol
a580: 20 3f 20 4f 50 5f 53 74 72 69 6e 67 38 20 3a 20   ? OP_String8 : 
a590: 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 2c 20 30  OP_Null, 0, 5, 0
a5a0: 2c 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20  , zCol, 0);.    
a5b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a5c0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
a5d0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 36 2c 20 30  String8, 0, 6, 0
a5e0: 2c 20 7a 4f 6e 55 70 64 61 74 65 2c 20 30 29 3b  , zOnUpdate, 0);
a5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
a600: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
a610: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
a620: 20 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c 65 74 65   7, 0, zOnDelete
a630: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
a640: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a650: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
a660: 38 2c 20 30 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e  8, 0, 8, 0, "NON
a670: 45 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  E", 0);.        
a680: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a690: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
a6a0: 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20  ltRow, 1, 8);.  
a6b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a6c0: 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20      ++i;.       
a6d0: 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e     pFK = pFK->pN
a6e0: 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20  extFrom;.       
a6f0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
a700: 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20  .  }else.#endif 
a710: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
a720: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
a730: 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  KEY) */..#ifndef
a740: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
a750: 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66  EIGN_KEY.#ifndef
a760: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
a770: 47 47 45 52 0a 20 20 69 66 28 20 73 71 6c 69 74  GGER.  if( sqlit
a780: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
a790: 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68   "foreign_key_ch
a7a0: 65 63 6b 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  eck")==0 ){.    
a7b0: 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20  FKey *pFK;      
a7c0: 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65         /* A fore
a7d0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
a7e0: 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  nt */.    Table 
a7f0: 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
a800: 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20   /* Child table 
a810: 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e  contain "REFEREN
a820: 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  CES" keyword */.
a830: 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65      Table *pPare
a840: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61  nt;        /* Pa
a850: 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20  rent table that 
a860: 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  child points to 
a870: 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
a880: 64 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  dx;           /*
a890: 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61   Index in the pa
a8a0: 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20  rent table */.  
a8b0: 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
a8c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
a8d0: 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69   counter:  Forei
a8e0: 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f  gn key number fo
a8f0: 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e  r pTab */.    in
a900: 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
a910: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
a920: 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20  nter:  Field of 
a930: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
a940: 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  */.    HashElem 
a950: 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  *k;           /*
a960: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20   Loop counter:  
a970: 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63  Next table in sc
a980: 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20  hema */.    int 
a990: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
a9a0: 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72     /* result var
a9b0: 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  iable */.    int
a9c0: 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20   regResult;     
a9d0: 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65      /* 3 registe
a9e0: 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73  rs to hold a res
a9f0: 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69  ult row */.    i
aa00: 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20  nt regKey;      
aa10: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
aa20: 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f  r to hold key fo
aa30: 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46  r checking the F
aa40: 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  K */.    int reg
aa50: 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  Row;            
aa60: 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f 20  /* Registers to 
aa70: 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20  hold a row from 
aa80: 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  pTab */.    int 
aa90: 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20  addrTop;        
aaa0: 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c     /* Top of a l
aab0: 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  oop checking for
aac0: 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20  eign keys */.   
aad0: 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20   int addrOk;    
aae0: 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
aaf0: 68 65 72 65 20 69 66 20 74 68 65 20 6b 65 79 20  here if the key 
ab00: 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74  is OK */.    int
ab10: 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20   *aiCols;       
ab20: 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20      /* child to 
ab30: 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61  parent column ma
ab40: 70 70 69 6e 67 20 2a 2f 0a 0a 20 20 20 20 69 66  pping */..    if
ab50: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
ab60: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
ab70: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
ab80: 20 20 20 72 65 67 52 65 73 75 6c 74 20 3d 20 70     regResult = p
ab90: 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20  Parse->nMem+1;. 
aba0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
abb0: 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b 65 79  += 4;.    regKey
abc0: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
abd0: 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77 20 3d 20  m;.    regRow = 
abe0: 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a  ++pParse->nMem;.
abf0: 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47      v = sqlite3G
ac00: 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a  etVdbe(pParse);.
ac10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
ac20: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b  etNumCols(v, 4);
ac30: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ac40: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
ac50: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
ac60: 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  table", SQLITE_S
ac70: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
ac80: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ac90: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
aca0: 4e 41 4d 45 2c 20 22 72 6f 77 69 64 22 2c 20 53  NAME, "rowid", S
acb0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
acc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
acd0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
ace0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 61  OLNAME_NAME, "pa
acf0: 72 65 6e 74 22 2c 20 53 51 4c 49 54 45 5f 53 54  rent", SQLITE_ST
ad00: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
ad10: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
ad20: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
ad30: 41 4d 45 2c 20 22 66 6b 69 64 22 2c 20 53 51 4c  AME, "fkid", SQL
ad40: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
ad50: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
ad60: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
ad70: 20 69 44 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73   iDb);.    k = s
ad80: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
ad90: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63  db->aDb[iDb].pSc
ada0: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a  hema->tblHash);.
adb0: 20 20 20 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a      while( k ){.
adc0: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
add0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62   ){.        pTab
ade0: 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65   = sqlite3Locate
adf0: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c  Table(pParse, 0,
ae00: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
ae10: 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20         k = 0;.  
ae20: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
ae30: 20 20 20 70 54 61 62 20 3d 20 28 54 61 62 6c 65     pTab = (Table
ae40: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
ae50: 28 6b 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d  (k);.        k =
ae60: 20 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28   sqliteHashNext(
ae70: 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
ae80: 20 20 69 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c    if( pTab==0 ||
ae90: 20 70 54 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20   pTab->pFKey==0 
aea0: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
aeb0: 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f    sqlite3TableLo
aec0: 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20  ck(pParse, iDb, 
aed0: 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70  pTab->tnum, 0, p
aee0: 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  Tab->zName);.   
aef0: 20 20 20 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f     if( pTab->nCo
af00: 6c 2b 72 65 67 52 6f 77 3e 70 50 61 72 73 65 2d  l+regRow>pParse-
af10: 3e 6e 4d 65 6d 20 29 20 70 50 61 72 73 65 2d 3e  >nMem ) pParse->
af20: 6e 4d 65 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f  nMem = pTab->nCo
af30: 6c 20 2b 20 72 65 67 52 6f 77 3b 0a 20 20 20 20  l + regRow;.    
af40: 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62    sqlite3OpenTab
af50: 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44  le(pParse, 0, iD
af60: 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e  b, pTab, OP_Open
af70: 52 65 61 64 29 3b 0a 20 20 20 20 20 20 73 71 6c  Read);.      sql
af80: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
af90: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
afa0: 20 72 65 67 52 65 73 75 6c 74 2c 20 30 2c 20 70   regResult, 0, p
afb0: 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Tab->zName,.    
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afd0: 20 20 20 20 50 34 5f 54 52 41 4e 53 49 45 4e 54      P4_TRANSIENT
afe0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  );.      for(i=1
aff0: 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65  , pFK=pTab->pFKe
b000: 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b  y; pFK; i++, pFK
b010: 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29  =pFK->pNextFrom)
b020: 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e  {.        pParen
b030: 74 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74  t = sqlite3Locat
b040: 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30  eTable(pParse, 0
b050: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29  , pFK->zTo, zDb)
b060: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
b070: 61 72 65 6e 74 3d 3d 30 20 29 20 62 72 65 61 6b  arent==0 ) break
b080: 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d  ;.        pIdx =
b090: 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   0;.        sqli
b0a0: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
b0b0: 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  rse, iDb, pParen
b0c0: 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72  t->tnum, 0, pPar
b0d0: 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  ent->zName);.   
b0e0: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
b0f0: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
b100: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
b110: 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20  FK, &pIdx, 0);. 
b120: 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20         if( x==0 
b130: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
b140: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
b150: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f          sqlite3O
b160: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
b170: 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74   i, iDb, pParent
b180: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
b190: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
b1a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4b 65 79  .            Key
b1b0: 49 6e 66 6f 20 2a 70 4b 65 79 20 3d 20 73 71 6c  Info *pKey = sql
b1c0: 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f  ite3IndexKeyinfo
b1d0: 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a  (pParse, pIdx);.
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b1f0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
b200: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c   OP_OpenRead, i,
b210: 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62   pIdx->tnum, iDb
b220: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
b230: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
b240: 50 34 28 76 2c 20 2d 31 2c 20 28 63 68 61 72 2a  P4(v, -1, (char*
b250: 29 70 4b 65 79 2c 20 50 34 5f 4b 45 59 49 4e 46  )pKey, P4_KEYINF
b260: 4f 5f 48 41 4e 44 4f 46 46 29 3b 0a 20 20 20 20  O_HANDOFF);.    
b270: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
b280: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
b290: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   k = 0;.        
b2a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
b2b0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
b2c0: 20 69 66 28 20 70 46 4b 20 29 20 62 72 65 61 6b   if( pFK ) break
b2d0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 61 72  ;.      if( pPar
b2e0: 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50 61  se->nTab<i ) pPa
b2f0: 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20  rse->nTab = i;. 
b300: 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20 73       addrTop = s
b310: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
b320: 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30  (v, OP_Rewind, 0
b330: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  );.      for(i=1
b340: 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65  , pFK=pTab->pFKe
b350: 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b  y; pFK; i++, pFK
b360: 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29  =pFK->pNextFrom)
b370: 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e  {.        pParen
b380: 74 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74  t = sqlite3Locat
b390: 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30  eTable(pParse, 0
b3a0: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29  , pFK->zTo, zDb)
b3b0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
b3c0: 28 20 70 50 61 72 65 6e 74 21 3d 30 20 29 3b 0a  ( pParent!=0 );.
b3d0: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
b3e0: 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73  ;.        aiCols
b3f0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 78 20   = 0;.        x 
b400: 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  = sqlite3FkLocat
b410: 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70  eIndex(pParse, p
b420: 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49  Parent, pFK, &pI
b430: 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20 20  dx, &aiCols);.  
b440: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 78 3d        assert( x=
b450: 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 64  =0 );.        ad
b460: 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64  drOk = sqlite3Vd
b470: 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
b480: 20 20 20 20 20 20 20 20 69 66 28 20 70 49 64 78          if( pIdx
b490: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
b4a0: 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d   int iKey = pFK-
b4b0: 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a  >aCol[0].iFrom;.
b4c0: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
b4d0: 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65  ( iKey>=0 && iKe
b4e0: 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a  y<pTab->nCol );.
b4f0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4b            if( iK
b500: 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20  ey!=pTab->iPKey 
b510: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
b520: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
b530: 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30  (v, OP_Column, 0
b540: 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b  , iKey, regRow);
b550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
b560: 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c  ite3ColumnDefaul
b570: 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c  t(v, pTab, iKey,
b580: 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20   regRow);.      
b590: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b5a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73  eAddOp2(v, OP_Is
b5b0: 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64  Null, regRow, ad
b5c0: 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  drOk);.         
b5d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b5e0: 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42  dOp2(v, OP_MustB
b5f0: 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 0a 20 20  eInt, regRow,.  
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
b610: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
b620: 64 64 72 28 76 29 2b 33 29 3b 0a 20 20 20 20 20  ddr(v)+3);.     
b630: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
b640: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b650: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b660: 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77  Rowid, 0, regRow
b670: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
b680: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b690: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
b6a0: 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30  _NotExists, i, 0
b6b0: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
b6c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b6d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74  AddOp2(v, OP_Got
b6e0: 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  o, 0, addrOk);. 
b6f0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b700: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
b710: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
b720: 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20  ntAddr(v)-2);.  
b730: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
b740: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20         for(j=0; 
b750: 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b  j<pFK->nCol; j++
b760: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
b770: 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
b780: 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76  tColumnOfTable(v
b790: 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20  , pTab, 0,.     
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20         aiCols ? 
b7c0: 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d  aiCols[j] : pFK-
b7d0: 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 2c 20  >aCol[0].iFrom, 
b7e0: 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20  regRow+j);.     
b7f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b800: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
b810: 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c  sNull, regRow+j,
b820: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
b830: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
b840: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b850: 33 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  3(v, OP_MakeReco
b860: 72 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d  rd, regRow, pFK-
b870: 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 29 3b 0a  >nCol, regKey);.
b880: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b890: 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
b8a0: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   -1,.           
b8b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 49          sqlite3I
b8c0: 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
b8d0: 76 2c 70 49 64 78 29 2c 20 50 34 5f 54 52 41 4e  v,pIdx), P4_TRAN
b8e0: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20  SIENT);.        
b8f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b900: 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75  Op4Int(v, OP_Fou
b910: 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72  nd, i, addrOk, r
b920: 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20  egKey, 0);.     
b930: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
b940: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b950: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
b960: 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20  egResult+1);.   
b970: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b980: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
b990: 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75  ing8, 0, regResu
b9a0: 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20 20  lt+2, 0, .      
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9c0: 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34      pFK->zTo, P4
b9d0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
b9e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b9f0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
ba00: 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67 52 65  eger, i-1, regRe
ba10: 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20 20  sult+3);.       
ba20: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ba30: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
ba40: 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34  ow, regResult, 4
ba50: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
ba60: 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
ba70: 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  el(v, addrOk);. 
ba80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
ba90: 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29  Free(db, aiCols)
baa0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
bab0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bac0: 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c  2(v, OP_Next, 0,
bad0: 20 61 64 64 72 54 6f 70 2b 31 29 3b 0a 20 20 20   addrTop+1);.   
bae0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
baf0: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f  mpHere(v, addrTo
bb00: 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  p);.    }.  }els
bb10: 65 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  e.#endif /* !def
bb20: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
bb30: 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e  _TRIGGER) */.#en
bb40: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
bb50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
bb60: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
bb70: 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 69 66  ndef NDEBUG.  if
bb80: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
bb90: 28 7a 4c 65 66 74 2c 20 22 70 61 72 73 65 72 5f  (zLeft, "parser_
bba0: 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20  trace")==0 ){.  
bbb0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
bbc0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
bbd0: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
bbe0: 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20  ht, 0) ){.      
bbf0: 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54    sqlite3ParserT
bc00: 72 61 63 65 28 73 74 64 65 72 72 2c 20 22 70 61  race(stderr, "pa
bc10: 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20  rser: ");.      
bc20: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
bc30: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
bc40: 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  e(0, 0);.      }
bc50: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23  .    }.  }else.#
bc60: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e  endif..  /* Rein
bc70: 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61  stall the LIKE a
bc80: 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e  nd GLOB function
bc90: 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e 74 20  s.  The variant 
bca0: 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65  of LIKE.  ** use
bcb0: 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65 20 73  d will be case s
bcc0: 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f 74 20  ensitive or not 
bcd0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
bce0: 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 69 66 28   RHS..  */.  if(
bcf0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
bd00: 7a 4c 65 66 74 2c 20 22 63 61 73 65 5f 73 65 6e  zLeft, "case_sen
bd10: 73 69 74 69 76 65 5f 6c 69 6b 65 22 29 3d 3d 30  sitive_like")==0
bd20: 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   ){.    if( zRig
bd30: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
bd40: 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
bd50: 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c  unctions(db, sql
bd60: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
bd70: 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20  Right, 0));.    
bd80: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64  }.  }else..#ifnd
bd90: 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52  ef SQLITE_INTEGR
bda0: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
bdb0: 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAX.# define SQL
bdc0: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
bdd0: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30  ECK_ERROR_MAX 10
bde0: 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  0.#endif..#ifnde
bdf0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
be00: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20  TEGRITY_CHECK.  
be10: 2f 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b  /* Pragma "quick
be20: 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63  _check" is reduc
be30: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20  ed version of . 
be40: 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68   ** integrity_ch
be50: 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20  eck designed to 
be60: 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61  detect most data
be70: 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a  base corruption.
be80: 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73    ** without mos
be90: 74 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61  t of the overhea
bea0: 64 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65  d of a full inte
beb0: 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a  grity-check..  *
bec0: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  /.  if( sqlite3S
bed0: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 69  trICmp(zLeft, "i
bee0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 29  ntegrity_check")
bef0: 3d 3d 30 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  ==0.   || sqlite
bf00: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
bf10: 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 3d 3d  "quick_check")==
bf20: 30 20 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  0 .  ){.    int 
bf30: 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72  i, j, addr, mxEr
bf40: 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20  r;..    /* Code 
bf50: 74 68 61 74 20 61 70 70 65 61 72 73 20 61 74 20  that appears at 
bf60: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
bf70: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e 20  ntegrity check. 
bf80: 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20   If no error.   
bf90: 20 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61 76   ** messages hav
bfa0: 65 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65 64  e been generated
bfb0: 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74  , output OK.  Ot
bfc0: 68 65 72 77 69 73 65 20 6f 75 74 70 75 74 20 74  herwise output t
bfd0: 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72 20  he.    ** error 
bfe0: 6d 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20  message.    */. 
bff0: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
c000: 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f  VdbeOpList endCo
c010: 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  de[] = {.      {
c020: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20   OP_AddImm,     
c030: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
c040: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
c050: 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20     { OP_IfNeg,  
c060: 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20       1, 0,      
c070: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
c080: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69  .      { OP_Stri
c090: 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20  ng8,     0, 3,  
c0a0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
c0b0: 32 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  2 */.      { OP_
c0c0: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20  ResultRow,   3, 
c0d0: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  1,        0},.  
c0e0: 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73    };..    int is
c0f0: 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33  Quick = (sqlite3
c100: 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d  Tolower(zLeft[0]
c110: 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a  )=='q');..    /*
c120: 20 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63   If the PRAGMA c
c130: 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68  ommand was of th
c140: 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c  e form "PRAGMA <
c150: 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68  db>.integrity_ch
c160: 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65  eck",.    ** the
c170: 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20  n iDb is set to 
c180: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
c190: 20 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69   database identi
c1a0: 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20  fied by <db>..  
c1b0: 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73    ** In this cas
c1c0: 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  e, the integrity
c1d0: 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62   of database iDb
c1e0: 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65   only is verifie
c1f0: 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20  d by.    ** the 
c200: 56 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c  VDBE created bel
c210: 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ow..    **.    *
c220: 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  * Otherwise, if 
c230: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
c240: 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69  simply "PRAGMA i
c250: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20  ntegrity_check" 
c260: 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47  (or.    ** "PRAG
c270: 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29  MA quick_check")
c280: 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  , then iDb is se
c290: 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20  t to 0. In this 
c2a0: 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20  case, set iDb.  
c2b0: 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c    ** to -1 here,
c2c0: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
c2d0: 74 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c  t the VDBE shoul
c2e0: 64 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74  d verify the int
c2f0: 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  egrity.    ** of
c300: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
c310: 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20  tabases.  */.   
c320: 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
c330: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
c340: 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a  Db==0 || pId2->z
c350: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32   );.    if( pId2
c360: 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d  ->z==0 ) iDb = -
c370: 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  1;..    /* Initi
c380: 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70  alize the VDBE p
c390: 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 69 66  rogram */.    if
c3a0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
c3b0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
c3c0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
c3d0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
c3e0: 3d 20 36 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 6;.    sqlite3
c3f0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
c400: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
c410: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c420: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
c430: 4d 45 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63  ME, "integrity_c
c440: 68 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54  heck", SQLITE_ST
c450: 41 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53  ATIC);..    /* S
c460: 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65  et the maximum e
c470: 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  rror count */.  
c480: 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
c490: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
c4a0: 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
c4b0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
c4c0: 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e      sqlite3GetIn
c4d0: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45  t32(zRight, &mxE
c4e0: 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d  rr);.      if( m
c4f0: 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20  xErr<=0 ){.     
c500: 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54     mxErr = SQLIT
c510: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
c520: 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20  K_ERROR_MAX;.   
c530: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
c540: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c550: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c560: 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72  mxErr, 1);  /* r
c570: 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f  eg[1] holds erro
c580: 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20  rs left */..    
c590: 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69  /* Do an integri
c5a0: 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68  ty check on each
c5b0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a   database file *
c5c0: 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
c5d0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
c5e0: 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a        HashElem *
c5f0: 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70  x;.      Hash *p
c600: 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20  Tbls;.      int 
c610: 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  cnt = 0;..      
c620: 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  if( OMIT_TEMPDB 
c630: 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e  && i==1 ) contin
c640: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44  ue;.      if( iD
c650: 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29  b>=0 && i!=iDb )
c660: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20   continue;..    
c670: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
c680: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
c690: 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  , i);.      addr
c6a0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
c6b0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
c6c0: 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66  , 1); /* Halt if
c6d0: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
c6e0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
c6f0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c700: 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
c710: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
c720: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
c730: 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e  ..      /* Do an
c740: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
c750: 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20   of the B-Tree. 
c760: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
c770: 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e   Begin by fillin
c780: 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33  g registers 2, 3
c790: 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72  , ... with the r
c7a0: 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72  oot pages number
c7b0: 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61  s.      ** for a
c7c0: 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ll tables and in
c7d0: 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74  dices in the dat
c7e0: 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a  abase..      */.
c7f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
c800: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
c810: 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29  Held(db, i, 0) )
c820: 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20  ;.      pTbls = 
c830: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68  &db->aDb[i].pSch
c840: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20  ema->tblHash;.  
c850: 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65      for(x=sqlite
c860: 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29  HashFirst(pTbls)
c870: 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ; x; x=sqliteHas
c880: 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
c890: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
c8a0: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
c8b0: 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
c8c0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20  x *pIdx;.       
c8d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c8e0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
c8f0: 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b  , pTab->tnum, 2+
c900: 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 63 6e  cnt);.        cn
c910: 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  t++;.        for
c920: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
c930: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
c940: 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Idx->pNext){.   
c950: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c960: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c970: 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e  nteger, pIdx->tn
c980: 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20  um, 2+cnt);.    
c990: 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
c9a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
c9b0: 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
c9c0: 72 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75  re sufficient nu
c9d0: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
c9e0: 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  s have been allo
c9f0: 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 70  cated */.      p
ca00: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41  Parse->nMem = MA
ca10: 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  X( pParse->nMem,
ca20: 20 63 6e 74 2b 37 20 29 3b 0a 0a 20 20 20 20 20   cnt+7 );..     
ca30: 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72 65   /* Do the b-tre
ca40: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
ca50: 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  ks */.      sqli
ca60: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
ca70: 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c   OP_IntegrityCk,
ca80: 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20   2, cnt, 1);.   
ca90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
caa0: 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69 29  angeP5(v, (u8)i)
cab0: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
cac0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
cad0: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32  (v, OP_IsNull, 2
cae0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
caf0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
cb00: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
cb10: 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69  0,.         sqli
cb20: 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22  te3MPrintf(db, "
cb30: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
cb40: 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61  %s ***\n", db->a
cb50: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20  Db[i].zName),.  
cb60: 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d 49         P4_DYNAMI
cb70: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
cb80: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cb90: 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 29 3b 0a 20  P_Move, 2, 4);. 
cba0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cbb0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
cbc0: 63 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20  cat, 4, 3, 2);. 
cbd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cbe0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cbf0: 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20  ultRow, 2, 1);. 
cc00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cc10: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
cc20: 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  );..      /* Mak
cc30: 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69  e sure all the i
cc40: 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74  ndices are const
cc50: 72 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79  ructed correctly
cc60: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
cc70: 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73   for(x=sqliteHas
cc80: 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78  hFirst(pTbls); x
cc90: 20 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d   && !isQuick; x=
cca0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78  sqliteHashNext(x
ccb0: 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c  )){.        Tabl
ccc0: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
ccd0: 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20  HashData(x);.   
cce0: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78       Index *pIdx
ccf0: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f  ;.        int lo
cd00: 6f 70 54 6f 70 3b 0a 0a 20 20 20 20 20 20 20 20  opTop;..        
cd10: 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78  if( pTab->pIndex
cd20: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
cd30: 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
cd40: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
cd50: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
cd60: 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75  ;  /* Stop if ou
cd70: 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20  t of errors */. 
cd80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cd90: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
cda0: 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
cdb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
cdc0: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
cdd0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
cde0: 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
cdf0: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20  pParse);.       
ce00: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
ce10: 65 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72  eAndIndices(pPar
ce20: 73 65 2c 20 70 54 61 62 2c 20 31 2c 20 4f 50 5f  se, pTab, 1, OP_
ce30: 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20  OpenRead);.     
ce40: 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78     for(j=0, pIdx
ce50: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
ce60: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
ce70: 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20  pNext, j++){.   
ce80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ce90: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
cea0: 6e 74 65 67 65 72 2c 20 30 2c 20 37 2b 6a 29 3b  nteger, 0, 7+j);
ceb0: 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69 65   /* index entrie
cec0: 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  s counter */.   
ced0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
cee0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41  Parse->nMem = MA
cef0: 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20  X(pParse->nMem, 
cf00: 37 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f  7+j);.        lo
cf10: 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56  opTop = sqlite3V
cf20: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
cf30: 52 65 77 69 6e 64 2c 20 31 2c 20 30 29 20 2b 20  Rewind, 1, 0) + 
cf40: 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  1;.        for(j
cf50: 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
cf60: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
cf70: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
cf80: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
cf90: 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20  nt jmp2, jmp3;. 
cfa0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 31 3b           int r1;
cfb0: 0a 20 20 20 20 20 20 20 20 20 20 73 74 61 74 69  .          stati
cfc0: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
cfd0: 73 74 20 69 64 78 45 72 72 5b 5d 20 3d 20 7b 0a  st idxErr[] = {.
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
cff0: 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c  _AddImm,      1,
d000: 20 2d 31 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20   -1,  0},.      
d010: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
d020: 67 38 2c 20 20 20 20 20 30 2c 20 20 33 2c 20 20  g8,     0,  3,  
d030: 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
d040: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
d050: 52 6f 77 69 64 2c 20 20 20 20 20 20 20 31 2c 20  Rowid,       1, 
d060: 20 34 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20   4,  0},.       
d070: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
d080: 38 2c 20 20 20 20 20 30 2c 20 20 35 2c 20 20 30  8,     0,  5,  0
d090: 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20  },    /* 3 */.  
d0a0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53            { OP_S
d0b0: 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 20  tring8,     0,  
d0c0: 36 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20  6,  0},    /* 4 
d0d0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  */.            {
d0e0: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20   OP_Concat,     
d0f0: 20 34 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20 20   4,  3,  3},.   
d100: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f           { OP_Co
d110: 6e 63 61 74 2c 20 20 20 20 20 20 35 2c 20 20 33  ncat,      5,  3
d120: 2c 20 20 33 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  3},.         
d130: 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20     { OP_Concat, 
d140: 20 20 20 20 20 36 2c 20 20 33 2c 20 20 33 7d 2c       6,  3,  3},
d150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
d160: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33  P_ResultRow,   3
d170: 2c 20 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20 20  ,  1,  0},.     
d180: 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f         { OP_IfPo
d190: 73 2c 20 20 20 20 20 20 20 31 2c 20 20 30 2c 20  s,       1,  0, 
d1a0: 20 30 7d 2c 20 20 20 20 2f 2a 20 39 20 2a 2f 0a   0},    /* 9 */.
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
d1c0: 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20 30 2c  _Halt,        0,
d1d0: 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20    0,  0},.      
d1e0: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 20      };.         
d1f0: 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65 6e   r1 = sqlite3Gen
d200: 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 70 50  erateIndexKey(pP
d210: 61 72 73 65 2c 20 70 49 64 78 2c 20 31 2c 20 33  arse, pIdx, 1, 3
d220: 2c 20 30 2c 20 26 6a 6d 70 33 29 3b 0a 20 20 20  , 0, &jmp3);.   
d230: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d240: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
d250: 64 64 49 6d 6d 2c 20 37 2b 6a 2c 20 31 29 3b 20  ddImm, 7+j, 1); 
d260: 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e   /* increment en
d270: 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  try count */.   
d280: 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71         jmp2 = sq
d290: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49  lite3VdbeAddOp4I
d2a0: 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20  nt(v, OP_Found, 
d2b0: 6a 2b 32 2c 20 30 2c 20 72 31 2c 20 70 49 64 78  j+2, 0, r1, pIdx
d2c0: 2d 3e 6e 43 6f 6c 75 6d 6e 2b 31 29 3b 0a 20 20  ->nColumn+1);.  
d2d0: 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
d2e0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
d2f0: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
d300: 28 69 64 78 45 72 72 29 2c 20 69 64 78 45 72 72  (idxErr), idxErr
d310: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d320: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
d330: 28 76 2c 20 61 64 64 72 2b 31 2c 20 22 72 6f 77  (v, addr+1, "row
d340: 69 64 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29  id ", P4_STATIC)
d350: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d360: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28  te3VdbeChangeP4(
d370: 76 2c 20 61 64 64 72 2b 33 2c 20 22 20 6d 69 73  v, addr+3, " mis
d380: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
d390: 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
d3a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d3b0: 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20  VdbeChangeP4(v, 
d3c0: 61 64 64 72 2b 34 2c 20 70 49 64 78 2d 3e 7a 4e  addr+4, pIdx->zN
d3d0: 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e  ame, P4_TRANSIEN
d3e0: 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  T);.          sq
d3f0: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
d400: 65 28 76 2c 20 61 64 64 72 2b 39 29 3b 0a 20 20  e(v, addr+9);.  
d410: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d420: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
d430: 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp2);.          
d440: 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c  sqlite3VdbeResol
d450: 76 65 4c 61 62 65 6c 28 76 2c 20 6a 6d 70 33 29  veLabel(v, jmp3)
d460: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
d470: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d480: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp2(v, OP_Next
d490: 2c 20 31 2c 20 6c 6f 6f 70 54 6f 70 29 3b 0a 20  , 1, loopTop);. 
d4a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d4b0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f  beJumpHere(v, lo
d4c0: 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65  opTop-1);.#ifnde
d4d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
d4e0: 52 45 45 43 4f 55 4e 54 0a 20 20 20 20 20 20 20  REECOUNT.       
d4f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d500: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
d510: 2c 20 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20  , 0, 2, 0, .    
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d530: 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   "wrong # of ent
d540: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22 2c  ries in index ",
d550: 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
d560: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
d570: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
d580: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
d590: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
d5a0: 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
d5b0: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
d5c0: 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20  ntAddr(v);.     
d5d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d5e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
d5f0: 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 0a  os, 1, addr+2);.
d600: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d610: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d620: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
d630: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d640: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d650: 5f 43 6f 75 6e 74 2c 20 6a 2b 32 2c 20 33 29 3b  _Count, j+2, 3);
d660: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d670: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
d680: 4f 50 5f 45 71 2c 20 37 2b 6a 2c 20 61 64 64 72  OP_Eq, 7+j, addr
d690: 2b 38 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  +8, 3);.        
d6a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d6b0: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
d6c0: 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20  , 1, -1);.      
d6d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d6e0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d6f0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 49  ng8, 0, 3, 0, pI
d700: 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52  dx->zName, P4_TR
d710: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
d720: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d730: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
d740: 61 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20  at, 3, 2, 7);.  
d750: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d760: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d770: 52 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29  ResultRow, 7, 1)
d780: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64  ;.        }.#end
d790: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
d7a0: 54 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a  T_BTREECOUNT */.
d7b0: 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20        } .    }. 
d7c0: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
d7d0: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
d7e0: 2c 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43  , ArraySize(endC
d7f0: 6f 64 65 29 2c 20 65 6e 64 43 6f 64 65 29 3b 0a  ode), endCode);.
d800: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d810: 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2c  hangeP2(v, addr,
d820: 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71   -mxErr);.    sq
d830: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
d840: 65 28 76 2c 20 61 64 64 72 2b 31 29 3b 0a 20 20  e(v, addr+1);.  
d850: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
d860: 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP4(v, addr+2,
d870: 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49 43   "ok", P4_STATIC
d880: 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  );.  }else.#endi
d890: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
d8a0: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
d8b0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
d8c0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
d8d0: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
d8e0: 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20  A encoding.  ** 
d8f0: 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
d900: 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75 74 66  g = "utf-8"|"utf
d910: 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c  -16"|"utf-16le"|
d920: 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a  "utf-16be".  **.
d930: 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69 72 73    ** In its firs
d940: 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70 72 61  t form, this pra
d950: 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68 65 20  gma returns the 
d960: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20  encoding of the 
d970: 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61 62 61  main.  ** databa
d980: 73 65 2e 20 49 66 20 74 68 65 20 64 61 74 61 62  se. If the datab
d990: 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ase is not initi
d9a0: 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20 69 6e  alized, it is in
d9b0: 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20  itialized now.. 
d9c0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65 63   **.  ** The sec
d9d0: 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 69 73  ond form of this
d9e0: 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e 6f 2d   pragma is a no-
d9f0: 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e 20 64  op if the main d
da00: 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 2a  atabase file.  *
da10: 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65 61 64  * has not alread
da20: 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  y been initializ
da30: 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
da40: 20 69 74 20 73 65 74 73 20 74 68 65 20 64 65 66   it sets the def
da50: 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f 64 69  ault.  ** encodi
da60: 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ng that will be 
da70: 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61 69  used for the mai
da80: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
da90: 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a 20 20  if a new file.  
daa0: 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e 20 49  ** is created. I
dab0: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d 61  f an existing ma
dac0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
dad0: 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68 65 6e   is opened, then
dae0: 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
daf0: 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  t text encoding 
db00: 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e 67  for the existing
db10: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73 65   database is use
db20: 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e  d..  ** .  ** In
db30: 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77 20 64   all cases new d
db40: 61 74 61 62 61 73 65 73 20 63 72 65 61 74 65 64  atabases created
db50: 20 75 73 69 6e 67 20 74 68 65 20 41 54 54 41 43   using the ATTAC
db60: 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a 20 20  H command are.  
db70: 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  ** created to us
db80: 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61 75  e the same defau
db90: 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  lt text encoding
dba0: 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   as the main dat
dbb0: 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a 20 74  abase. If.  ** t
dbc0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
dbd0: 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 69 6e   has not been in
dbe0: 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f 6f 72  itialized and/or
dbf0: 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 41 54   created when AT
dc00: 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65 78 65  TACH.  ** is exe
dc10: 63 75 74 65 64 2c 20 74 68 69 73 20 69 73 20 64  cuted, this is d
dc20: 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20 41  one before the A
dc30: 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f 6e 2e  TTACH operation.
dc40: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74 68  .  **.  ** In th
dc50: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 68  e second form th
dc60: 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20 74  is pragma sets t
dc70: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
dc80: 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 0a 20   to be used in. 
dc90: 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61 73 65   ** new database
dca0: 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 75   files created u
dcb0: 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62 61  sing this databa
dcc0: 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20 69 73  se handle. It is
dcd0: 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65 66 75   only.  ** usefu
dce0: 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69 6d 6d  l if invoked imm
dcf0: 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74  ediately after t
dd00: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
dd10: 20 69 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71   i.  */.  if( sq
dd20: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
dd30: 66 74 2c 20 22 65 6e 63 6f 64 69 6e 67 22 29 3d  ft, "encoding")=
dd40: 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  =0 ){.    static
dd50: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e   const struct En
dd60: 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68  cName {.      ch
dd70: 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
dd80: 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65   u8 enc;.    } e
dd90: 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20  ncnames[] = {.  
dda0: 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20      { "UTF8",   
ddb0: 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20    SQLITE_UTF8   
ddc0: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
ddd0: 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49  "UTF-8",    SQLI
dde0: 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d  TE_UTF8        }
ddf0: 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c  ,  /* Must be el
de00: 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20  ement [1] */.   
de10: 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c     { "UTF-16le",
de20: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
de30: 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20      },  /* Must 
de40: 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a  be element [2] *
de50: 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31  /.      { "UTF-1
de60: 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  6be", SQLITE_UTF
de70: 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20  16BE     },  /* 
de80: 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20  Must be element 
de90: 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  [3] */.      { "
dea0: 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54  UTF16le",  SQLIT
deb0: 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c  E_UTF16LE     },
dec0: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62  .      { "UTF16b
ded0: 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
dee0: 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6BE     },.     
def0: 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30   { "UTF-16",   0
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55    }, /* SQLITE_U
df20: 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20  TF16NATIVE */.  
df30: 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20      { "UTF16",  
df40: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
df50: 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54       }, /* SQLIT
df60: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f  E_UTF16NATIVE */
df70: 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a  .      { 0, 0 }.
df80: 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74      };.    const
df90: 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20   struct EncName 
dfa0: 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21  *pEnc;.    if( !
dfb0: 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20  zRight ){    /* 
dfc0: 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
dfd0: 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73  " */.      if( s
dfe0: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
dff0: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
e000: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
e010: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
e020: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
e030: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e040: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
e050: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
e060: 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54  encoding", SQLIT
e070: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
e080: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e090: 70 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p2(v, OP_String8
e0a0: 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20 61  , 0, 1);.      a
e0b0: 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b  ssert( encnames[
e0c0: 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63  SQLITE_UTF8].enc
e0d0: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
e0e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
e0f0: 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
e100: 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c  TF16LE].enc==SQL
e110: 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
e120: 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63       assert( enc
e130: 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46  names[SQLITE_UTF
e140: 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  16BE].enc==SQLIT
e150: 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 20  E_UTF16BE );.   
e160: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
e170: 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e  angeP4(v, -1, en
e180: 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73  cnames[ENC(pPars
e190: 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50  e->db)].zName, P
e1a0: 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
e1b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e1c0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
e1d0: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d  ow, 1, 1);.    }
e1e0: 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20  else{           
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e200: 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
e210: 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20   = XXX" */.     
e220: 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20   /* Only change 
e230: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c  the value of sql
e240: 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64  ite.enc if the d
e250: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69  atabase handle i
e260: 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69  s not.      ** i
e270: 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74  nitialized. If t
e280: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
e290: 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77   exists, the new
e2a0: 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75   sqlite.enc valu
e2b0: 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20  e.      ** will 
e2c0: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  be overwritten w
e2d0: 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69  hen the schema i
e2e0: 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49  s next loaded. I
e2f0: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20  f it does not.  
e300: 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65      ** already e
e310: 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62  xists, it will b
e320: 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65  e created to use
e330: 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e   the new encodin
e340: 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a  g value..      *
e350: 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20 20  /.      if( .   
e360: 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f 70       !(DbHasProp
e370: 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53  erty(db, 0, DB_S
e380: 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c  chemaLoaded)) ||
e390: 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73 50   .        DbHasP
e3a0: 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44  roperty(db, 0, D
e3b0: 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20  B_Empty) .      
e3c0: 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
e3d0: 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d  Enc=&encnames[0]
e3e0: 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70  ; pEnc->zName; p
e3f0: 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  Enc++){.        
e400: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
e410: 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
e420: 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a  pEnc->zName) ){.
e430: 20 20 20 20 20 20 20 20 20 20 20 20 45 4e 43 28              ENC(
e440: 70 50 61 72 73 65 2d 3e 64 62 29 20 3d 20 70 45  pParse->db) = pE
e450: 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e  nc->enc ? pEnc->
e460: 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55 54 46  enc : SQLITE_UTF
e470: 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 20 20  16NATIVE;.      
e480: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e490: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e4a0: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 21   }.        if( !
e4b0: 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20  pEnc->zName ){. 
e4c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e4d0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
e4e0: 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e   "unsupported en
e4f0: 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69  coding: %s", zRi
e500: 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ght);.        }.
e510: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
e520: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
e530: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
e540: 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  6 */..#ifndef SQ
e550: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
e560: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
e570: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
e580: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
e590: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20  chema_version.  
e5a0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
e5b0: 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65  abase.]schema_ve
e5c0: 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72  rsion = <integer
e5d0: 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52  >.  **.  **   PR
e5e0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
e5f0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a  user_version.  *
e600: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
e610: 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69  base.]user_versi
e620: 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  on = <integer>. 
e630: 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
e640: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 66 72 65  A [database.]fre
e650: 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69  elist_count = <i
e660: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
e670: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
e680: 62 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f  base.]applicatio
e690: 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47  n_id.  **   PRAG
e6a0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70  MA [database.]ap
e6b0: 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c  plication_id = <
e6c0: 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
e6d0: 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73 20  ** The pragma's 
e6e0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61  schema_version a
e6f0: 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  nd user_version 
e700: 61 72 65 20 75 73 65 64 20 74 6f 20 73 65 74 20  are used to set 
e710: 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20  or get.  ** the 
e720: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68  value of the sch
e730: 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema-version and 
e740: 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65  user-version, re
e750: 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68  spectively. Both
e760: 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61  .  ** the schema
e770: 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65  -version and the
e780: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72   user-version ar
e790: 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20  e 32-bit signed 
e7a0: 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74  integers.  ** st
e7b0: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
e7c0: 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a  base header..  *
e7d0: 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d  *.  ** The schem
e7e0: 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61  a-cookie is usua
e7f0: 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c  lly only manipul
e800: 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  ated internally 
e810: 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20  by SQLite. It.  
e820: 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ** is incremente
e830: 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e  d by SQLite when
e840: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
e850: 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69  e schema is modi
e860: 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72  fied (by.  ** cr
e870: 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69  eating or droppi
e880: 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e  ng a table or in
e890: 64 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61  dex). The schema
e8a0: 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64   version is used
e8b0: 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   by.  ** SQLite 
e8c0: 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72  each time a quer
e8d0: 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f  y is executed to
e8e0: 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
e8f0: 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a   internal cache.
e900: 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65    ** of the sche
e910: 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d  ma used when com
e920: 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71  piling the SQL q
e930: 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65  uery matches the
e940: 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20   schema of.  ** 
e950: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 67 61  the database aga
e960: 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63  inst which the c
e970: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73  ompiled query is
e980: 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74   actually execut
e990: 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74  ed..  ** Subvert
e9a0: 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69  ing this mechani
e9b0: 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52 41  sm by using "PRA
e9c0: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
e9d0: 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20  on" to modify.  
e9e0: 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  ** the schema-ve
e9f0: 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69  rsion is potenti
ea00: 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61  ally dangerous a
ea10: 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70  nd may lead to p
ea20: 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73  rogram.  ** cras
ea30: 68 65 73 20 6f 72 20 64 61 74 61 62 61 73 65 20  hes or database 
ea40: 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20  corruption. Use 
ea50: 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20  with caution!.  
ea60: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72  **.  ** The user
ea70: 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20  -version is not 
ea80: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  used internally 
ea90: 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61  by SQLite. It ma
eaa0: 79 20 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a  y be used by.  *
eab0: 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66  * applications f
eac0: 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a  or any purpose..
ead0: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
eae0: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
eaf0: 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e   "schema_version
eb00: 22 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  ")==0 .   || sql
eb10: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
eb20: 74 2c 20 22 75 73 65 72 5f 76 65 72 73 69 6f 6e  t, "user_version
eb30: 22 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  ")==0 .   || sql
eb40: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
eb50: 74 2c 20 22 66 72 65 65 6c 69 73 74 5f 63 6f 75  t, "freelist_cou
eb60: 6e 74 22 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  nt")==0 .   || s
eb70: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
eb80: 65 66 74 2c 20 22 61 70 70 6c 69 63 61 74 69 6f  eft, "applicatio
eb90: 6e 5f 69 64 22 29 3d 3d 30 20 0a 20 20 29 7b 0a  n_id")==0 .  ){.
eba0: 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b      int iCookie;
ebb0: 20 20 20 2f 2a 20 43 6f 6f 6b 69 65 20 69 6e 64     /* Cookie ind
ebc0: 65 78 2e 20 31 20 66 6f 72 20 73 63 68 65 6d 61  ex. 1 for schema
ebd0: 2d 63 6f 6f 6b 69 65 2c 20 36 20 66 6f 72 20 75  -cookie, 6 for u
ebe0: 73 65 72 2d 63 6f 6f 6b 69 65 2e 20 2a 2f 0a 20  ser-cookie. */. 
ebf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
ec00: 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b  esBtree(v, iDb);
ec10: 0a 20 20 20 20 73 77 69 74 63 68 28 20 7a 4c 65  .    switch( zLe
ec20: 66 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 63  ft[0] ){.      c
ec30: 61 73 65 20 27 61 27 3a 20 63 61 73 65 20 27 41  ase 'a': case 'A
ec40: 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b  ':.        iCook
ec50: 69 65 20 3d 20 42 54 52 45 45 5f 41 50 50 4c 49  ie = BTREE_APPLI
ec60: 43 41 54 49 4f 4e 5f 49 44 3b 0a 20 20 20 20 20  CATION_ID;.     
ec70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
ec80: 63 61 73 65 20 27 66 27 3a 20 63 61 73 65 20 27  case 'f': case '
ec90: 46 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f  F':.        iCoo
eca0: 6b 69 65 20 3d 20 42 54 52 45 45 5f 46 52 45 45  kie = BTREE_FREE
ecb0: 5f 50 41 47 45 5f 43 4f 55 4e 54 3b 0a 20 20 20  _PAGE_COUNT;.   
ecc0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ecd0: 20 20 63 61 73 65 20 27 73 27 3a 20 63 61 73 65    case 's': case
ece0: 20 27 53 27 3a 0a 20 20 20 20 20 20 20 20 69 43   'S':.        iC
ecf0: 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 53 43  ookie = BTREE_SC
ed00: 48 45 4d 41 5f 56 45 52 53 49 4f 4e 3b 0a 20 20  HEMA_VERSION;.  
ed10: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
ed20: 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
ed30: 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54      iCookie = BT
ed40: 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49 4f 4e  REE_USER_VERSION
ed50: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
ed60: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
ed70: 7a 52 69 67 68 74 20 26 26 20 69 43 6f 6f 6b 69  zRight && iCooki
ed80: 65 21 3d 42 54 52 45 45 5f 46 52 45 45 5f 50 41  e!=BTREE_FREE_PA
ed90: 47 45 5f 43 4f 55 4e 54 20 29 7b 0a 20 20 20 20  GE_COUNT ){.    
eda0: 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73    /* Write the s
edb0: 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20  pecified cookie 
edc0: 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73  value */.      s
edd0: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
ede0: 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65  OpList setCookie
edf0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
ee00: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
ee10: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
ee20: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
ee30: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
ee40: 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20          0,  1,  
ee50: 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
ee60: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43         { OP_SetC
ee70: 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
ee80: 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20  0,  1},    /* 2 
ee90: 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  */.      };.    
eea0: 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c    int addr = sql
eeb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
eec0: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
eed0: 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f  etCookie), setCo
eee0: 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  okie);.      sql
eef0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
ef00: 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
ef10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ef20: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
ef30: 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  r+1, sqlite3Atoi
ef40: 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20  (zRight));.     
ef50: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
ef60: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c 20  geP1(v, addr+2, 
ef70: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
ef80: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
ef90: 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b  v, addr+2, iCook
efa0: 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ie);.    }else{.
efb0: 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68        /* Read th
efc0: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b  e specified cook
efd0: 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ie value */.    
efe0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
eff0: 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f  dbeOpList readCo
f000: 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  okie[] = {.     
f010: 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
f020: 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20  ion,     0,  0, 
f030: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
f040: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61          { OP_Rea
f050: 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  dCookie,      0,
f060: 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
f070: 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  1 */.        { O
f080: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20  P_ResultRow,    
f090: 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20     1,  1,  0}.  
f0a0: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
f0b0: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
f0c0: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
f0d0: 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f  ArraySize(readCo
f0e0: 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69  okie), readCooki
f0f0: 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
f100: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
f110: 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20   addr, iDb);.   
f120: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
f130: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31  angeP1(v, addr+1
f140: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
f150: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
f160: 33 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 43 6f  3(v, addr+1, iCo
f170: 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  okie);.      sql
f180: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
f190: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
f1a0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
f1b0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
f1c0: 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
f1d0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
f1e0: 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  T);.    }.  }els
f1f0: 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  e.#endif /* SQLI
f200: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
f210: 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 20 2a  ERSION_PRAGMAS *
f220: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
f230: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
f240: 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f 2a 0a  TION_DIAGS.  /*.
f250: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 63 6f    **   PRAGMA co
f260: 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20 20  mpile_options.  
f270: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 74  **.  ** Return t
f280: 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20  he names of all 
f290: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
f2a0: 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74 68 69  ions used in thi
f2b0: 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e  s build,.  ** on
f2c0: 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72 6f 77  e option per row
f2d0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  ..  */.  if( sql
f2e0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
f2f0: 74 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69  t, "compile_opti
f300: 6f 6e 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ons")==0 ){.    
f310: 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63  int i = 0;.    c
f320: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b  onst char *zOpt;
f330: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f340: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
f350: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
f360: 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69  em = 1;.    sqli
f370: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
f380: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
f390: 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f  NAME, "compile_o
f3a0: 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f 53  ption", SQLITE_S
f3b0: 54 41 54 49 43 29 3b 0a 20 20 20 20 77 68 69 6c  TATIC);.    whil
f3c0: 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74  e( (zOpt = sqlit
f3d0: 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
f3e0: 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b  _get(i++))!=0 ){
f3f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f400: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
f410: 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
f420: 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20 20   zOpt, 0);.     
f430: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f440: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
f450: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d  ow, 1, 1);.    }
f460: 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20  .  }else.#endif 
f470: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
f480: 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
f490: 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  GS */..#ifndef S
f4a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
f4b0: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
f4c0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 77 61 6c  A [database.]wal
f4d0: 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61  _checkpoint = pa
f4e0: 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61  ssive|full|resta
f4f0: 72 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65  rt.  **.  ** Che
f500: 63 6b 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61  ckpoint the data
f510: 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  base..  */.  if(
f520: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
f530: 7a 4c 65 66 74 2c 20 22 77 61 6c 5f 63 68 65 63  zLeft, "wal_chec
f540: 6b 70 6f 69 6e 74 22 29 3d 3d 30 20 29 7b 0a 20  kpoint")==0 ){. 
f550: 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49     int iBt = (pI
f560: 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45  d2->z?iDb:SQLITE
f570: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a  _MAX_ATTACHED);.
f580: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
f590: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f5a0: 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69  T_PASSIVE;.    i
f5b0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
f5c0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
f5d0: 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66  rICmp(zRight, "f
f5e0: 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
f5f0: 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
f600: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
f610: 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  LL;.      }else 
f620: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
f630: 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74  mp(zRight, "rest
f640: 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  art")==0 ){.    
f650: 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
f660: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
f670: 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 0a 20  START;.      }. 
f680: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
f690: 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70  ite3ReadSchema(p
f6a0: 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72  Parse) ) goto pr
f6b0: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 73 71  agma_out;.    sq
f6c0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
f6d0: 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70  ols(v, 3);.    p
f6e0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
f6f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f700: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
f710: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
f720: 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54  busy", SQLITE_ST
f730: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
f740: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
f750: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
f760: 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49  AME, "log", SQLI
f770: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
f780: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
f790: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
f7a0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b  AME_NAME, "check
f7b0: 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45  pointed", SQLITE
f7c0: 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73  _STATIC);..    s
f7d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
f7e0: 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  (v, OP_Checkpoin
f7f0: 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31  t, iBt, eMode, 1
f800: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
f810: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
f820: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
f830: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20  .  }else..  /*. 
f840: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c   **   PRAGMA wal
f850: 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a  _autocheckpoint.
f860: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61    **   PRAGMA wa
f870: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
f880: 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
f890: 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74 61 62  onfigure a datab
f8a0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ase connection t
f8b0: 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically 
f8c0: 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74  checkpoint a dat
f8d0: 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72  abase.  ** after
f8e0: 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20   accumulating N 
f8f0: 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f  frames in the lo
f900: 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20  g. Or query for 
f910: 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
f920: 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a  e.  ** of N..  *
f930: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  /.  if( sqlite3S
f940: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 77  trICmp(zLeft, "w
f950: 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
f960: 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  t")==0 ){.    if
f970: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
f980: 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75    sqlite3_wal_au
f990: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  tocheckpoint(db,
f9a0: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
f9b0: 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
f9c0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
f9d0: 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f 61 75  (pParse, "wal_au
f9e0: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a  tocheckpoint", .
f9f0: 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c 43         db->xWalC
fa00: 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33  allback==sqlite3
fa10: 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f  WalDefaultHook ?
fa20: 20 0a 20 20 20 20 20 20 20 20 20 20 20 53 51 4c   .           SQL
fa30: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64  ITE_PTR_TO_INT(d
fa40: 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30 29  b->pWalArg) : 0)
fa50: 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
fa60: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
fa70: 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72  GMA shrink_memor
fa80: 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73  y.  **.  ** This
fa90: 20 70 72 61 67 6d 61 20 61 74 74 65 6d 70 74 73   pragma attempts
faa0: 20 74 6f 20 66 72 65 65 20 61 73 20 6d 75 63 68   to free as much
fab0: 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69   memory as possi
fac0: 62 6c 65 20 66 72 6f 6d 20 74 68 65 0a 20 20 2a  ble from the.  *
fad0: 2a 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61  * current databa
fae0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20  se connection.. 
faf0: 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
fb00: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
fb10: 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 22 29  "shrink_memory")
fb20: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
fb30: 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
fb40: 6d 6f 72 79 28 64 62 29 3b 0a 20 20 7d 65 6c 73  mory(db);.  }els
fb50: 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  e..  /*.  **   P
fb60: 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f  RAGMA busy_timeo
fb70: 75 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ut.  **   PRAGMA
fb80: 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20   busy_timeout = 
fb90: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c  N.  **.  ** Call
fba0: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
fbb0: 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20 52  meout(db, N).  R
fbc0: 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e  eturn the curren
fbd0: 74 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a  t timeout value.
fbe0: 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20 73    ** if one is s
fbf0: 65 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79 20  et.  If no busy 
fc00: 68 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69 66  handler or a dif
fc10: 66 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e 64  ferent busy hand
fc20: 6c 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a 20  ler is set.  ** 
fc30: 74 68 65 6e 20 30 20 69 73 20 72 65 74 75 72 6e  then 0 is return
fc40: 65 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68 65  ed.  Setting the
fc50: 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f   busy_timeout to
fc60: 20 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20   0 or negative. 
fc70: 20 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65   ** disables the
fc80: 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20   timeout..  */. 
fc90: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
fca0: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 62 75 73 79  Cmp(zLeft, "busy
fcb0: 5f 74 69 6d 65 6f 75 74 22 29 3d 3d 30 20 29 7b  _timeout")==0 ){
fcc0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
fcd0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
fce0: 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62  _busy_timeout(db
fcf0: 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52  , sqlite3Atoi(zR
fd00: 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ight));.    }.  
fd10: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
fd20: 74 28 70 50 61 72 73 65 2c 20 22 74 69 6d 65 6f  t(pParse, "timeo
fd30: 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54 69  ut",  db->busyTi
fd40: 6d 65 6f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 0a  meout);.  }else.
fd50: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
fd60: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
fd70: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
fd80: 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65 70  T).  /*.  ** Rep
fd90: 6f 72 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  ort the current 
fda0: 73 74 61 74 65 20 6f 66 20 66 69 6c 65 20 6c 6f  state of file lo
fdb0: 67 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62  gs for all datab
fdc0: 61 73 65 73 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ases.  */.  if( 
fdd0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
fde0: 4c 65 66 74 2c 20 22 6c 6f 63 6b 5f 73 74 61 74  Left, "lock_stat
fdf0: 75 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  us")==0 ){.    s
fe00: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
fe10: 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61   *const azLockNa
fe20: 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22  me[] = {.      "
fe30: 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61 72  unlocked", "shar
fe40: 65 64 22 2c 20 22 72 65 73 65 72 76 65 64 22 2c  ed", "reserved",
fe50: 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65 78 63   "pending", "exc
fe60: 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20  lusive".    };. 
fe70: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71     int i;.    sq
fe80: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
fe90: 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70  ols(v, 2);.    p
fea0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b  Parse->nMem = 2;
feb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
fec0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
fed0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
fee0: 64 61 74 61 62 61 73 65 22 2c 20 53 51 4c 49 54  database", SQLIT
fef0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
ff00: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
ff10: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
ff20: 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75 73  ME_NAME, "status
ff30: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
ff40: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
ff50: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
ff60: 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a 70 42  .      Btree *pB
ff70: 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  t;.      const c
ff80: 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75  har *zState = "u
ff90: 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69  nknown";.      i
ffa0: 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20  nt j;.      if( 
ffb0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
ffc0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
ffd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ffe0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
fff0: 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
10000 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
10010 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
10020 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44      pBt = db->aD
10030 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20  b[i].pBt;.      
10040 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71  if( pBt==0 || sq
10050 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
10060 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  pBt)==0 ){.     
10070 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f     zState = "clo
10080 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73  sed";.      }els
10090 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69  e if( sqlite3_fi
100a0 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69  le_control(db, i
100b0 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e   ? db->aDb[i].zN
100c0 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20  ame : 0, .      
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
100f0 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b  QLITE_FCNTL_LOCK
10100 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49  STATE, &j)==SQLI
10110 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
10120 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63    zState = azLoc
10130 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20  kName[j];.      
10140 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
10150 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
10160 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
10170 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f 53 54 41  , zState, P4_STA
10180 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
10190 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
101a0 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
101b0 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 7d  , 2);.    }..  }
101c0 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23 69 66  else.#endif..#if
101d0 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
101e0 4f 44 45 43 0a 20 20 69 66 28 20 73 71 6c 69 74  ODEC.  if( sqlit
101f0 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
10200 20 22 6b 65 79 22 29 3d 3d 30 20 26 26 20 7a 52   "key")==0 && zR
10210 69 67 68 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  ight ){.    sqli
10220 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a  te3_key_v2(db, z
10230 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69  Db, zRight, sqli
10240 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
10250 68 74 29 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20  ht));.  }else.  
10260 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
10270 6d 70 28 7a 4c 65 66 74 2c 20 22 72 65 6b 65 79  mp(zLeft, "rekey
10280 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68 74 20  ")==0 && zRight 
10290 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72  ){.    sqlite3_r
102a0 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
102b0 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33   zRight, sqlite3
102c0 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
102d0 29 3b 0a 20 20 7d 65 6c 73 65 0a 20 20 69 66 28  );.  }else.  if(
102e0 20 7a 52 69 67 68 74 20 26 26 20 28 73 71 6c 69   zRight && (sqli
102f0 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
10300 2c 20 22 68 65 78 6b 65 79 22 29 3d 3d 30 20 7c  , "hexkey")==0 |
10310 7c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  |.              
10320 20 20 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d     sqlite3StrICm
10330 70 28 7a 4c 65 66 74 2c 20 22 68 65 78 72 65 6b  p(zLeft, "hexrek
10340 65 79 22 29 3d 3d 30 29 20 29 7b 0a 20 20 20 20  ey")==0) ){.    
10350 69 6e 74 20 69 2c 20 68 31 2c 20 68 32 3b 0a 20  int i, h1, h2;. 
10360 20 20 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d     char zKey[40]
10370 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 28  ;.    for(i=0; (
10380 68 31 20 3d 20 7a 52 69 67 68 74 5b 69 5d 29 21  h1 = zRight[i])!
10390 3d 30 20 26 26 20 28 68 32 20 3d 20 7a 52 69 67  =0 && (h2 = zRig
103a0 68 74 5b 69 2b 31 5d 29 21 3d 30 3b 20 69 2b 3d  ht[i+1])!=0; i+=
103b0 32 29 7b 0a 20 20 20 20 20 20 68 31 20 2b 3d 20  2){.      h1 += 
103c0 39 2a 28 31 26 28 68 31 3e 3e 36 29 29 3b 0a 20  9*(1&(h1>>6));. 
103d0 20 20 20 20 20 68 32 20 2b 3d 20 39 2a 28 31 26       h2 += 9*(1&
103e0 28 68 32 3e 3e 36 29 29 3b 0a 20 20 20 20 20 20  (h2>>6));.      
103f0 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20 28 68 32 20  zKey[i/2] = (h2 
10400 26 20 30 78 30 66 29 20 7c 20 28 28 68 31 20 26  & 0x0f) | ((h1 &
10410 20 30 78 66 29 3c 3c 34 29 3b 0a 20 20 20 20 7d   0xf)<<4);.    }
10420 0a 20 20 20 20 69 66 28 20 28 7a 4c 65 66 74 5b  .    if( (zLeft[
10430 33 5d 20 26 20 30 78 66 29 3d 3d 30 78 62 20 29  3] & 0xf)==0xb )
10440 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
10450 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
10460 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20  zKey, i/2);.    
10470 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
10480 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62  ite3_rekey_v2(db
10490 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
104a0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
104b0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
104c0 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43  ned(SQLITE_HAS_C
104d0 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64  ODEC) || defined
104e0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43  (SQLITE_ENABLE_C
104f0 45 52 4f 44 29 0a 20 20 69 66 28 20 73 71 6c 69  EROD).  if( sqli
10500 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
10510 2c 20 22 61 63 74 69 76 61 74 65 5f 65 78 74 65  , "activate_exte
10520 6e 73 69 6f 6e 73 22 29 3d 3d 30 20 26 26 20 7a  nsions")==0 && z
10530 52 69 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20  Right ){.#ifdef 
10540 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
10550 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
10560 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c  StrNICmp(zRight,
10570 20 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29   "see-", 4)==0 )
10580 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
10590 61 63 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52  activate_see(&zR
105a0 69 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a  ight[4]);.    }.
105b0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
105c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f  LITE_ENABLE_CERO
105d0 44 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  D.    if( sqlite
105e0 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
105f0 2c 20 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d  , "cerod-", 6)==
10600 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
10610 65 33 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f  e3_activate_cero
10620 64 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20  d(&zRight[6]);. 
10630 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 65     }.#endif.  }e
10640 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 0a 20 20  lse.#endif.. .  
10650 7b 2f 2a 20 45 6d 70 74 79 20 45 4c 53 45 20 63  {/* Empty ELSE c
10660 6c 61 75 73 65 20 2a 2f 7d 0a 0a 70 72 61 67 6d  lause */}..pragm
10670 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33  a_out:.  sqlite3
10680 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65 66 74  DbFree(db, zLeft
10690 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
106a0 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29 3b 0a  ee(db, zRight);.
106b0 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
106c0 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20  ITE_OMIT_PRAGMA 
106d0 2a 2f 0a                                         */.