/ Hex Artifact Content
Login

Artifact 89d62c31c6f0a43376fe8d20549b87a6d30c467a:


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 2a 0a 2a 2a 20 24 49 64 3a 20 70 72  d..**.** $Id: pr
01c0: 61 67 6d 61 2e 63 2c 76 20 31 2e 31 33 20 32 30  agma.c,v 1.13 20
01d0: 30 34 2f 30 31 2f 31 39 20 30 34 3a 35 32 3a 32  04/01/19 04:52:2
01e0: 39 20 6a 70 6c 79 6f 6e 20 45 78 70 20 24 0a 2a  9 jplyon Exp $.*
01f0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
0200: 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64  teInt.h".#includ
0210: 65 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a  e <ctype.h>../*.
0220: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0230: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0240: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
0250: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
0260: 67 65 74 42 6f 6f 6c 65 61 6e 28 63 68 61 72 20  getBoolean(char 
0270: 2a 7a 29 7b 0a 20 20 73 74 61 74 69 63 20 63 68  *z){.  static ch
0280: 61 72 20 2a 61 7a 54 72 75 65 5b 5d 20 3d 20 7b  ar *azTrue[] = {
0290: 20 22 79 65 73 22 2c 20 22 6f 6e 22 2c 20 22 74   "yes", "on", "t
02a0: 72 75 65 22 20 7d 3b 0a 20 20 69 6e 74 20 69 3b  rue" };.  int i;
02b0: 0a 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 30 20 29  .  if( z[0]==0 )
02c0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 28   return 0;.  if(
02d0: 20 69 73 64 69 67 69 74 28 7a 5b 30 5d 29 20 7c   isdigit(z[0]) |
02e0: 7c 20 28 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26 20  | (z[0]=='-' && 
02f0: 69 73 64 69 67 69 74 28 7a 5b 31 5d 29 29 20 29  isdigit(z[1])) )
0300: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 61 74 6f  {.    return ato
0310: 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  i(z);.  }.  for(
0320: 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 7a  i=0; i<sizeof(az
0330: 54 72 75 65 29 2f 73 69 7a 65 6f 66 28 61 7a 54  True)/sizeof(azT
0340: 72 75 65 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20  rue[0]); i++){. 
0350: 20 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72     if( sqliteStr
0360: 49 43 6d 70 28 7a 2c 61 7a 54 72 75 65 5b 69 5d  ICmp(z,azTrue[i]
0370: 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b  )==0 ) return 1;
0380: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
0390: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70  .}../*.** Interp
03a0: 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74  ret the given st
03b0: 72 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79  ring as a safety
03c0: 20 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20   level.  Return 
03d0: 30 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20  0 for OFF,.** 1 
03e0: 66 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c  for ON or NORMAL
03f0: 20 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e   and 2 for FULL.
0400: 20 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61    Return 1 for a
0410: 6e 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75  n empty or .** u
0420: 6e 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69  nrecognized stri
0430: 6e 67 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a  ng argument..**.
0440: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  ** Note that the
0450: 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64   values returned
0460: 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68   are one less th
0470: 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74 68  at the values th
0480: 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  at.** should be 
0490: 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69  passed into sqli
04a0: 74 65 42 74 72 65 65 53 65 74 53 61 66 65 74 79  teBtreeSetSafety
04b0: 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73  Level().  The is
04c0: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70   done.** to supp
04d0: 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63  ort legacy SQL c
04e0: 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65 74 79  ode.  The safety
04f0: 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62   level used to b
0500: 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64  e boolean.** and
0510: 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d   older scripts m
0520: 61 79 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d  ay have used num
0530: 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61  bers 0 for OFF a
0540: 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a  nd 1 for ON..*/.
0550: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 53 61  static int getSa
0560: 66 65 74 79 4c 65 76 65 6c 28 63 68 61 72 20 2a  fetyLevel(char *
0570: 7a 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  z){.  static con
0580: 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20  st struct {.    
0590: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 57 6f 72  const char *zWor
05a0: 64 3b 0a 20 20 20 20 69 6e 74 20 76 61 6c 3b 0a  d;.    int val;.
05b0: 20 20 7d 20 61 4b 65 79 5b 5d 20 3d 20 7b 0a 20    } aKey[] = {. 
05c0: 20 20 20 7b 20 22 6e 6f 22 2c 20 20 20 20 30 20     { "no",    0 
05d0: 7d 2c 0a 20 20 20 20 7b 20 22 6f 66 66 22 2c 20  },.    { "off", 
05e0: 20 20 30 20 7d 2c 0a 20 20 20 20 7b 20 22 66 61    0 },.    { "fa
05f0: 6c 73 65 22 2c 20 30 20 7d 2c 0a 20 20 20 20 7b  lse", 0 },.    {
0600: 20 22 79 65 73 22 2c 20 20 20 31 20 7d 2c 0a 20   "yes",   1 },. 
0610: 20 20 20 7b 20 22 6f 6e 22 2c 20 20 20 20 31 20     { "on",    1 
0620: 7d 2c 0a 20 20 20 20 7b 20 22 74 72 75 65 22 2c  },.    { "true",
0630: 20 20 31 20 7d 2c 0a 20 20 20 20 7b 20 22 66 75    1 },.    { "fu
0640: 6c 6c 22 2c 20 20 32 20 7d 2c 0a 20 20 7d 3b 0a  ll",  2 },.  };.
0650: 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a    int i;.  if( z
0660: 5b 30 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  [0]==0 ) return 
0670: 31 3b 0a 20 20 69 66 28 20 69 73 64 69 67 69 74  1;.  if( isdigit
0680: 28 7a 5b 30 5d 29 20 7c 7c 20 28 7a 5b 30 5d 3d  (z[0]) || (z[0]=
0690: 3d 27 2d 27 20 26 26 20 69 73 64 69 67 69 74 28  ='-' && isdigit(
06a0: 7a 5b 31 5d 29 29 20 29 7b 0a 20 20 20 20 72 65  z[1])) ){.    re
06b0: 74 75 72 6e 20 61 74 6f 69 28 7a 29 3b 0a 20 20  turn atoi(z);.  
06c0: 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73  }.  for(i=0; i<s
06d0: 69 7a 65 6f 66 28 61 4b 65 79 29 2f 73 69 7a 65  izeof(aKey)/size
06e0: 6f 66 28 61 4b 65 79 5b 30 5d 29 3b 20 69 2b 2b  of(aKey[0]); i++
06f0: 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ){.    if( sqlit
0700: 65 53 74 72 49 43 6d 70 28 7a 2c 61 4b 65 79 5b  eStrICmp(z,aKey[
0710: 69 5d 2e 7a 57 6f 72 64 29 3d 3d 30 20 29 20 72  i].zWord)==0 ) r
0720: 65 74 75 72 6e 20 61 4b 65 79 5b 69 5d 2e 76 61  eturn aKey[i].va
0730: 6c 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  l;.  }.  return 
0740: 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  1;.}../*.** Inte
0750: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
0760: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
0770: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
0780: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
0790: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
07a0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
07b0: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
07c0: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
07d0: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
07e0: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
07f0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
0800: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
0810: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
0820: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20  char *z){.  if( 
0830: 7a 5b 30 5d 3e 3d 27 30 27 20 7c 7c 20 7a 5b 30  z[0]>='0' || z[0
0840: 5d 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20 72 65  ]<='2' ){.    re
0850: 74 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30 27 3b  turn z[0] - '0';
0860: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
0870: 69 74 65 53 74 72 49 43 6d 70 28 7a 2c 20 22 66  iteStrICmp(z, "f
0880: 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ile")==0 ){.    
0890: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73  return 1;.  }els
08a0: 65 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49  e if( sqliteStrI
08b0: 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72 79 22 29  Cmp(z, "memory")
08c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
08d0: 6e 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n 2;.  }else{.  
08e0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
08f0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
0900: 20 61 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d   a pragma statem
0910: 65 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61  ent.  .**.** Pra
0920: 67 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69 73  gmas are of this
0930: 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   form:.**.**    
0940: 20 20 50 52 41 47 4d 41 20 69 64 20 3d 20 76 61    PRAGMA id = va
0950: 6c 75 65 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 64  lue.**.** The id
0960: 65 6e 74 69 66 69 65 72 20 6d 69 67 68 74 20 61  entifier might a
0970: 6c 73 6f 20 62 65 20 61 20 73 74 72 69 6e 67 2e  lso be a string.
0980: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 61    The value is a
0990: 20 73 74 72 69 6e 67 2c 20 61 6e 64 0a 2a 2a 20   string, and.** 
09a0: 69 64 65 6e 74 69 66 69 65 72 2c 20 6f 72 20 61  identifier, or a
09b0: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 6d 69 6e   number.  If min
09c0: 75 73 46 6c 61 67 20 69 73 20 74 72 75 65 2c 20  usFlag is true, 
09d0: 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 69  then the value i
09e0: 73 0a 2a 2a 20 61 20 6e 75 6d 62 65 72 20 74 68  s.** a number th
09f0: 61 74 20 77 61 73 20 70 72 65 63 65 64 65 64 20  at was preceded 
0a00: 62 79 20 61 20 6d 69 6e 75 73 20 73 69 67 6e 2e  by a minus sign.
0a10: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 50  .*/.void sqliteP
0a20: 72 61 67 6d 61 28 50 61 72 73 65 20 2a 70 50 61  ragma(Parse *pPa
0a30: 72 73 65 2c 20 54 6f 6b 65 6e 20 2a 70 4c 65 66  rse, Token *pLef
0a40: 74 2c 20 54 6f 6b 65 6e 20 2a 70 52 69 67 68 74  t, Token *pRight
0a50: 2c 20 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 29  , int minusFlag)
0a60: 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20  {.  char *zLeft 
0a70: 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 52 69  = 0;.  char *zRi
0a80: 67 68 74 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  ght = 0;.  sqlit
0a90: 65 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e  e *db = pParse->
0aa0: 64 62 3b 0a 20 20 56 64 62 65 20 2a 76 20 3d 20  db;.  Vdbe *v = 
0ab0: 73 71 6c 69 74 65 47 65 74 56 64 62 65 28 70 50  sqliteGetVdbe(pP
0ac0: 61 72 73 65 29 3b 0a 20 20 69 66 28 20 76 3d 3d  arse);.  if( v==
0ad0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 0a 20 20 7a  0 ) return;..  z
0ae0: 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 53 74 72  Left = sqliteStr
0af0: 4e 44 75 70 28 70 4c 65 66 74 2d 3e 7a 2c 20 70  NDup(pLeft->z, p
0b00: 4c 65 66 74 2d 3e 6e 29 3b 0a 20 20 73 71 6c 69  Left->n);.  sqli
0b10: 74 65 44 65 71 75 6f 74 65 28 7a 4c 65 66 74 29  teDequote(zLeft)
0b20: 3b 0a 20 20 69 66 28 20 6d 69 6e 75 73 46 6c 61  ;.  if( minusFla
0b30: 67 20 29 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  g ){.    zRight 
0b40: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 53  = 0;.    sqliteS
0b50: 65 74 4e 53 74 72 69 6e 67 28 26 7a 52 69 67 68  etNString(&zRigh
0b60: 74 2c 20 22 2d 22 2c 20 31 2c 20 70 52 69 67 68  t, "-", 1, pRigh
0b70: 74 2d 3e 7a 2c 20 70 52 69 67 68 74 2d 3e 6e 2c  t->z, pRight->n,
0b80: 20 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   0);.  }else{.  
0b90: 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74    zRight = sqlit
0ba0: 65 53 74 72 4e 44 75 70 28 70 52 69 67 68 74 2d  eStrNDup(pRight-
0bb0: 3e 7a 2c 20 70 52 69 67 68 74 2d 3e 6e 29 3b 0a  >z, pRight->n);.
0bc0: 20 20 20 20 73 71 6c 69 74 65 44 65 71 75 6f 74      sqliteDequot
0bd0: 65 28 7a 52 69 67 68 74 29 3b 0a 20 20 7d 0a 20  e(zRight);.  }. 
0be0: 20 69 66 28 20 73 71 6c 69 74 65 41 75 74 68 43   if( sqliteAuthC
0bf0: 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51 4c  heck(pParse, SQL
0c00: 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66  ITE_PRAGMA, zLef
0c10: 74 2c 20 7a 52 69 67 68 74 2c 20 30 29 20 29 7b  t, zRight, 0) ){
0c20: 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28  .    sqliteFree(
0c30: 7a 4c 65 66 74 29 3b 0a 20 20 20 20 73 71 6c 69  zLeft);.    sqli
0c40: 74 65 46 72 65 65 28 7a 52 69 67 68 74 29 3b 0a  teFree(zRight);.
0c50: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a      return;.  }.
0c60: 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41   .  /*.  **  PRA
0c70: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0c80: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
0c90: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0ca0: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
0cb0: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
0cc0: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
0cd0: 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74  rrent persistent
0ce0: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
0cf0: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
0d00: 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75   size.  The valu
0d10: 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74 68  e returned is th
0d20: 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
0d30: 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69   of.  ** pages i
0d40: 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65  n the page cache
0d50: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
0d60: 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68 65  rm sets both the
0d70: 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61   current.  ** pa
0d80: 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61  ge cache size va
0d90: 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72 73  lue and the pers
0da0: 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63 68  istent page cach
0db0: 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a  e size value.  *
0dc0: 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  * stored in the 
0dd0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
0de0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 64 65 66   **.  ** The def
0df0: 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20  ault cache size 
0e00: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 74  is stored in met
0e10: 61 2d 76 61 6c 75 65 20 32 20 6f 66 20 70 61 67  a-value 2 of pag
0e20: 65 20 31 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20  e 1 of the.  ** 
0e30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
0e40: 54 68 65 20 63 61 63 68 65 20 73 69 7a 65 20 69  The cache size i
0e50: 73 20 61 63 74 75 61 6c 6c 79 20 74 68 65 20 61  s actually the a
0e60: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
0e70: 0a 20 20 2a 2a 20 74 68 69 73 20 6d 65 6d 6f 72  .  ** this memor
0e80: 79 20 6c 6f 63 61 74 69 6f 6e 2e 20 20 54 68 65  y location.  The
0e90: 20 73 69 67 6e 20 6f 66 20 6d 65 74 61 2d 76 61   sign of meta-va
0ea0: 6c 75 65 20 32 20 64 65 74 65 72 6d 69 6e 65 73  lue 2 determines
0eb0: 20 74 68 65 0a 20 20 2a 2a 20 73 79 6e 63 68 72   the.  ** synchr
0ec0: 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 2e 20 20  onous setting.  
0ed0: 41 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  A negative value
0ee0: 20 6d 65 61 6e 73 20 73 79 6e 63 68 72 6f 6e 6f   means synchrono
0ef0: 75 73 20 69 73 20 6f 66 66 0a 20 20 2a 2a 20 61  us is off.  ** a
0f00: 6e 64 20 61 20 70 6f 73 69 74 69 76 65 20 76 61  nd a positive va
0f10: 6c 75 65 20 6d 65 61 6e 73 20 73 79 6e 63 68 72  lue means synchr
0f20: 6f 6e 6f 75 73 20 69 73 20 6f 6e 2e 0a 20 20 2a  onous is on..  *
0f30: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74  /.  if( sqliteSt
0f40: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 64 65 66  rICmp(zLeft,"def
0f50: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 22  ault_cache_size"
0f60: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )==0 ){.    stat
0f70: 69 63 20 56 64 62 65 4f 70 20 67 65 74 43 61 63  ic VdbeOp getCac
0f80: 68 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20  heSize[] = {.   
0f90: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
0fa0: 69 65 2c 20 20 30 2c 20 32 2c 20 20 20 20 20 20  ie,  0, 2,      
0fb0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
0fc0: 5f 41 62 73 56 61 6c 75 65 2c 20 20 20 20 30 2c  _AbsValue,    0,
0fd0: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
0fe0: 20 20 20 20 20 7b 20 4f 50 5f 44 75 70 2c 20 20       { OP_Dup,  
0ff0: 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20         0, 0,    
1000: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
1010: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
1020: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
1030: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 65 2c 20  .      { OP_Ne, 
1040: 20 20 20 20 20 20 20 20 20 30 2c 20 36 2c 20 20           0, 6,  
1050: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
1060: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
1070: 20 20 4d 41 58 5f 50 41 47 45 53 2c 30 2c 20 30    MAX_PAGES,0, 0
1080: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f  },.      { OP_Co
1090: 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30 2c  lumnName,  0, 0,
10a0: 20 20 20 20 20 20 20 20 22 63 61 63 68 65 5f 73          "cache_s
10b0: 69 7a 65 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f  ize"},.      { O
10c0: 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31  P_Callback,    1
10d0: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
10e0: 20 20 20 20 7d 3b 0a 20 20 20 20 69 66 28 20 70      };.    if( p
10f0: 52 69 67 68 74 2d 3e 7a 3d 3d 70 4c 65 66 74 2d  Right->z==pLeft-
1100: 3e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >z ){.      sqli
1110: 74 65 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  teVdbeAddOpList(
1120: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74  v, ArraySize(get
1130: 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43  CacheSize), getC
1140: 61 63 68 65 53 69 7a 65 29 3b 0a 20 20 20 20 7d  acheSize);.    }
1150: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
1160: 61 64 64 72 3b 0a 20 20 20 20 20 20 69 6e 74 20  addr;.      int 
1170: 73 69 7a 65 20 3d 20 61 74 6f 69 28 7a 52 69 67  size = atoi(zRig
1180: 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  ht);.      if( s
1190: 69 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d 20 2d  ize<0 ) size = -
11a0: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
11b0: 74 65 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  teBeginWriteOper
11c0: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
11d0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
11e0: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
11f0: 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20  _Integer, size, 
1200: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
1210: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
1220: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 30 2c 20 32  ReadCookie, 0, 2
1230: 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20  );.      addr = 
1240: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
1250: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
1260: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
1270: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
1280: 50 5f 47 65 2c 20 30 2c 20 61 64 64 72 2b 33 29  P_Ge, 0, addr+3)
1290: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  ;.      sqliteVd
12a0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4e 65  beAddOp(v, OP_Ne
12b0: 67 61 74 69 76 65 2c 20 30 2c 20 30 29 3b 0a 20  gative, 0, 0);. 
12c0: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
12d0: 64 64 4f 70 28 76 2c 20 4f 50 5f 53 65 74 43 6f  ddOp(v, OP_SetCo
12e0: 6f 6b 69 65 2c 20 30 2c 20 32 29 3b 0a 20 20 20  okie, 0, 2);.   
12f0: 20 20 20 73 71 6c 69 74 65 45 6e 64 57 72 69 74     sqliteEndWrit
1300: 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73  eOperation(pPars
1310: 65 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 63 61  e);.      db->ca
1320: 63 68 65 5f 73 69 7a 65 20 3d 20 64 62 2d 3e 63  che_size = db->c
1330: 61 63 68 65 5f 73 69 7a 65 3c 30 20 3f 20 2d 73  ache_size<0 ? -s
1340: 69 7a 65 20 3a 20 73 69 7a 65 3b 0a 20 20 20 20  ize : size;.    
1350: 20 20 73 71 6c 69 74 65 42 74 72 65 65 53 65 74    sqliteBtreeSet
1360: 43 61 63 68 65 53 69 7a 65 28 64 62 2d 3e 61 44  CacheSize(db->aD
1370: 62 5b 30 5d 2e 70 42 74 2c 20 64 62 2d 3e 63 61  b[0].pBt, db->ca
1380: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
1390: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20  .  }else..  /*. 
13a0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 63 61 63 68   **  PRAGMA cach
13b0: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
13c0: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 4e  GMA cache_size=N
13d0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
13e0: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
13f0: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 6f  s the current lo
1400: 63 61 6c 20 73 65 74 74 69 6e 67 20 66 6f 72 20  cal setting for 
1410: 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  the.  ** page ca
1420: 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20 6c  che size.  The l
1430: 6f 63 61 6c 20 73 65 74 74 69 6e 67 20 63 61 6e  ocal setting can
1440: 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 66 72   be different fr
1450: 6f 6d 0a 20 20 2a 2a 20 74 68 65 20 70 65 72 73  om.  ** the pers
1460: 69 73 74 65 6e 74 20 63 61 63 68 65 20 73 69 7a  istent cache siz
1470: 65 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  e value that is 
1480: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
1490: 74 61 62 61 73 65 0a 20 20 2a 2a 20 66 69 6c 65  tabase.  ** file
14a0: 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 76 61   itself.  The va
14b0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  lue returned is 
14c0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
14d0: 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73  er of.  ** pages
14e0: 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63   in the page cac
14f0: 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20  he.  The second 
1500: 66 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f  form sets the lo
1510: 63 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  cal.  ** page ca
1520: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20  che size value. 
1530: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 63 68 61   It does not cha
1540: 6e 67 65 20 74 68 65 20 70 65 72 73 69 73 74 65  nge the persiste
1550: 6e 74 0a 20 20 2a 2a 20 63 61 63 68 65 20 73 69  nt.  ** cache si
1560: 7a 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65  ze stored on the
1570: 20 64 69 73 6b 20 73 6f 20 74 68 65 20 63 61 63   disk so the cac
1580: 68 65 20 73 69 7a 65 20 77 69 6c 6c 20 72 65 76  he size will rev
1590: 65 72 74 0a 20 20 2a 2a 20 74 6f 20 69 74 73 20  ert.  ** to its 
15a0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 68  default value wh
15b0: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
15c0: 69 73 20 63 6c 6f 73 65 64 20 61 6e 64 20 72 65  is closed and re
15d0: 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 20 4e 20 73  opened..  ** N s
15e0: 68 6f 75 6c 64 20 62 65 20 61 20 70 6f 73 69 74  hould be a posit
15f0: 69 76 65 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a  ive integer..  *
1600: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74  /.  if( sqliteSt
1610: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 63 61 63  rICmp(zLeft,"cac
1620: 68 65 5f 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a  he_size")==0 ){.
1630: 20 20 20 20 73 74 61 74 69 63 20 56 64 62 65 4f      static VdbeO
1640: 70 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d  p getCacheSize[]
1650: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
1660: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20  ColumnName,  0, 
1670: 30 2c 20 20 20 20 20 20 20 20 22 63 61 63 68 65  0,        "cache
1680: 5f 73 69 7a 65 22 7d 2c 0a 20 20 20 20 20 20 7b  _size"},.      {
1690: 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20   OP_Callback,   
16a0: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
16b0: 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 66 28  ,.    };.    if(
16c0: 20 70 52 69 67 68 74 2d 3e 7a 3d 3d 70 4c 65 66   pRight->z==pLef
16d0: 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 20 20 69 6e  t->z ){.      in
16e0: 74 20 73 69 7a 65 20 3d 20 64 62 2d 3e 63 61 63  t size = db->cac
16f0: 68 65 5f 73 69 7a 65 3b 3b 0a 20 20 20 20 20 20  he_size;;.      
1700: 69 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69 7a  if( size<0 ) siz
1710: 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20  e = -size;.     
1720: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
1730: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
1740: 73 69 7a 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  size, 0);.      
1750: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c  sqliteVdbeAddOpL
1760: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
1770: 28 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20  (getCacheSize), 
1780: 67 65 74 43 61 63 68 65 53 69 7a 65 29 3b 0a 20  getCacheSize);. 
1790: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17a0: 69 6e 74 20 73 69 7a 65 20 3d 20 61 74 6f 69 28  int size = atoi(
17b0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 69  zRight);.      i
17c0: 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69 7a 65  f( size<0 ) size
17d0: 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20   = -size;.      
17e0: 69 66 28 20 64 62 2d 3e 63 61 63 68 65 5f 73 69  if( db->cache_si
17f0: 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d 20 2d 73  ze<0 ) size = -s
1800: 69 7a 65 3b 0a 20 20 20 20 20 20 64 62 2d 3e 63  ize;.      db->c
1810: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
1820: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42 74  ;.      sqliteBt
1830: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
1840: 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c 20  db->aDb[0].pBt, 
1850: 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b  db->cache_size);
1860: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
1870: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
1880: 41 20 64 65 66 61 75 6c 74 5f 73 79 6e 63 68 72  A default_synchr
1890: 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 50 52 41 47  onous.  **  PRAG
18a0: 4d 41 20 64 65 66 61 75 6c 74 5f 73 79 6e 63 68  MA default_synch
18b0: 72 6f 6e 6f 75 73 3d 4f 4e 7c 4f 46 46 7c 4e 4f  ronous=ON|OFF|NO
18c0: 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20  RMAL|FULL.  **. 
18d0: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
18e0: 72 6d 20 72 65 74 75 72 6e 73 20 74 68 65 20 70  rm returns the p
18f0: 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65 20  ersistent value 
1900: 6f 66 20 74 68 65 20 22 73 79 6e 63 68 72 6f 6e  of the "synchron
1910: 6f 75 73 22 20 73 65 74 74 69 6e 67 0a 20 20 2a  ous" setting.  *
1920: 2a 20 74 68 61 74 20 69 73 20 73 74 6f 72 65 64  * that is stored
1930: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1940: 2e 20 20 54 68 69 73 20 69 73 20 74 68 65 20 73  .  This is the s
1950: 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69  ynchronous setti
1960: 6e 67 20 74 68 61 74 0a 20 20 2a 2a 20 69 73 20  ng that.  ** is 
1970: 75 73 65 64 20 77 68 65 6e 65 76 65 72 20 74 68  used whenever th
1980: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 70  e database is op
1990: 65 6e 65 64 20 75 6e 6c 65 73 73 20 6f 76 65 72  ened unless over
19a0: 72 69 64 64 65 6e 20 62 79 20 61 20 73 65 70 61  ridden by a sepa
19b0: 72 61 74 65 0a 20 20 2a 2a 20 22 73 79 6e 63 68  rate.  ** "synch
19c0: 72 6f 6e 6f 75 73 22 20 70 72 61 67 6d 61 2e 20  ronous" pragma. 
19d0: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
19e0: 20 63 68 61 6e 67 65 73 20 74 68 65 20 70 65 72   changes the per
19f0: 73 69 73 74 65 6e 74 20 61 6e 64 20 74 68 65 0a  sistent and the.
1a00: 20 20 2a 2a 20 6c 6f 63 61 6c 20 73 79 6e 63 68    ** local synch
1a10: 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 74  ronous setting t
1a20: 6f 20 74 68 65 20 76 61 6c 75 65 20 67 69 76 65  o the value give
1a30: 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20  n..  **.  ** If 
1a40: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73 20 4f  synchronous is O
1a50: 46 46 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20  FF, SQLite does 
1a60: 6e 6f 74 20 61 74 74 65 6d 70 74 20 61 6e 79 20  not attempt any 
1a70: 66 73 79 6e 63 28 29 20 73 79 73 74 65 6d 73 20  fsync() systems 
1a80: 63 61 6c 6c 73 0a 20 20 2a 2a 20 74 6f 20 6d 61  calls.  ** to ma
1a90: 6b 65 20 73 75 72 65 20 64 61 74 61 20 69 73 20  ke sure data is 
1aa0: 63 6f 6d 6d 69 74 74 65 64 20 74 6f 20 64 69 73  committed to dis
1ab0: 6b 2e 20 20 57 72 69 74 65 20 6f 70 65 72 61 74  k.  Write operat
1ac0: 69 6f 6e 73 20 61 72 65 20 76 65 72 79 20 66 61  ions are very fa
1ad0: 73 74 2c 0a 20 20 2a 2a 20 62 75 74 20 61 20 70  st,.  ** but a p
1ae0: 6f 77 65 72 20 66 61 69 6c 75 72 65 20 63 61 6e  ower failure can
1af0: 20 6c 65 61 76 65 20 74 68 65 20 64 61 74 61 62   leave the datab
1b00: 61 73 65 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73  ase in an incons
1b10: 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a 20 20  istent state..  
1b20: 2a 2a 20 49 66 20 73 79 6e 63 68 72 6f 6e 6f 75  ** If synchronou
1b30: 73 20 69 73 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41  s is ON or NORMA
1b40: 4c 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 64  L, SQLite will d
1b50: 6f 20 61 6e 20 66 73 79 6e 63 28 29 20 73 79 73  o an fsync() sys
1b60: 74 65 6d 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  tem call to.  **
1b70: 20 6d 61 6b 65 20 73 75 72 65 20 64 61 74 61 20   make sure data 
1b80: 69 73 20 62 65 69 6e 67 20 77 72 69 74 74 65 6e  is being written
1b90: 20 74 6f 20 64 69 73 6b 2e 20 20 54 68 65 20 72   to disk.  The r
1ba0: 69 73 6b 20 6f 66 20 63 6f 72 72 75 70 74 69 6f  isk of corruptio
1bb0: 6e 20 64 75 65 20 74 6f 0a 20 20 2a 2a 20 61 20  n due to.  ** a 
1bc0: 70 6f 77 65 72 20 6c 6f 73 73 20 69 6e 20 74 68  power loss in th
1bd0: 69 73 20 6d 6f 64 65 20 69 73 20 6e 65 67 6c 69  is mode is negli
1be0: 67 69 62 6c 65 20 62 75 74 20 6e 6f 6e 2d 7a 65  gible but non-ze
1bf0: 72 6f 2e 20 20 49 66 20 73 79 6e 63 68 72 6f 6e  ro.  If synchron
1c00: 6f 75 73 0a 20 20 2a 2a 20 69 73 20 46 55 4c 4c  ous.  ** is FULL
1c10: 2c 20 65 78 74 72 61 20 66 73 79 6e 63 28 29 73  , extra fsync()s
1c20: 20 6f 63 63 75 72 20 74 6f 20 72 65 64 75 63 65   occur to reduce
1c30: 20 74 68 65 20 72 69 73 6b 20 6f 66 20 63 6f 72   the risk of cor
1c40: 72 75 70 74 69 6f 6e 20 74 6f 20 6e 65 61 72 0a  ruption to near.
1c50: 20 20 2a 2a 20 7a 65 72 6f 2c 20 62 75 74 20 77    ** zero, but w
1c60: 69 74 68 20 61 20 77 72 69 74 65 20 70 65 72 66  ith a write perf
1c70: 6f 72 6d 61 6e 63 65 20 70 65 6e 61 6c 74 79 2e  ormance penalty.
1c80: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d 6f    The default mo
1c90: 64 65 20 69 73 20 4e 4f 52 4d 41 4c 2e 0a 20 20  de is NORMAL..  
1ca0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53  */.  if( sqliteS
1cb0: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 64 65  trICmp(zLeft,"de
1cc0: 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f 75  fault_synchronou
1cd0: 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74  s")==0 ){.    st
1ce0: 61 74 69 63 20 56 64 62 65 4f 70 20 67 65 74 53  atic VdbeOp getS
1cf0: 79 6e 63 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ync[] = {.      
1d00: 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  { OP_ColumnName,
1d10: 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 22    0, 0,        "
1d20: 73 79 6e 63 68 72 6f 6e 6f 75 73 22 7d 2c 0a 20  synchronous"},. 
1d30: 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
1d40: 6f 6b 69 65 2c 20 20 30 2c 20 33 2c 20 20 20 20  okie,  0, 3,    
1d50: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
1d60: 4f 50 5f 44 75 70 2c 20 20 20 20 20 20 20 20 20  OP_Dup,         
1d70: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
1d80: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20  .      { OP_If, 
1d90: 20 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20           0, 0,  
1da0: 20 20 20 20 20 20 30 7d 2c 20 20 2f 2a 20 33 20        0},  /* 3 
1db0: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  */.      { OP_Re
1dc0: 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 32 2c  adCookie,  0, 2,
1dd0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
1de0: 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20    { OP_Integer, 
1df0: 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20      0, 0,       
1e00: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
1e10: 4c 74 2c 20 20 20 20 20 20 20 20 20 20 30 2c 20  Lt,          0, 
1e20: 35 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  5,        0},.  
1e30: 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c      { OP_AddImm,
1e40: 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20        1, 0,     
1e50: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
1e60: 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31  P_Callback,    1
1e70: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
1e80: 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c        { OP_Halt,
1e90: 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20          0, 0,   
1ea0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
1eb0: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20   OP_AddImm,     
1ec0: 2d 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d  -1, 0,        0}
1ed0: 2c 20 20 2f 2a 20 31 30 20 2a 2f 0a 20 20 20 20  ,  /* 10 */.    
1ee0: 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c    { OP_Callback,
1ef0: 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20      1, 0,       
1f00: 20 30 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69   0}.    };.    i
1f10: 66 28 20 70 52 69 67 68 74 2d 3e 7a 3d 3d 70 4c  f( pRight->z==pL
1f20: 65 66 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 20 20  eft->z ){.      
1f30: 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74  int addr = sqlit
1f40: 65 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  eVdbeAddOpList(v
1f50: 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 53  , ArraySize(getS
1f60: 79 6e 63 29 2c 20 67 65 74 53 79 6e 63 29 3b 0a  ync), getSync);.
1f70: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
1f80: 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
1f90: 2b 33 2c 20 61 64 64 72 2b 31 30 29 3b 0a 20 20  +3, addr+10);.  
1fa0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
1fb0: 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 20 20 69  nt addr;.      i
1fc0: 6e 74 20 73 69 7a 65 20 3d 20 64 62 2d 3e 63 61  nt size = db->ca
1fd0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20  che_size;.      
1fe0: 69 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69 7a  if( size<0 ) siz
1ff0: 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20  e = -size;.     
2000: 20 73 71 6c 69 74 65 42 65 67 69 6e 57 72 69 74   sqliteBeginWrit
2010: 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73  eOperation(pPars
2020: 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  e, 0, 0);.      
2030: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
2040: 76 2c 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  v, OP_ReadCookie
2050: 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  , 0, 2);.      s
2060: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76  qliteVdbeAddOp(v
2070: 2c 20 4f 50 5f 44 75 70 2c 20 30 2c 20 30 29 3b  , OP_Dup, 0, 0);
2080: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
2090: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c  liteVdbeAddOp(v,
20a0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20   OP_Integer, 0, 
20b0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
20c0: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
20d0: 4e 65 2c 20 30 2c 20 61 64 64 72 2b 33 29 3b 0a  Ne, 0, addr+3);.
20e0: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
20f0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 41 64 64 49  AddOp(v, OP_AddI
2100: 6d 6d 2c 20 4d 41 58 5f 50 41 47 45 53 2c 20 30  mm, MAX_PAGES, 0
2110: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  );.      sqliteV
2120: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 41  dbeAddOp(v, OP_A
2130: 62 73 56 61 6c 75 65 2c 20 30 2c 20 30 29 3b 0a  bsValue, 0, 0);.
2140: 20 20 20 20 20 20 64 62 2d 3e 73 61 66 65 74 79        db->safety
2150: 5f 6c 65 76 65 6c 20 3d 20 67 65 74 53 61 66 65  _level = getSafe
2160: 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74 29 2b  tyLevel(zRight)+
2170: 31 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  1;.      if( db-
2180: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 3d 3d 31  >safety_level==1
2190: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
21a0: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
21b0: 50 5f 4e 65 67 61 74 69 76 65 2c 20 30 2c 20 30  P_Negative, 0, 0
21c0: 29 3b 0a 20 20 20 20 20 20 20 20 73 69 7a 65 20  );.        size 
21d0: 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20 7d  = -size;.      }
21e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
21f0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 65 74  eAddOp(v, OP_Set
2200: 43 6f 6f 6b 69 65 2c 20 30 2c 20 32 29 3b 0a 20  Cookie, 0, 2);. 
2210: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
2220: 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67  ddOp(v, OP_Integ
2230: 65 72 2c 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c  er, db->safety_l
2240: 65 76 65 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20  evel, 0);.      
2250: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
2260: 76 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c  v, OP_SetCookie,
2270: 20 30 2c 20 33 29 3b 0a 20 20 20 20 20 20 73 71   0, 3);.      sq
2280: 6c 69 74 65 45 6e 64 57 72 69 74 65 4f 70 65 72  liteEndWriteOper
2290: 61 74 69 6f 6e 28 70 50 61 72 73 65 29 3b 0a 20  ation(pParse);. 
22a0: 20 20 20 20 20 64 62 2d 3e 63 61 63 68 65 5f 73       db->cache_s
22b0: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
22c0: 20 20 73 71 6c 69 74 65 42 74 72 65 65 53 65 74    sqliteBtreeSet
22d0: 43 61 63 68 65 53 69 7a 65 28 64 62 2d 3e 61 44  CacheSize(db->aD
22e0: 62 5b 30 5d 2e 70 42 74 2c 20 64 62 2d 3e 63 61  b[0].pBt, db->ca
22f0: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 20  che_size);.     
2300: 20 73 71 6c 69 74 65 42 74 72 65 65 53 65 74 53   sqliteBtreeSetS
2310: 61 66 65 74 79 4c 65 76 65 6c 28 64 62 2d 3e 61  afetyLevel(db->a
2320: 44 62 5b 30 5d 2e 70 42 74 2c 20 64 62 2d 3e 73  Db[0].pBt, db->s
2330: 61 66 65 74 79 5f 6c 65 76 65 6c 29 3b 0a 20 20  afety_level);.  
2340: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f    }.  }else..  /
2350: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
2360: 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a  synchronous.  **
2370: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
2380: 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52  onous=OFF|ON|NOR
2390: 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20  MAL|FULL.  **.  
23a0: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
23b0: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
23c0: 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e   of the synchron
23d0: 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ous flag.  Chang
23e0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
23f0: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
2400: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
2410: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
2420: 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  and the.  ** def
2430: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will 
2440: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
2450: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
2460: 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f  tabase is.  ** o
2470: 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66  pened..  */.  if
2480: 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28  ( sqliteStrICmp(
2490: 7a 4c 65 66 74 2c 22 73 79 6e 63 68 72 6f 6e 6f  zLeft,"synchrono
24a0: 75 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  us")==0 ){.    s
24b0: 74 61 74 69 63 20 56 64 62 65 4f 70 20 67 65 74  tatic VdbeOp get
24c0: 53 79 6e 63 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Sync[] = {.     
24d0: 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65   { OP_ColumnName
24e0: 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20  ,  0, 0,        
24f0: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 7d 2c 0a  "synchronous"},.
2500: 20 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62        { OP_Callb
2510: 61 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20 20 20  ack,    1, 0,   
2520: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a       0},.    };.
2530: 20 20 20 20 69 66 28 20 70 52 69 67 68 74 2d 3e      if( pRight->
2540: 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29 7b 0a 20  z==pLeft->z ){. 
2550: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
2560: 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67  ddOp(v, OP_Integ
2570: 65 72 2c 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c  er, db->safety_l
2580: 65 76 65 6c 2d 31 2c 20 30 29 3b 0a 20 20 20 20  evel-1, 0);.    
2590: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
25a0: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
25b0: 7a 65 28 67 65 74 53 79 6e 63 29 2c 20 67 65 74  ze(getSync), get
25c0: 53 79 6e 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Sync);.    }else
25d0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
25e0: 20 3d 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a   = db->cache_siz
25f0: 65 3b 0a 20 20 20 20 20 20 69 66 28 20 73 69 7a  e;.      if( siz
2600: 65 3c 30 20 29 20 73 69 7a 65 20 3d 20 2d 73 69  e<0 ) size = -si
2610: 7a 65 3b 0a 20 20 20 20 20 20 64 62 2d 3e 73 61  ze;.      db->sa
2620: 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 67 65 74  fety_level = get
2630: 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67  SafetyLevel(zRig
2640: 68 74 29 2b 31 3b 0a 20 20 20 20 20 20 69 66 28  ht)+1;.      if(
2650: 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65   db->safety_leve
2660: 6c 3d 3d 31 20 29 20 73 69 7a 65 20 3d 20 2d 73  l==1 ) size = -s
2670: 69 7a 65 3b 0a 20 20 20 20 20 20 64 62 2d 3e 63  ize;.      db->c
2680: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
2690: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42 74  ;.      sqliteBt
26a0: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
26b0: 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c 20  db->aDb[0].pBt, 
26c0: 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b  db->cache_size);
26d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42 74 72  .      sqliteBtr
26e0: 65 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c  eeSetSafetyLevel
26f0: 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c  (db->aDb[0].pBt,
2700: 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65   db->safety_leve
2710: 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  l);.    }.  }els
2720: 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53  e..  if( sqliteS
2730: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 74  trICmp(zLeft, "t
2740: 72 69 67 67 65 72 5f 6f 76 65 72 68 65 61 64 5f  rigger_overhead_
2750: 74 65 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  test")==0 ){.   
2760: 20 69 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28   if( getBoolean(
2770: 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20  zRight) ){.     
2780: 20 61 6c 77 61 79 73 5f 63 6f 64 65 5f 74 72 69   always_code_tri
2790: 67 67 65 72 5f 73 65 74 75 70 20 3d 20 31 3b 0a  gger_setup = 1;.
27a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
27b0: 20 61 6c 77 61 79 73 5f 63 6f 64 65 5f 74 72 69   always_code_tri
27c0: 67 67 65 72 5f 73 65 74 75 70 20 3d 20 30 3b 0a  gger_setup = 0;.
27d0: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
27e0: 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43   if( sqliteStrIC
27f0: 6d 70 28 7a 4c 65 66 74 2c 20 22 76 64 62 65 5f  mp(zLeft, "vdbe_
2800: 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20  trace")==0 ){.  
2810: 20 20 69 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e    if( getBoolean
2820: 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20  (zRight) ){.    
2830: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
2840: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 3b  QLITE_VdbeTrace;
2850: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2860: 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e    db->flags &= ~
2870: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
2880: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
2890: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72  .  if( sqliteStr
28a0: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 66 75 6c  ICmp(zLeft, "ful
28b0: 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 29  l_column_names")
28c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 67  ==0 ){.    if( g
28d0: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
28e0: 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66  ) ){.      db->f
28f0: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 46  lags |= SQLITE_F
2900: 75 6c 6c 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20 20  ullColNames;.   
2910: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
2920: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49  ->flags &= ~SQLI
2930: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 3b  TE_FullColNames;
2940: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
2950: 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49    if( sqliteStrI
2960: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 73 68 6f 77  Cmp(zLeft, "show
2970: 5f 64 61 74 61 74 79 70 65 73 22 29 3d 3d 30 20  _datatypes")==0 
2980: 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74 42 6f  ){.    if( getBo
2990: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29 20 29 7b  olean(zRight) ){
29a0: 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73  .      db->flags
29b0: 20 7c 3d 20 53 51 4c 49 54 45 5f 52 65 70 6f 72   |= SQLITE_Repor
29c0: 74 54 79 70 65 73 3b 0a 20 20 20 20 7d 65 6c 73  tTypes;.    }els
29d0: 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c 61  e{.      db->fla
29e0: 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 52 65  gs &= ~SQLITE_Re
29f0: 70 6f 72 74 54 79 70 65 73 3b 0a 20 20 20 20 7d  portTypes;.    }
2a00: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
2a10: 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c  sqliteStrICmp(zL
2a20: 65 66 74 2c 20 22 63 6f 75 6e 74 5f 63 68 61 6e  eft, "count_chan
2a30: 67 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ges")==0 ){.    
2a40: 69 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a  if( getBoolean(z
2a50: 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20  Right) ){.      
2a60: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
2a70: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 3b 0a 20  ITE_CountRows;. 
2a80: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2a90: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51  db->flags &= ~SQ
2aa0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 3b 0a  LITE_CountRows;.
2ab0: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
2ac0: 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43   if( sqliteStrIC
2ad0: 6d 70 28 7a 4c 65 66 74 2c 20 22 65 6d 70 74 79  mp(zLeft, "empty
2ae0: 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63 6b  _result_callback
2af0: 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  s")==0 ){.    if
2b00: 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  ( getBoolean(zRi
2b10: 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20 64 62  ght) ){.      db
2b20: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
2b30: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 3b 0a  E_NullCallback;.
2b40: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2b50: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53   db->flags &= ~S
2b60: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
2b70: 63 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ck;.    }.  }els
2b80: 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53  e..  if( sqliteS
2b90: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 74  trICmp(zLeft, "t
2ba0: 61 62 6c 65 5f 69 6e 66 6f 22 29 3d 3d 30 20 29  able_info")==0 )
2bb0: 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  {.    Table *pTa
2bc0: 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71  b;.    pTab = sq
2bd0: 6c 69 74 65 46 69 6e 64 54 61 62 6c 65 28 64 62  liteFindTable(db
2be0: 2c 20 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20  , zRight, 0);.  
2bf0: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
2c00: 20 20 20 20 73 74 61 74 69 63 20 56 64 62 65 4f      static VdbeO
2c10: 70 20 74 61 62 6c 65 49 6e 66 6f 50 72 65 66 61  p tableInfoPrefa
2c20: 63 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ce[] = {.       
2c30: 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65   { OP_ColumnName
2c40: 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 22  ,  0, 0,       "
2c50: 63 69 64 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b  cid"},.        {
2c60: 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20   OP_ColumnName, 
2c70: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 22 6e 61   1, 0,       "na
2c80: 6d 65 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20  me"},.        { 
2c90: 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20  OP_ColumnName,  
2ca0: 32 2c 20 30 2c 20 20 20 20 20 20 20 22 74 79 70  2, 0,       "typ
2cb0: 65 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20 4f  e"},.        { O
2cc0: 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 33  P_ColumnName,  3
2cd0: 2c 20 30 2c 20 20 20 20 20 20 20 22 6e 6f 74 6e  , 0,       "notn
2ce0: 75 6c 6c 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b  ull"},.        {
2cf0: 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20   OP_ColumnName, 
2d00: 20 34 2c 20 30 2c 20 20 20 20 20 20 20 22 64 66   4, 0,       "df
2d10: 6c 74 5f 76 61 6c 75 65 22 7d 2c 0a 20 20 20 20  lt_value"},.    
2d20: 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e      { OP_ColumnN
2d30: 61 6d 65 2c 20 20 35 2c 20 30 2c 20 20 20 20 20  ame,  5, 0,     
2d40: 20 20 22 70 6b 22 7d 2c 0a 20 20 20 20 20 20 7d    "pk"},.      }
2d50: 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  ;.      int i;. 
2d60: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
2d70: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
2d80: 79 53 69 7a 65 28 74 61 62 6c 65 49 6e 66 6f 50  ySize(tableInfoP
2d90: 72 65 66 61 63 65 29 2c 20 74 61 62 6c 65 49 6e  reface), tableIn
2da0: 66 6f 50 72 65 66 61 63 65 29 3b 0a 20 20 20 20  foPreface);.    
2db0: 20 20 73 71 6c 69 74 65 56 69 65 77 47 65 74 43    sqliteViewGetC
2dc0: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73  olumnNames(pPars
2dd0: 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20  e, pTab);.      
2de0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 54 61 62 2d  for(i=0; i<pTab-
2df0: 3e 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  >nCol; i++){.   
2e00: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
2e10: 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67  ddOp(v, OP_Integ
2e20: 65 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20 20  er, i, 0);.     
2e30: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
2e40: 4f 70 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c  Op(v, OP_String,
2e50: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
2e60: 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65  sqliteVdbeChange
2e70: 50 33 28 76 2c 20 2d 31 2c 20 70 54 61 62 2d 3e  P3(v, -1, pTab->
2e80: 61 43 6f 6c 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50  aCol[i].zName, P
2e90: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
2ea0: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
2eb0: 4f 70 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c  Op(v, OP_String,
2ec0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
2ed0: 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65  sqliteVdbeChange
2ee0: 50 33 28 76 2c 20 2d 31 2c 20 0a 20 20 20 20 20  P3(v, -1, .     
2ef0: 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c        pTab->aCol
2f00: 5b 69 5d 2e 7a 54 79 70 65 20 3f 20 70 54 61 62  [i].zType ? pTab
2f10: 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 54 79 70 65 20  ->aCol[i].zType 
2f20: 3a 20 22 6e 75 6d 65 72 69 63 22 2c 20 50 33 5f  : "numeric", P3_
2f30: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
2f40: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
2f50: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
2f60: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 6e 6f  pTab->aCol[i].no
2f70: 74 4e 75 6c 6c 2c 20 30 29 3b 0a 20 20 20 20 20  tNull, 0);.     
2f80: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
2f90: 4f 70 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c  Op(v, OP_String,
2fa0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
2fb0: 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65  sqliteVdbeChange
2fc0: 50 33 28 76 2c 20 2d 31 2c 20 70 54 61 62 2d 3e  P3(v, -1, pTab->
2fd0: 61 43 6f 6c 5b 69 5d 2e 7a 44 66 6c 74 2c 20 50  aCol[i].zDflt, P
2fe0: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
2ff0: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
3000: 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  Op(v, OP_Integer
3010: 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e  , pTab->aCol[i].
3020: 69 73 50 72 69 6d 4b 65 79 2c 20 30 29 3b 0a 20  isPrimKey, 0);. 
3030: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
3040: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c  eAddOp(v, OP_Cal
3050: 6c 62 61 63 6b 2c 20 36 2c 20 30 29 3b 0a 20 20  lback, 6, 0);.  
3060: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
3070: 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  lse..  if( sqlit
3080: 65 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  eStrICmp(zLeft, 
3090: 22 69 6e 64 65 78 5f 69 6e 66 6f 22 29 3d 3d 30  "index_info")==0
30a0: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
30b0: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
30c0: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
30d0: 20 73 71 6c 69 74 65 46 69 6e 64 49 6e 64 65 78   sqliteFindIndex
30e0: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 30 29 3b  (db, zRight, 0);
30f0: 0a 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b  .    if( pIdx ){
3100: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 56 64  .      static Vd
3110: 62 65 4f 70 20 74 61 62 6c 65 49 6e 66 6f 50 72  beOp tableInfoPr
3120: 65 66 61 63 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eface[] = {.    
3130: 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e      { OP_ColumnN
3140: 61 6d 65 2c 20 20 30 2c 20 30 2c 20 20 20 20 20  ame,  0, 0,     
3150: 20 20 22 73 65 71 6e 6f 22 7d 2c 0a 20 20 20 20    "seqno"},.    
3160: 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e      { OP_ColumnN
3170: 61 6d 65 2c 20 20 31 2c 20 30 2c 20 20 20 20 20  ame,  1, 0,     
3180: 20 20 22 63 69 64 22 7d 2c 0a 20 20 20 20 20 20    "cid"},.      
3190: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d    { OP_ColumnNam
31a0: 65 2c 20 20 32 2c 20 30 2c 20 20 20 20 20 20 20  e,  2, 0,       
31b0: 22 6e 61 6d 65 22 7d 2c 0a 20 20 20 20 20 20 7d  "name"},.      }
31c0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  ;.      int i;. 
31d0: 20 20 20 20 20 70 54 61 62 20 3d 20 70 49 64 78       pTab = pIdx
31e0: 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20  ->pTable;.      
31f0: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c  sqliteVdbeAddOpL
3200: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
3210: 28 74 61 62 6c 65 49 6e 66 6f 50 72 65 66 61 63  (tableInfoPrefac
3220: 65 29 2c 20 74 61 62 6c 65 49 6e 66 6f 50 72 65  e), tableInfoPre
3230: 66 61 63 65 29 3b 0a 20 20 20 20 20 20 66 6f 72  face);.      for
3240: 28 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e 6e 43  (i=0; i<pIdx->nC
3250: 6f 6c 75 6d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  olumn; i++){.   
3260: 20 20 20 20 20 69 6e 74 20 63 6e 75 6d 20 3d 20       int cnum = 
3270: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69  pIdx->aiColumn[i
3280: 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ];.        sqlit
3290: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
32a0: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 30 29 3b  _Integer, i, 0);
32b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56  .        sqliteV
32c0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49  dbeAddOp(v, OP_I
32d0: 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20 30 29  nteger, cnum, 0)
32e0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
32f0: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
3300: 53 74 72 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20  String, 0, 0);. 
3310: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
3320: 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29  Tab->nCol>cnum )
3330: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
3340: 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20  VdbeChangeP3(v, 
3350: 2d 31 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63  -1, pTab->aCol[c
3360: 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 50 33 5f 53  num].zName, P3_S
3370: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
3380: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
3390: 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20  v, OP_Callback, 
33a0: 33 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  3, 0);.      }. 
33b0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
33c0: 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d  if( sqliteStrICm
33d0: 70 28 7a 4c 65 66 74 2c 20 22 69 6e 64 65 78 5f  p(zLeft, "index_
33e0: 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  list")==0 ){.   
33f0: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
3400: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
3410: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
3420: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
3430: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 69 66  ight, 0);.    if
3440: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
3450: 76 20 3d 20 73 71 6c 69 74 65 47 65 74 56 64 62  v = sqliteGetVdb
3460: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
3470: 20 70 49 64 78 20 3d 20 70 54 61 62 2d 3e 70 49   pIdx = pTab->pI
3480: 6e 64 65 78 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ndex;.    }.    
3490: 69 66 28 20 70 54 61 62 20 26 26 20 70 49 64 78  if( pTab && pIdx
34a0: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 20   ){.      int i 
34b0: 3d 20 30 3b 20 0a 20 20 20 20 20 20 73 74 61 74  = 0; .      stat
34c0: 69 63 20 56 64 62 65 4f 70 20 69 6e 64 65 78 4c  ic VdbeOp indexL
34d0: 69 73 74 50 72 65 66 61 63 65 5b 5d 20 3d 20 7b  istPreface[] = {
34e0: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f  .        { OP_Co
34f0: 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30 2c  lumnName,  0, 0,
3500: 20 20 20 20 20 20 20 22 73 65 71 22 7d 2c 0a 20         "seq"},. 
3510: 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75         { OP_Colu
3520: 6d 6e 4e 61 6d 65 2c 20 20 31 2c 20 30 2c 20 20  mnName,  1, 0,  
3530: 20 20 20 20 20 22 6e 61 6d 65 22 7d 2c 0a 20 20       "name"},.  
3540: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
3550: 6e 4e 61 6d 65 2c 20 20 32 2c 20 30 2c 20 20 20  nName,  2, 0,   
3560: 20 20 20 20 22 75 6e 69 71 75 65 22 7d 2c 0a 20      "unique"},. 
3570: 20 20 20 20 20 7d 3b 0a 0a 20 20 20 20 20 20 73       };..      s
3580: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69  qliteVdbeAddOpLi
3590: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
35a0: 69 6e 64 65 78 4c 69 73 74 50 72 65 66 61 63 65  indexListPreface
35b0: 29 2c 20 69 6e 64 65 78 4c 69 73 74 50 72 65 66  ), indexListPref
35c0: 61 63 65 29 3b 0a 20 20 20 20 20 20 77 68 69 6c  ace);.      whil
35d0: 65 28 70 49 64 78 29 7b 0a 20 20 20 20 20 20 20  e(pIdx){.       
35e0: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
35f0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
3600: 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  i, 0);.        s
3610: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76  qliteVdbeAddOp(v
3620: 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20  , OP_String, 0, 
3630: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
3640: 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28 76  teVdbeChangeP3(v
3650: 2c 20 2d 31 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  , -1, pIdx->zNam
3660: 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  e, P3_STATIC);. 
3670: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
3680: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
3690: 65 67 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45 72  eger, pIdx->onEr
36a0: 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 30 29  ror!=OE_None, 0)
36b0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
36c0: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
36d0: 43 61 6c 6c 62 61 63 6b 2c 20 33 2c 20 30 29 3b  Callback, 3, 0);
36e0: 0a 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20  .        ++i;.  
36f0: 20 20 20 20 20 20 70 49 64 78 20 3d 20 70 49 64        pIdx = pId
3700: 78 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  x->pNext;.      
3710: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
3720: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72  .  if( sqliteStr
3730: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 66 6f 72  ICmp(zLeft, "for
3740: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 29 3d  eign_key_list")=
3750: 3d 30 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a  =0 ){.    FKey *
3760: 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  pFK;.    Table *
3770: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
3780: 20 73 71 6c 69 74 65 46 69 6e 64 54 61 62 6c 65   sqliteFindTable
3790: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 30 29 3b  (db, zRight, 0);
37a0: 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b  .    if( pTab ){
37b0: 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
37c0: 65 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  eGetVdbe(pParse)
37d0: 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54  ;.      pFK = pT
37e0: 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 7d  ab->pFKey;.    }
37f0: 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 26 26  .    if( pTab &&
3800: 20 70 46 4b 20 29 7b 0a 20 20 20 20 20 20 69 6e   pFK ){.      in
3810: 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20  t i = 0; .      
3820: 73 74 61 74 69 63 20 56 64 62 65 4f 70 20 69 6e  static VdbeOp in
3830: 64 65 78 4c 69 73 74 50 72 65 66 61 63 65 5b 5d  dexListPreface[]
3840: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
3850: 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30  P_ColumnName,  0
3860: 2c 20 30 2c 20 20 20 20 20 20 20 22 69 64 22 7d  , 0,       "id"}
3870: 2c 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43  ,.        { OP_C
3880: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 31 2c 20 30  olumnName,  1, 0
3890: 2c 20 20 20 20 20 20 20 22 73 65 71 22 7d 2c 0a  ,       "seq"},.
38a0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c          { OP_Col
38b0: 75 6d 6e 4e 61 6d 65 2c 20 20 32 2c 20 30 2c 20  umnName,  2, 0, 
38c0: 20 20 20 20 20 20 22 74 61 62 6c 65 22 7d 2c 0a        "table"},.
38d0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c          { OP_Col
38e0: 75 6d 6e 4e 61 6d 65 2c 20 20 33 2c 20 30 2c 20  umnName,  3, 0, 
38f0: 20 20 20 20 20 20 22 66 72 6f 6d 22 7d 2c 0a 20        "from"},. 
3900: 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75         { OP_Colu
3910: 6d 6e 4e 61 6d 65 2c 20 20 34 2c 20 30 2c 20 20  mnName,  4, 0,  
3920: 20 20 20 20 20 22 74 6f 22 7d 2c 0a 20 20 20 20       "to"},.    
3930: 20 20 7d 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69    };..      sqli
3940: 74 65 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  teVdbeAddOpList(
3950: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 69 6e 64  v, ArraySize(ind
3960: 65 78 4c 69 73 74 50 72 65 66 61 63 65 29 2c 20  exListPreface), 
3970: 69 6e 64 65 78 4c 69 73 74 50 72 65 66 61 63 65  indexListPreface
3980: 29 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 70  );.      while(p
3990: 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  FK){.        int
39a0: 20 6a 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   j;.        for(
39b0: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
39c0: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
39d0: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
39e0: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
39f0: 20 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   i, 0);.        
3a00: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
3a10: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
3a20: 20 6a 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   j, 0);.        
3a30: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
3a40: 70 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20  p(v, OP_String, 
3a50: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  0, 0);.         
3a60: 20 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67   sqliteVdbeChang
3a70: 65 50 33 28 76 2c 20 2d 31 2c 20 70 46 4b 2d 3e  eP3(v, -1, pFK->
3a80: 7a 54 6f 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  zTo, P3_STATIC);
3a90: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
3aa0: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
3ab0: 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 29 3b 0a  _String, 0, 0);.
3ac0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
3ad0: 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20  VdbeChangeP3(v, 
3ae0: 2d 31 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70  -1, pTab->aCol[p
3af0: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
3b00: 6d 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  m].zName,.      
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b20: 20 20 20 20 20 20 20 50 33 5f 53 54 41 54 49 43         P3_STATIC
3b30: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
3b40: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
3b50: 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 29  OP_String, 0, 0)
3b60: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
3b70: 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28 76  teVdbeChangeP3(v
3b80: 2c 20 2d 31 2c 20 70 46 4b 2d 3e 61 43 6f 6c 5b  , -1, pFK->aCol[
3b90: 6a 5d 2e 7a 43 6f 6c 2c 20 50 33 5f 53 54 41 54  j].zCol, P3_STAT
3ba0: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  IC);.          s
3bb0: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76  qliteVdbeAddOp(v
3bc0: 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 35  , OP_Callback, 5
3bd0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 0);.        }.
3be0: 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20          ++i;.   
3bf0: 20 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e       pFK = pFK->
3c00: 70 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20  pNextFrom;.     
3c10: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
3c20: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74  ..  if( sqliteSt
3c30: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 64 61  rICmp(zLeft, "da
3c40: 74 61 62 61 73 65 5f 6c 69 73 74 22 29 3d 3d 30  tabase_list")==0
3c50: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
3c60: 20 20 20 73 74 61 74 69 63 20 56 64 62 65 4f 70     static VdbeOp
3c70: 20 69 6e 64 65 78 4c 69 73 74 50 72 65 66 61 63   indexListPrefac
3c80: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  e[] = {.      { 
3c90: 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20  OP_ColumnName,  
3ca0: 30 2c 20 30 2c 20 20 20 20 20 20 20 22 73 65 71  0, 0,       "seq
3cb0: 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43  "},.      { OP_C
3cc0: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 31 2c 20 30  olumnName,  1, 0
3cd0: 2c 20 20 20 20 20 20 20 22 6e 61 6d 65 22 7d 2c  ,       "name"},
3ce0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75  .      { OP_Colu
3cf0: 6d 6e 4e 61 6d 65 2c 20 20 32 2c 20 30 2c 20 20  mnName,  2, 0,  
3d00: 20 20 20 20 20 22 66 69 6c 65 22 7d 2c 0a 20 20       "file"},.  
3d10: 20 20 7d 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65    };..    sqlite
3d20: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
3d30: 20 41 72 72 61 79 53 69 7a 65 28 69 6e 64 65 78   ArraySize(index
3d40: 4c 69 73 74 50 72 65 66 61 63 65 29 2c 20 69 6e  ListPreface), in
3d50: 64 65 78 4c 69 73 74 50 72 65 66 61 63 65 29 3b  dexListPreface);
3d60: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3d70: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
3d80: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
3d90: 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e  [i].pBt==0 ) con
3da0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73  tinue;.      ass
3db0: 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  ert( db->aDb[i].
3dc0: 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20  zName!=0 );.    
3dd0: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
3de0: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
3df0: 20 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71   i, 0);.      sq
3e00: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c  liteVdbeAddOp(v,
3e10: 20 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30   OP_String, 0, 0
3e20: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  );.      sqliteV
3e30: 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 2d  dbeChangeP3(v, -
3e40: 31 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  1, db->aDb[i].zN
3e50: 61 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  ame, P3_STATIC);
3e60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
3e70: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 74 72  eAddOp(v, OP_Str
3e80: 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ing, 0, 0);.    
3e90: 20 20 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e    sqliteVdbeChan
3ea0: 67 65 50 33 28 76 2c 20 2d 31 2c 20 73 71 6c 69  geP3(v, -1, sqli
3eb0: 74 65 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61  teBtreeGetFilena
3ec0: 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  me(db->aDb[i].pB
3ed0: 74 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 50  t),.           P
3ee0: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
3ef0: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
3f00: 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c  (v, OP_Callback,
3f10: 20 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20   3, 0);.    }.  
3f20: 7d 65 6c 73 65 0a 0a 0a 20 20 2f 2a 0a 20 20 2a  }else...  /*.  *
3f30: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
3f40: 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41  store.  **   PRA
3f50: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
3f60: 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f   "default"|"memo
3f70: 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a  ry"|"file".  **.
3f80: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
3f90: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
3fa0: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
3fb0: 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  tore flag.  Chan
3fc0: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
3fd0: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
3fe0: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
3ff0: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
4000: 20 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74   and the default
4010: 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c  .  ** value will
4020: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
4030: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
4040: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
4050: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74  d..  **.  ** Not
4060: 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73  e that it is pos
4070: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69  sible for the li
4080: 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69  brary compile-ti
4090: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20  me options to.  
40a0: 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ** override this
40b0: 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20   setting.  */.  
40c0: 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d  if( sqliteStrICm
40d0: 70 28 7a 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73  p(zLeft, "temp_s
40e0: 74 6f 72 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  tore")==0 ){.   
40f0: 20 73 74 61 74 69 63 20 56 64 62 65 4f 70 20 67   static VdbeOp g
4100: 65 74 54 6d 70 44 62 4c 6f 63 5b 5d 20 3d 20 7b  etTmpDbLoc[] = {
4110: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75  .      { OP_Colu
4120: 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30 2c 20 20  mnName,  0, 0,  
4130: 20 20 20 20 20 20 22 74 65 6d 70 5f 73 74 6f 72        "temp_stor
4140: 65 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f  e"},.      { OP_
4150: 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20  Callback,    1, 
4160: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  0,        0},.  
4170: 20 20 7d 3b 0a 20 20 20 20 69 66 28 20 70 52 69    };.    if( pRi
4180: 67 68 74 2d 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a  ght->z==pLeft->z
4190: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
41a0: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
41b0: 49 6e 74 65 67 65 72 2c 20 64 62 2d 3e 74 65 6d  Integer, db->tem
41c0: 70 5f 73 74 6f 72 65 2c 20 30 29 3b 0a 20 20 20  p_store, 0);.   
41d0: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
41e0: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
41f0: 69 7a 65 28 67 65 74 54 6d 70 44 62 4c 6f 63 29  ize(getTmpDbLoc)
4200: 2c 20 67 65 74 54 6d 70 44 62 4c 6f 63 29 3b 0a  , getTmpDbLoc);.
4210: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4220: 20 69 66 20 28 26 64 62 2d 3e 61 44 62 5b 31 5d   if (&db->aDb[1]
4230: 2e 70 42 74 20 21 3d 20 30 29 20 7b 0a 09 73 71  .pBt != 0) {..sq
4240: 6c 69 74 65 45 72 72 6f 72 4d 73 67 28 70 50 61  liteErrorMsg(pPa
4250: 72 73 65 2c 20 22 54 68 65 20 74 65 6d 70 6f 72  rse, "The tempor
4260: 61 72 79 20 64 61 74 61 62 61 73 65 20 61 6c 72  ary database alr
4270: 65 61 64 79 20 65 78 69 73 74 73 20 2d 20 22 0a  eady exists - ".
4280: 20 20 20 20 20 20 20 20 20 20 22 69 74 73 20 6c            "its l
4290: 6f 63 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 20 6e  ocation cannot n
42a0: 6f 77 20 62 65 20 63 68 61 6e 67 65 64 22 29 3b  ow be changed");
42b0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  .      } else {.
42c0: 09 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20  .db->temp_store 
42d0: 3d 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28 7a  = getTempStore(z
42e0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 0a  Right);.      }.
42f0: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
4300: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
4310: 41 20 64 65 66 61 75 6c 74 5f 74 65 6d 70 5f 73  A default_temp_s
4320: 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47  tore.  **   PRAG
4330: 4d 41 20 64 65 66 61 75 6c 74 5f 74 65 6d 70 5f  MA default_temp_
4340: 73 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74  store = "default
4350: 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65  "|"memory"|"file
4360: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
4370: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  rn or set the va
4380: 6c 75 65 20 6f 66 20 74 68 65 20 70 65 72 73 69  lue of the persi
4390: 73 74 65 6e 74 20 74 65 6d 70 5f 73 74 6f 72 65  stent temp_store
43a0: 20 66 6c 61 67 20 28 61 73 0a 20 20 2a 2a 20 77   flag (as.  ** w
43b0: 65 6c 6c 20 61 73 20 74 68 65 20 76 61 6c 75 65  ell as the value
43c0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 66 6f   currently in fo
43d0: 72 63 65 29 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  rce)..  **.  ** 
43e0: 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69 73 20  Note that it is 
43f0: 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65  possible for the
4400: 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c 65   library compile
4410: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f  -time options to
4420: 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64 65 20 74  .  ** override t
4430: 68 69 73 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f  his setting.  */
4440: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72  .  if( sqliteStr
4450: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 64 65 66  ICmp(zLeft, "def
4460: 61 75 6c 74 5f 74 65 6d 70 5f 73 74 6f 72 65 22  ault_temp_store"
4470: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )==0 ){.    stat
4480: 69 63 20 56 64 62 65 4f 70 20 67 65 74 54 6d 70  ic VdbeOp getTmp
4490: 44 62 4c 6f 63 5b 5d 20 3d 20 7b 0a 20 20 20 20  DbLoc[] = {.    
44a0: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d    { OP_ColumnNam
44b0: 65 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20  e,  0, 0,       
44c0: 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 7d 2c 0a   "temp_store"},.
44d0: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
44e0: 6f 6f 6b 69 65 2c 20 20 30 2c 20 35 2c 20 20 20  ookie,  0, 5,   
44f0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
4500: 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20   OP_Callback,   
4510: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
4520: 7d 3b 0a 20 20 20 20 69 66 28 20 70 52 69 67 68  };.    if( pRigh
4530: 74 2d 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29  t->z==pLeft->z )
4540: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  {.      sqliteVd
4550: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
4560: 72 72 61 79 53 69 7a 65 28 67 65 74 54 6d 70 44  rraySize(getTmpD
4570: 62 4c 6f 63 29 2c 20 67 65 74 54 6d 70 44 62 4c  bLoc), getTmpDbL
4580: 6f 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  oc);.    }else{.
4590: 20 20 20 20 20 20 69 66 20 28 26 64 62 2d 3e 61        if (&db->a
45a0: 44 62 5b 31 5d 2e 70 42 74 20 21 3d 20 30 29 20  Db[1].pBt != 0) 
45b0: 7b 0a 09 73 71 6c 69 74 65 45 72 72 6f 72 4d 73  {..sqliteErrorMs
45c0: 67 28 70 50 61 72 73 65 2c 20 22 54 68 65 20 74  g(pParse, "The t
45d0: 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73  emporary databas
45e0: 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  e already exists
45f0: 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
4600: 20 22 69 74 73 20 6c 6f 63 61 74 69 6f 6e 20 63   "its location c
4610: 61 6e 6e 6f 74 20 6e 6f 77 20 62 65 20 63 68 61  annot now be cha
4620: 6e 67 65 64 22 29 3b 0a 20 20 20 20 20 20 7d 20  nged");.      } 
4630: 65 6c 73 65 20 7b 0a 09 73 71 6c 69 74 65 42 65  else {..sqliteBe
4640: 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
4650: 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 30 29 3b  n(pParse, 0, 0);
4660: 0a 09 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  ..db->temp_store
4670: 20 3d 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28   = getTempStore(
4680: 7a 52 69 67 68 74 29 3b 0a 09 73 71 6c 69 74 65  zRight);..sqlite
4690: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
46a0: 49 6e 74 65 67 65 72 2c 20 64 62 2d 3e 74 65 6d  Integer, db->tem
46b0: 70 5f 73 74 6f 72 65 2c 20 30 29 3b 0a 09 73 71  p_store, 0);..sq
46c0: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c  liteVdbeAddOp(v,
46d0: 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 30   OP_SetCookie, 0
46e0: 2c 20 35 29 3b 0a 09 73 71 6c 69 74 65 45 6e 64  , 5);..sqliteEnd
46f0: 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70  WriteOperation(p
4700: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
4710: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23      }.  }else..#
4720: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
4730: 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d  if( sqliteStrICm
4740: 70 28 7a 4c 65 66 74 2c 20 22 70 61 72 73 65 72  p(zLeft, "parser
4750: 5f 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20  _trace")==0 ){. 
4760: 20 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20 73     extern void s
4770: 71 6c 69 74 65 50 61 72 73 65 72 54 72 61 63 65  qliteParserTrace
4780: 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
4790: 0a 20 20 20 20 69 66 28 20 67 65 74 42 6f 6f 6c  .    if( getBool
47a0: 65 61 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a 20  ean(zRight) ){. 
47b0: 20 20 20 20 20 73 71 6c 69 74 65 50 61 72 73 65       sqliteParse
47c0: 72 54 72 61 63 65 28 73 74 64 6f 75 74 2c 20 22  rTrace(stdout, "
47d0: 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20  parser: ");.    
47e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
47f0: 69 74 65 50 61 72 73 65 72 54 72 61 63 65 28 30  iteParserTrace(0
4800: 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  , 0);.    }.  }e
4810: 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66  lse.#endif..  if
4820: 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28  ( sqliteStrICmp(
4830: 7a 4c 65 66 74 2c 20 22 69 6e 74 65 67 72 69 74  zLeft, "integrit
4840: 79 5f 63 68 65 63 6b 22 29 3d 3d 30 20 29 7b 0a  y_check")==0 ){.
4850: 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64      int i, j, ad
4860: 64 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65  dr;..    /* Code
4870: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
4880: 73 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  s the integrity 
4890: 63 68 65 63 6b 20 70 72 6f 67 72 61 6d 2e 20 20  check program.  
48a0: 53 65 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65  Set the.    ** e
48b0: 72 72 6f 72 20 63 6f 75 6e 74 20 30 0a 20 20 20  rror count 0.   
48c0: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 56   */.    static V
48d0: 64 62 65 4f 70 20 69 6e 69 74 43 6f 64 65 5b 5d  dbeOp initCode[]
48e0: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
48f0: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20  Integer,     0, 
4900: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  0,        0},.  
4910: 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 53 74 6f 72      { OP_MemStor
4920: 65 2c 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20  e,    0, 1,     
4930: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
4940: 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30  P_ColumnName,  0
4950: 2c 20 30 2c 20 20 20 20 20 20 20 20 22 69 6e 74  , 0,        "int
4960: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 7d 2c 0a  egrity_check"},.
4970: 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2a 20 43      };..    /* C
4980: 6f 64 65 20 74 6f 20 64 6f 20 61 6e 20 42 54 72  ode to do an BTr
4990: 65 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  ee integrity che
49a0: 63 6b 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 64  ck on a single d
49b0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
49c0: 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20    */.    static 
49d0: 56 64 62 65 4f 70 20 63 68 65 63 6b 44 62 5b 5d  VdbeOp checkDb[]
49e0: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
49f0: 53 65 74 49 6e 73 65 72 74 2c 20 20 20 30 2c 20  SetInsert,   0, 
4a00: 30 2c 20 20 20 20 20 20 20 20 22 32 22 7d 2c 0a  0,        "2"},.
4a10: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
4a20: 65 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20  er,     0, 0,   
4a30: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31       0},    /* 1
4a40: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4f   */.      { OP_O
4a50: 70 65 6e 52 65 61 64 2c 20 20 20 20 30 2c 20 32  penRead,    0, 2
4a60: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
4a70: 20 20 20 7b 20 4f 50 5f 52 65 77 69 6e 64 2c 20     { OP_Rewind, 
4a80: 20 20 20 20 20 30 2c 20 37 2c 20 20 20 20 20 20       0, 7,      
4a90: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f    0},    /* 3 */
4aa0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75  .      { OP_Colu
4ab0: 6d 6e 2c 20 20 20 20 20 20 30 2c 20 33 2c 20 20  mn,      0, 3,  
4ac0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
4ad0: 34 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  4 */.      { OP_
4ae0: 53 65 74 49 6e 73 65 72 74 2c 20 20 20 30 2c 20  SetInsert,   0, 
4af0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  0,        0},.  
4b00: 20 20 20 20 7b 20 4f 50 5f 4e 65 78 74 2c 20 20      { OP_Next,  
4b10: 20 20 20 20 20 20 30 2c 20 34 2c 20 20 20 20 20        0, 4,     
4b20: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 36 20 2a     0},    /* 6 *
4b30: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  /.      { OP_Int
4b40: 65 67 72 69 74 79 43 6b 2c 20 30 2c 20 30 2c 20  egrityCk, 0, 0, 
4b50: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
4b60: 20 37 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   7 */.      { OP
4b70: 5f 44 75 70 2c 20 20 20 20 20 20 20 20 20 30 2c  _Dup,         0,
4b80: 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   1,        0},. 
4b90: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
4ba0: 2c 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20  ,      0, 0,    
4bb0: 20 20 20 20 22 6f 6b 22 7d 2c 0a 20 20 20 20 20      "ok"},.     
4bc0: 20 7b 20 4f 50 5f 53 74 72 45 71 2c 20 20 20 20   { OP_StrEq,    
4bd0: 20 20 20 30 2c 20 31 32 2c 20 20 20 20 20 20 20     0, 12,       
4be0: 30 7d 2c 20 20 20 20 2f 2a 20 31 30 20 2a 2f 0a  0},    /* 10 */.
4bf0: 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 49 6e        { OP_MemIn
4c00: 63 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20  cr,     0, 0,   
4c10: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
4c20: 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 20 20   OP_String,     
4c30: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 22 2a   0, 0,        "*
4c40: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 22  ** in database "
4c50: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74  },.      { OP_St
4c60: 72 69 6e 67 2c 20 20 20 20 20 20 30 2c 20 30 2c  ring,      0, 0,
4c70: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
4c80: 2a 20 31 33 20 2a 2f 0a 20 20 20 20 20 20 7b 20  * 13 */.      { 
4c90: 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 20 20 20  OP_String,      
4ca0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 22 20 2a  0, 0,        " *
4cb0: 2a 2a 5c 6e 22 7d 2c 0a 20 20 20 20 20 20 7b 20  **\n"},.      { 
4cc0: 4f 50 5f 50 75 6c 6c 2c 20 20 20 20 20 20 20 20  OP_Pull,        
4cd0: 33 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  3, 0,        0},
4ce0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63  .      { OP_Conc
4cf0: 61 74 2c 20 20 20 20 20 20 34 2c 20 31 2c 20 20  at,      4, 1,  
4d00: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
4d10: 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20  { OP_Callback,  
4d20: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30    1, 0,        0
4d30: 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f  },.    };..    /
4d40: 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70 70 65  * Code that appe
4d50: 61 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ars at the end o
4d60: 66 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  f the integrity 
4d70: 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72  check.  If no er
4d80: 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61  ror.    ** messa
4d90: 67 65 73 20 68 61 76 65 20 62 65 65 6e 20 67 65  ges have been ge
4da0: 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20  nerated, output 
4db0: 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f  OK.  Otherwise o
4dc0: 75 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a  utput the.    **
4dd0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20   error message. 
4de0: 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63     */.    static
4df0: 20 56 64 62 65 4f 70 20 65 6e 64 43 6f 64 65 5b   VdbeOp endCode[
4e00: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50  ] = {.      { OP
4e10: 5f 4d 65 6d 4c 6f 61 64 2c 20 20 20 20 20 30 2c  _MemLoad,     0,
4e20: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
4e30: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
4e40: 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20  r,     0, 0,    
4e50: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
4e60: 4f 50 5f 4e 65 2c 20 20 20 20 20 20 20 20 20 20  OP_Ne,          
4e70: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
4e80: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
4e90: 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20    { OP_String,  
4ea0: 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20      0, 0,       
4eb0: 20 22 6f 6b 22 7d 2c 0a 20 20 20 20 20 20 7b 20   "ok"},.      { 
4ec0: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20  OP_Callback,    
4ed0: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 0,        0},
4ee0: 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2a 20  .    };..    /* 
4ef0: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56  Initialize the V
4f00: 44 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  DBE program */. 
4f10: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
4f20: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
4f30: 69 7a 65 28 69 6e 69 74 43 6f 64 65 29 2c 20 69  ize(initCode), i
4f40: 6e 69 74 43 6f 64 65 29 3b 0a 0a 20 20 20 20 2f  nitCode);..    /
4f50: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
4f60: 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20  y check on each 
4f70: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
4f80: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
4f90: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
4fa0: 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78       HashElem *x
4fb0: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61  ;..      /* Do a
4fc0: 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
4fd0: 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a  k of the B-Tree.
4fe0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
4ff0: 64 64 72 20 3d 20 73 71 6c 69 74 65 56 64 62 65  ddr = sqliteVdbe
5000: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
5010: 61 79 53 69 7a 65 28 63 68 65 63 6b 44 62 29 2c  aySize(checkDb),
5020: 20 63 68 65 63 6b 44 62 29 3b 0a 20 20 20 20 20   checkDb);.     
5030: 20 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67   sqliteVdbeChang
5040: 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69  eP1(v, addr+1, i
5050: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  );.      sqliteV
5060: 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61  dbeChangeP2(v, a
5070: 64 64 72 2b 33 2c 20 61 64 64 72 2b 37 29 3b 0a  ddr+3, addr+7);.
5080: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
5090: 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
50a0: 2b 36 2c 20 61 64 64 72 2b 34 29 3b 0a 20 20 20  +6, addr+4);.   
50b0: 20 20 20 73 71 6c 69 74 65 56 64 62 65 43 68 61     sqliteVdbeCha
50c0: 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b 37 2c  ngeP2(v, addr+7,
50d0: 20 69 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   i);.      sqlit
50e0: 65 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c  eVdbeChangeP2(v,
50f0: 20 61 64 64 72 2b 31 30 2c 20 61 64 64 72 2b 41   addr+10, addr+A
5100: 72 72 61 79 53 69 7a 65 28 63 68 65 63 6b 44 62  rraySize(checkDb
5110: 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
5120: 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20  VdbeChangeP3(v, 
5130: 61 64 64 72 2b 31 33 2c 20 64 62 2d 3e 61 44 62  addr+13, db->aDb
5140: 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50 33 5f 53 54  [i].zName, P3_ST
5150: 41 54 49 43 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  ATIC);..      /*
5160: 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74   Make sure all t
5170: 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20 63  he indices are c
5180: 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72 65  onstructed corre
5190: 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ctly..      */. 
51a0: 20 20 20 20 20 73 71 6c 69 74 65 43 6f 64 65 56       sqliteCodeV
51b0: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
51c0: 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 66 6f  se, i);.      fo
51d0: 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(x=sqliteHashFi
51e0: 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e  rst(&db->aDb[i].
51f0: 74 62 6c 48 61 73 68 29 3b 20 78 3b 20 78 3d 73  tblHash); x; x=s
5200: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29  qliteHashNext(x)
5210: 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65  ){.        Table
5220: 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
5230: 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20  ashData(x);.    
5240: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
5250: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f  .        int loo
5260: 70 54 6f 70 3b 0a 0a 20 20 20 20 20 20 20 20 69  pTop;..        i
5270: 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d  f( pTab->pIndex=
5280: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
5290: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
52a0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
52b0: 65 67 65 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20  eger, i, 0);.   
52c0: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
52d0: 64 64 4f 70 28 76 2c 20 4f 50 5f 4f 70 65 6e 52  ddOp(v, OP_OpenR
52e0: 65 61 64 2c 20 31 2c 20 70 54 61 62 2d 3e 74 6e  ead, 1, pTab->tn
52f0: 75 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  um);.        sql
5300: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28  iteVdbeChangeP3(
5310: 76 2c 20 2d 31 2c 20 70 54 61 62 2d 3e 7a 4e 61  v, -1, pTab->zNa
5320: 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  me, P3_STATIC);.
5330: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
5340: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
5350: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
5360: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
5370: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
5380: 70 49 64 78 2d 3e 74 6e 75 6d 3d 3d 30 20 29 20  pIdx->tnum==0 ) 
5390: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
53a0: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
53b0: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
53c0: 72 2c 20 70 49 64 78 2d 3e 69 44 62 2c 20 30 29  r, pIdx->iDb, 0)
53d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
53e0: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
53f0: 50 5f 4f 70 65 6e 52 65 61 64 2c 20 6a 2b 32 2c  P_OpenRead, j+2,
5400: 20 70 49 64 78 2d 3e 74 6e 75 6d 29 3b 0a 20 20   pIdx->tnum);.  
5410: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64          sqliteVd
5420: 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 2d 31  beChangeP3(v, -1
5430: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50  , pIdx->zName, P
5440: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
5450: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
5460: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
5470: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 30  OP_Integer, 0, 0
5480: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5490: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
54a0: 5f 4d 65 6d 53 74 6f 72 65 2c 20 31 2c 20 31 29  _MemStore, 1, 1)
54b0: 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f  ;.        loopTo
54c0: 70 20 3d 20 73 71 6c 69 74 65 56 64 62 65 41 64  p = sqliteVdbeAd
54d0: 64 4f 70 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  dOp(v, OP_Rewind
54e0: 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 1, 0);.       
54f0: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
5500: 28 76 2c 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20  (v, OP_MemIncr, 
5510: 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 66  1, 0);.        f
5520: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
5530: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
5540: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
5550: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
5560: 20 20 20 69 6e 74 20 6b 2c 20 6a 6d 70 32 3b 0a     int k, jmp2;.
5570: 20 20 20 20 20 20 20 20 20 20 73 74 61 74 69 63            static
5580: 20 56 64 62 65 4f 70 20 69 64 78 45 72 72 5b 5d   VdbeOp idxErr[]
5590: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   = {.           
55a0: 20 7b 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20 20   { OP_MemIncr,  
55b0: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a 20     0,  0,  0},. 
55c0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
55d0: 53 74 72 69 6e 67 2c 20 20 20 20 20 20 30 2c 20  String,      0, 
55e0: 20 30 2c 20 20 22 72 6f 77 69 64 20 22 7d 2c 0a   0,  "rowid "},.
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
5600: 5f 52 65 63 6e 6f 2c 20 20 20 20 20 20 20 31 2c  _Recno,       1,
5610: 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20    0,  0},.      
5620: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
5630: 67 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20  g,      0,  0,  
5640: 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  " missing from i
5650: 6e 64 65 78 20 22 7d 2c 0a 20 20 20 20 20 20 20  ndex "},.       
5660: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
5670: 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30  ,      0,  0,  0
5680: 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20  },    /* 4 */.  
5690: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43            { OP_C
56a0: 6f 6e 63 61 74 2c 20 20 20 20 20 20 34 2c 20 20  oncat,      4,  
56b0: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20  0,  0},.        
56c0: 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63      { OP_Callbac
56d0: 6b 2c 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d  k,    1,  0,  0}
56e0: 2c 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20  ,.          };. 
56f0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56           sqliteV
5700: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 52  dbeAddOp(v, OP_R
5710: 65 63 6e 6f 2c 20 31 2c 20 30 29 3b 0a 20 20 20  ecno, 1, 0);.   
5720: 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20         for(k=0; 
5730: 6b 3c 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b  k<pIdx->nColumn;
5740: 20 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   k++){.         
5750: 20 20 20 69 6e 74 20 69 64 78 20 3d 20 70 49 64     int idx = pId
5760: 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 5d 3b 0a  x->aiColumn[k];.
5770: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
5780: 69 64 78 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79  idx==pTab->iPKey
5790: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
57a0: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
57b0: 70 28 76 2c 20 4f 50 5f 52 65 63 6e 6f 2c 20 31  p(v, OP_Recno, 1
57c0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
57d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
57e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
57f0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 6f 6c  eAddOp(v, OP_Col
5800: 75 6d 6e 2c 20 31 2c 20 69 64 78 29 3b 0a 20 20  umn, 1, idx);.  
5810: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
5820: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5830: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
5840: 70 28 76 2c 20 4f 50 5f 4d 61 6b 65 49 64 78 4b  p(v, OP_MakeIdxK
5850: 65 79 2c 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d  ey, pIdx->nColum
5860: 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  n, 0);.         
5870: 20 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f 66 6f   if( db->file_fo
5880: 72 6d 61 74 3e 3d 34 20 29 20 73 71 6c 69 74 65  rmat>=4 ) sqlite
5890: 41 64 64 49 64 78 4b 65 79 54 79 70 65 28 76 2c  AddIdxKeyType(v,
58a0: 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20   pIdx);.        
58b0: 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 56    jmp2 = sqliteV
58c0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 46  dbeAddOp(v, OP_F
58d0: 6f 75 6e 64 2c 20 6a 2b 32 2c 20 30 29 3b 0a 20  ound, j+2, 0);. 
58e0: 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
58f0: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c  sqliteVdbeAddOpL
5900: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
5910: 28 69 64 78 45 72 72 29 2c 20 69 64 78 45 72 72  (idxErr), idxErr
5920: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
5930: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28  iteVdbeChangeP3(
5940: 76 2c 20 61 64 64 72 2b 34 2c 20 70 49 64 78 2d  v, addr+4, pIdx-
5950: 3e 7a 4e 61 6d 65 2c 20 50 33 5f 53 54 41 54 49  >zName, P3_STATI
5960: 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  C);.          sq
5970: 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 32  liteVdbeChangeP2
5980: 28 76 2c 20 6a 6d 70 32 2c 20 73 71 6c 69 74 65  (v, jmp2, sqlite
5990: 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28  VdbeCurrentAddr(
59a0: 76 29 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  v));.        }. 
59b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
59c0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4e 65 78  eAddOp(v, OP_Nex
59d0: 74 2c 20 31 2c 20 6c 6f 6f 70 54 6f 70 2b 31 29  t, 1, loopTop+1)
59e0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
59f0: 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20  VdbeChangeP2(v, 
5a00: 6c 6f 6f 70 54 6f 70 2c 20 73 71 6c 69 74 65 56  loopTop, sqliteV
5a10: 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76  dbeCurrentAddr(v
5a20: 29 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  ));.        for(
5a30: 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
5a40: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
5a50: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
5a60: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
5a70: 73 74 61 74 69 63 20 56 64 62 65 4f 70 20 63 6e  static VdbeOp cn
5a80: 74 49 64 78 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  tIdx[] = {.     
5a90: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74          { OP_Int
5aa0: 65 67 65 72 2c 20 20 20 20 20 20 30 2c 20 20 30  eger,      0,  0
5ab0: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
5ac0: 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 53 74 6f 72      { OP_MemStor
5ad0: 65 2c 20 20 20 20 20 32 2c 20 20 31 2c 20 20 30  e,     2,  1,  0
5ae0: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  },.             
5af0: 7b 20 4f 50 5f 52 65 77 69 6e 64 2c 20 20 20 20  { OP_Rewind,    
5b00: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20     0,  0,  0},  
5b10: 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 2 */.        
5b20: 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 49 6e 63       { OP_MemInc
5b30: 72 2c 20 20 20 20 20 20 32 2c 20 20 30 2c 20 20  r,      2,  0,  
5b40: 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  0},.            
5b50: 20 7b 20 4f 50 5f 4e 65 78 74 2c 20 20 20 20 20   { OP_Next,     
5b60: 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20      0,  0,  0}, 
5b70: 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20   /* 4 */.       
5b80: 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f        { OP_MemLo
5b90: 61 64 2c 20 20 20 20 20 20 31 2c 20 20 30 2c 20  ad,      1,  0, 
5ba0: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   0},.           
5bb0: 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f 61 64 2c 20    { OP_MemLoad, 
5bc0: 20 20 20 20 20 32 2c 20 20 30 2c 20 20 30 7d 2c       2,  0,  0},
5bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
5be0: 4f 50 5f 45 71 2c 20 20 20 20 20 20 20 20 20 20  OP_Eq,          
5bf0: 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 2f 2a   0,  0,  0},  /*
5c00: 20 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   7 */.          
5c10: 20 20 20 7b 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c     { OP_MemIncr,
5c20: 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d        0,  0,  0}
5c30: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  ,.             {
5c40: 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 20 20   OP_String,     
5c50: 20 20 30 2c 20 20 30 2c 20 20 22 77 72 6f 6e 67    0,  0,  "wrong
5c60: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
5c70: 20 69 6e 64 65 78 20 22 7d 2c 0a 20 20 20 20 20   index "},.     
5c80: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72          { OP_Str
5c90: 69 6e 67 2c 20 20 20 20 20 20 20 30 2c 20 20 30  ing,       0,  0
5ca0: 2c 20 20 30 7d 2c 20 20 2f 2a 20 31 30 20 2a 2f  ,  0},  /* 10 */
5cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
5cc0: 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20 20  OP_Concat,      
5cd0: 20 32 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20   2,  0,  0},.   
5ce0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43            { OP_C
5cf0: 61 6c 6c 62 61 63 6b 2c 20 20 20 20 20 31 2c 20  allback,     1, 
5d00: 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20   0,  0},.       
5d10: 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 20 20     };.          
5d20: 69 66 28 20 70 49 64 78 2d 3e 74 6e 75 6d 3d 3d  if( pIdx->tnum==
5d30: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
5d40: 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
5d50: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69  qliteVdbeAddOpLi
5d60: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
5d70: 63 6e 74 49 64 78 29 2c 20 63 6e 74 49 64 78 29  cntIdx), cntIdx)
5d80: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
5d90: 74 65 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  teVdbeChangeP1(v
5da0: 2c 20 61 64 64 72 2b 32 2c 20 6a 2b 32 29 3b 0a  , addr+2, j+2);.
5db0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
5dc0: 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20  VdbeChangeP2(v, 
5dd0: 61 64 64 72 2b 32 2c 20 61 64 64 72 2b 35 29 3b  addr+2, addr+5);
5de0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
5df0: 65 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  eVdbeChangeP1(v,
5e00: 20 61 64 64 72 2b 34 2c 20 6a 2b 32 29 3b 0a 20   addr+4, j+2);. 
5e10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56           sqliteV
5e20: 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61  dbeChangeP2(v, a
5e30: 64 64 72 2b 34 2c 20 61 64 64 72 2b 33 29 3b 0a  ddr+4, addr+3);.
5e40: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
5e50: 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20  VdbeChangeP2(v, 
5e60: 61 64 64 72 2b 37 2c 20 61 64 64 72 2b 41 72 72  addr+7, addr+Arr
5e70: 61 79 53 69 7a 65 28 63 6e 74 49 64 78 29 29 3b  aySize(cntIdx));
5e80: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
5e90: 65 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c  eVdbeChangeP3(v,
5ea0: 20 61 64 64 72 2b 31 30 2c 20 70 49 64 78 2d 3e   addr+10, pIdx->
5eb0: 7a 4e 61 6d 65 2c 20 50 33 5f 53 54 41 54 49 43  zName, P3_STATIC
5ec0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
5ed0: 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20     } .    }.    
5ee0: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 56 64 62  addr = sqliteVdb
5ef0: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
5f00: 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29  raySize(endCode)
5f10: 2c 20 65 6e 64 43 6f 64 65 29 3b 0a 20 20 20 20  , endCode);.    
5f20: 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65  sqliteVdbeChange
5f30: 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 61 64  P2(v, addr+2, ad
5f40: 64 72 2b 41 72 72 61 79 53 69 7a 65 28 65 6e 64  dr+ArraySize(end
5f50: 43 6f 64 65 29 29 3b 0a 20 20 7d 65 6c 73 65 0a  Code));.  }else.
5f60: 0a 20 20 7b 7d 0a 20 20 73 71 6c 69 74 65 46 72  .  {}.  sqliteFr
5f70: 65 65 28 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c  ee(zLeft);.  sql
5f80: 69 74 65 46 72 65 65 28 7a 52 69 67 68 74 29 3b  iteFree(zRight);
5f90: 0a 7d 0a                                         .}.