/ Hex Artifact Content
Login

Artifact 3b4f5a800e7a2145bc1930f323232e297d4eb782:


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 30 20 32 30  agma.c,v 1.10 20
01d0: 30 33 2f 30 36 2f 31 35 20 32 33 3a 34 32 3a 32  03/06/15 23:42:2
01e0: 34 20 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23  4 drh Exp $.*/.#
01f0: 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49  include "sqliteI
0200: 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c  nt.h".#include <
0210: 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20  ctype.h>../*.** 
0220: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
0230: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
0240: 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 0a 2a  boolean value..*
0250: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
0260: 42 6f 6f 6c 65 61 6e 28 63 68 61 72 20 2a 7a 29  Boolean(char *z)
0270: 7b 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20  {.  static char 
0280: 2a 61 7a 54 72 75 65 5b 5d 20 3d 20 7b 20 22 79  *azTrue[] = { "y
0290: 65 73 22 2c 20 22 6f 6e 22 2c 20 22 74 72 75 65  es", "on", "true
02a0: 22 20 7d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  " };.  int i;.  
02b0: 69 66 28 20 7a 5b 30 5d 3d 3d 30 20 29 20 72 65  if( z[0]==0 ) re
02c0: 74 75 72 6e 20 30 3b 0a 20 20 69 66 28 20 69 73  turn 0;.  if( is
02d0: 64 69 67 69 74 28 7a 5b 30 5d 29 20 7c 7c 20 28  digit(z[0]) || (
02e0: 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26 20 69 73 64  z[0]=='-' && isd
02f0: 69 67 69 74 28 7a 5b 31 5d 29 29 20 29 7b 0a 20  igit(z[1])) ){. 
0300: 20 20 20 72 65 74 75 72 6e 20 61 74 6f 69 28 7a     return atoi(z
0310: 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  );.  }.  for(i=0
0320: 3b 20 69 3c 73 69 7a 65 6f 66 28 61 7a 54 72 75  ; i<sizeof(azTru
0330: 65 29 2f 73 69 7a 65 6f 66 28 61 7a 54 72 75 65  e)/sizeof(azTrue
0340: 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  [0]); i++){.    
0350: 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d  if( sqliteStrICm
0360: 70 28 7a 2c 61 7a 54 72 75 65 5b 69 5d 29 3d 3d  p(z,azTrue[i])==
0370: 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  0 ) return 1;.  
0380: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
0390: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
03a0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
03b0: 67 20 61 73 20 61 20 73 61 66 65 74 79 20 6c 65  g as a safety le
03c0: 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30 20 66  vel.  Return 0 f
03d0: 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72  or OFF,.** 1 for
03e0: 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e   ON or NORMAL an
03f0: 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 0a 2a 2a  d 2 for FULL..**
0400: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
0410: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
0420: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
0430: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
0440: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
0450: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
0460: 69 74 65 42 74 72 65 65 53 65 74 53 61 66 65 74  iteBtreeSetSafet
0470: 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69  yLevel().  The i
0480: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70  s done.** to sup
0490: 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20  port legacy SQL 
04a0: 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65 74  code.  The safet
04b0: 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20  y level used to 
04c0: 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e  be boolean.** an
04d0: 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20  d older scripts 
04e0: 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e 75  may have used nu
04f0: 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20  mbers 0 for OFF 
0500: 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f  and 1 for ON..*/
0510: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 53  .static int getS
0520: 61 66 65 74 79 4c 65 76 65 6c 28 63 68 61 72 20  afetyLevel(char 
0530: 2a 7a 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f  *z){.  static co
0540: 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20  nst struct {.   
0550: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 57 6f   const char *zWo
0560: 72 64 3b 0a 20 20 20 20 69 6e 74 20 76 61 6c 3b  rd;.    int val;
0570: 0a 20 20 7d 20 61 4b 65 79 5b 5d 20 3d 20 7b 0a  .  } aKey[] = {.
0580: 20 20 20 20 7b 20 22 6e 6f 22 2c 20 20 20 20 30      { "no",    0
0590: 20 7d 2c 0a 20 20 20 20 7b 20 22 6f 66 66 22 2c   },.    { "off",
05a0: 20 20 20 30 20 7d 2c 0a 20 20 20 20 7b 20 22 66     0 },.    { "f
05b0: 61 6c 73 65 22 2c 20 30 20 7d 2c 0a 20 20 20 20  alse", 0 },.    
05c0: 7b 20 22 79 65 73 22 2c 20 20 20 31 20 7d 2c 0a  { "yes",   1 },.
05d0: 20 20 20 20 7b 20 22 6f 6e 22 2c 20 20 20 20 31      { "on",    1
05e0: 20 7d 2c 0a 20 20 20 20 7b 20 22 74 72 75 65 22   },.    { "true"
05f0: 2c 20 20 31 20 7d 2c 0a 20 20 20 20 7b 20 22 66  ,  1 },.    { "f
0600: 75 6c 6c 22 2c 20 20 32 20 7d 2c 0a 20 20 7d 3b  ull",  2 },.  };
0610: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20  .  int i;.  if( 
0620: 7a 5b 30 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e  z[0]==0 ) return
0630: 20 31 3b 0a 20 20 69 66 28 20 69 73 64 69 67 69   1;.  if( isdigi
0640: 74 28 7a 5b 30 5d 29 20 7c 7c 20 28 7a 5b 30 5d  t(z[0]) || (z[0]
0650: 3d 3d 27 2d 27 20 26 26 20 69 73 64 69 67 69 74  =='-' && isdigit
0660: 28 7a 5b 31 5d 29 29 20 29 7b 0a 20 20 20 20 72  (z[1])) ){.    r
0670: 65 74 75 72 6e 20 61 74 6f 69 28 7a 29 3b 0a 20  eturn atoi(z);. 
0680: 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c   }.  for(i=0; i<
0690: 73 69 7a 65 6f 66 28 61 4b 65 79 29 2f 73 69 7a  sizeof(aKey)/siz
06a0: 65 6f 66 28 61 4b 65 79 5b 30 5d 29 3b 20 69 2b  eof(aKey[0]); i+
06b0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  +){.    if( sqli
06c0: 74 65 53 74 72 49 43 6d 70 28 7a 2c 61 4b 65 79  teStrICmp(z,aKey
06d0: 5b 69 5d 2e 7a 57 6f 72 64 29 3d 3d 30 20 29 20  [i].zWord)==0 ) 
06e0: 72 65 74 75 72 6e 20 61 4b 65 79 5b 69 5d 2e 76  return aKey[i].v
06f0: 61 6c 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  al;.  }.  return
0700: 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74   1;.}../*.** Int
0710: 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e  erpret the given
0720: 20 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d   string as a tem
0730: 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52  p db location. R
0740: 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65  eturn 1 for file
0750: 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f  .** backed tempo
0760: 72 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20  rary databases, 
0770: 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c  2 for the Red-Bl
0780: 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f  ack tree in memo
0790: 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61  ry database.** a
07a0: 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20  nd 0 to use the 
07b0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66  compile-time def
07c0: 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ault..*/.static 
07d0: 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65  int getTempStore
07e0: 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28  (char *z){.  if(
07f0: 20 7a 5b 30 5d 3e 3d 27 30 27 20 7c 7c 20 7a 5b   z[0]>='0' || z[
0800: 30 5d 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20 72  0]<='2' ){.    r
0810: 65 74 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30 27  eturn z[0] - '0'
0820: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71  ;.  }else if( sq
0830: 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 2c 20 22  liteStrICmp(z, "
0840: 66 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  file")==0 ){.   
0850: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c   return 1;.  }el
0860: 73 65 20 69 66 28 20 73 71 6c 69 74 65 53 74 72  se if( sqliteStr
0870: 49 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72 79 22  ICmp(z, "memory"
0880: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
0890: 72 6e 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rn 2;.  }else{. 
08a0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
08b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  .}../*.** Proces
08c0: 73 20 61 20 70 72 61 67 6d 61 20 73 74 61 74 65  s a pragma state
08d0: 6d 65 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72  ment.  .**.** Pr
08e0: 61 67 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69  agmas are of thi
08f0: 73 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20  s form:.**.**   
0900: 20 20 20 50 52 41 47 4d 41 20 69 64 20 3d 20 76     PRAGMA id = v
0910: 61 6c 75 65 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  alue.**.** The i
0920: 64 65 6e 74 69 66 69 65 72 20 6d 69 67 68 74 20  dentifier might 
0930: 61 6c 73 6f 20 62 65 20 61 20 73 74 72 69 6e 67  also be a string
0940: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  .  The value is 
0950: 61 20 73 74 72 69 6e 67 2c 20 61 6e 64 0a 2a 2a  a string, and.**
0960: 20 69 64 65 6e 74 69 66 69 65 72 2c 20 6f 72 20   identifier, or 
0970: 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 6d 69  a number.  If mi
0980: 6e 75 73 46 6c 61 67 20 69 73 20 74 72 75 65 2c  nusFlag is true,
0990: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
09a0: 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65 72 20 74  is.** a number t
09b0: 68 61 74 20 77 61 73 20 70 72 65 63 65 64 65 64  hat was preceded
09c0: 20 62 79 20 61 20 6d 69 6e 75 73 20 73 69 67 6e   by a minus sign
09d0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
09e0: 50 72 61 67 6d 61 28 50 61 72 73 65 20 2a 70 50  Pragma(Parse *pP
09f0: 61 72 73 65 2c 20 54 6f 6b 65 6e 20 2a 70 4c 65  arse, Token *pLe
0a00: 66 74 2c 20 54 6f 6b 65 6e 20 2a 70 52 69 67 68  ft, Token *pRigh
0a10: 74 2c 20 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67  t, int minusFlag
0a20: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74  ){.  char *zLeft
0a30: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 52   = 0;.  char *zR
0a40: 69 67 68 74 20 3d 20 30 3b 0a 20 20 73 71 6c 69  ight = 0;.  sqli
0a50: 74 65 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d  te *db = pParse-
0a60: 3e 64 62 3b 0a 20 20 56 64 62 65 20 2a 76 20 3d  >db;.  Vdbe *v =
0a70: 20 73 71 6c 69 74 65 47 65 74 56 64 62 65 28 70   sqliteGetVdbe(p
0a80: 50 61 72 73 65 29 3b 0a 20 20 69 66 28 20 76 3d  Parse);.  if( v=
0a90: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 0a 20 20  =0 ) return;..  
0aa0: 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 53 74  zLeft = sqliteSt
0ab0: 72 4e 44 75 70 28 70 4c 65 66 74 2d 3e 7a 2c 20  rNDup(pLeft->z, 
0ac0: 70 4c 65 66 74 2d 3e 6e 29 3b 0a 20 20 73 71 6c  pLeft->n);.  sql
0ad0: 69 74 65 44 65 71 75 6f 74 65 28 7a 4c 65 66 74  iteDequote(zLeft
0ae0: 29 3b 0a 20 20 69 66 28 20 6d 69 6e 75 73 46 6c  );.  if( minusFl
0af0: 61 67 20 29 7b 0a 20 20 20 20 7a 52 69 67 68 74  ag ){.    zRight
0b00: 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
0b10: 53 65 74 4e 53 74 72 69 6e 67 28 26 7a 52 69 67  SetNString(&zRig
0b20: 68 74 2c 20 22 2d 22 2c 20 31 2c 20 70 52 69 67  ht, "-", 1, pRig
0b30: 68 74 2d 3e 7a 2c 20 70 52 69 67 68 74 2d 3e 6e  ht->z, pRight->n
0b40: 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  , 0);.  }else{. 
0b50: 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69     zRight = sqli
0b60: 74 65 53 74 72 4e 44 75 70 28 70 52 69 67 68 74  teStrNDup(pRight
0b70: 2d 3e 7a 2c 20 70 52 69 67 68 74 2d 3e 6e 29 3b  ->z, pRight->n);
0b80: 0a 20 20 20 20 73 71 6c 69 74 65 44 65 71 75 6f  .    sqliteDequo
0b90: 74 65 28 7a 52 69 67 68 74 29 3b 0a 20 20 7d 0a  te(zRight);.  }.
0ba0: 20 20 69 66 28 20 73 71 6c 69 74 65 41 75 74 68    if( sqliteAuth
0bb0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
0bc0: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
0bd0: 66 74 2c 20 7a 52 69 67 68 74 2c 20 30 29 20 29  ft, zRight, 0) )
0be0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65  {.    sqliteFree
0bf0: 28 7a 4c 65 66 74 29 3b 0a 20 20 20 20 73 71 6c  (zLeft);.    sql
0c00: 69 74 65 46 72 65 65 28 7a 52 69 67 68 74 29 3b  iteFree(zRight);
0c10: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
0c20: 0a 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  . .  /*.  **  PR
0c30: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
0c40: 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  he_size.  **  PR
0c50: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
0c60: 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  he_size=N.  **. 
0c70: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
0c80: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
0c90: 75 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e  urrent persisten
0ca0: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
0cb0: 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68  e.  ** page cach
0cc0: 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c  e size.  The val
0cd0: 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74  ue returned is t
0ce0: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
0cf0: 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20  r of.  ** pages 
0d00: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
0d10: 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  e.  The second f
0d20: 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68  orm sets both th
0d30: 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70  e current.  ** p
0d40: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76  age cache size v
0d50: 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72  alue and the per
0d60: 73 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63  sistent page cac
0d70: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20  he size value.  
0d80: 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ** stored in the
0d90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
0da0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 64 65    **.  ** The de
0db0: 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
0dc0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65   is stored in me
0dd0: 74 61 2d 76 61 6c 75 65 20 32 20 6f 66 20 70 61  ta-value 2 of pa
0de0: 67 65 20 31 20 6f 66 20 74 68 65 0a 20 20 2a 2a  ge 1 of the.  **
0df0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
0e00: 20 54 68 65 20 63 61 63 68 65 20 73 69 7a 65 20   The cache size 
0e10: 69 73 20 61 63 74 75 61 6c 6c 79 20 74 68 65 20  is actually the 
0e20: 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
0e30: 66 0a 20 20 2a 2a 20 74 68 69 73 20 6d 65 6d 6f  f.  ** this memo
0e40: 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 20 20 54 68  ry location.  Th
0e50: 65 20 73 69 67 6e 20 6f 66 20 6d 65 74 61 2d 76  e sign of meta-v
0e60: 61 6c 75 65 20 32 20 64 65 74 65 72 6d 69 6e 65  alue 2 determine
0e70: 73 20 74 68 65 0a 20 20 2a 2a 20 73 79 6e 63 68  s the.  ** synch
0e80: 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 2e 20  ronous setting. 
0e90: 20 41 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75   A negative valu
0ea0: 65 20 6d 65 61 6e 73 20 73 79 6e 63 68 72 6f 6e  e means synchron
0eb0: 6f 75 73 20 69 73 20 6f 66 66 0a 20 20 2a 2a 20  ous is off.  ** 
0ec0: 61 6e 64 20 61 20 70 6f 73 69 74 69 76 65 20 76  and a positive v
0ed0: 61 6c 75 65 20 6d 65 61 6e 73 20 73 79 6e 63 68  alue means synch
0ee0: 72 6f 6e 6f 75 73 20 69 73 20 6f 6e 2e 0a 20 20  ronous is on..  
0ef0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53  */.  if( sqliteS
0f00: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 64 65  trICmp(zLeft,"de
0f10: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
0f20: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61  ")==0 ){.    sta
0f30: 74 69 63 20 56 64 62 65 4f 70 20 67 65 74 43 61  tic VdbeOp getCa
0f40: 63 68 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20  cheSize[] = {.  
0f50: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
0f60: 6b 69 65 2c 20 20 30 2c 20 32 2c 20 20 20 20 20  kie,  0, 2,     
0f70: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
0f80: 50 5f 41 62 73 56 61 6c 75 65 2c 20 20 20 20 30  P_AbsValue,    0
0f90: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
0fa0: 20 20 20 20 20 20 7b 20 4f 50 5f 44 75 70 2c 20        { OP_Dup, 
0fb0: 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20          0, 0,   
0fc0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
0fd0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
0fe0: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
0ff0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 65 2c  ,.      { OP_Ne,
1000: 20 20 20 20 20 20 20 20 20 20 30 2c 20 36 2c 20            0, 6, 
1010: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
1020: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
1030: 20 20 20 4d 41 58 5f 50 41 47 45 53 2c 30 2c 20     MAX_PAGES,0, 
1040: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43  0},.      { OP_C
1050: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30  olumnName,  0, 0
1060: 2c 20 20 20 20 20 20 20 20 22 63 61 63 68 65 5f  ,        "cache_
1070: 73 69 7a 65 22 7d 2c 0a 20 20 20 20 20 20 7b 20  size"},.      { 
1080: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20  OP_Callback,    
1090: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 0,        0},
10a0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 66 28 20  .    };.    if( 
10b0: 70 52 69 67 68 74 2d 3e 7a 3d 3d 70 4c 65 66 74  pRight->z==pLeft
10c0: 2d 3e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ->z ){.      sql
10d0: 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69 73 74  iteVdbeAddOpList
10e0: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65  (v, ArraySize(ge
10f0: 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74  tCacheSize), get
1100: 43 61 63 68 65 53 69 7a 65 29 3b 0a 20 20 20 20  CacheSize);.    
1110: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
1120: 20 61 64 64 72 3b 0a 20 20 20 20 20 20 69 6e 74   addr;.      int
1130: 20 73 69 7a 65 20 3d 20 61 74 6f 69 28 7a 52 69   size = atoi(zRi
1140: 67 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ght);.      if( 
1150: 73 69 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d 20  size<0 ) size = 
1160: 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c  -size;.      sql
1170: 69 74 65 42 65 67 69 6e 57 72 69 74 65 4f 70 65  iteBeginWriteOpe
1180: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30  ration(pParse, 0
1190: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
11a0: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
11b0: 50 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c  P_Integer, size,
11c0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
11d0: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
11e0: 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 30 2c 20  _ReadCookie, 0, 
11f0: 32 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d  2);.      addr =
1200: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
1210: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
1220: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 0);.      sql
1230: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
1240: 4f 50 5f 47 65 2c 20 30 2c 20 61 64 64 72 2b 33  OP_Ge, 0, addr+3
1250: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  );.      sqliteV
1260: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4e  dbeAddOp(v, OP_N
1270: 65 67 61 74 69 76 65 2c 20 30 2c 20 30 29 3b 0a  egative, 0, 0);.
1280: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
1290: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 65 74 43  AddOp(v, OP_SetC
12a0: 6f 6f 6b 69 65 2c 20 30 2c 20 32 29 3b 0a 20 20  ookie, 0, 2);.  
12b0: 20 20 20 20 73 71 6c 69 74 65 45 6e 64 57 72 69      sqliteEndWri
12c0: 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72  teOperation(pPar
12d0: 73 65 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 63  se);.      db->c
12e0: 61 63 68 65 5f 73 69 7a 65 20 3d 20 64 62 2d 3e  ache_size = db->
12f0: 63 61 63 68 65 5f 73 69 7a 65 3c 30 20 3f 20 2d  cache_size<0 ? -
1300: 73 69 7a 65 20 3a 20 73 69 7a 65 3b 0a 20 20 20  size : size;.   
1310: 20 20 20 73 71 6c 69 74 65 42 74 72 65 65 53 65     sqliteBtreeSe
1320: 74 43 61 63 68 65 53 69 7a 65 28 64 62 2d 3e 61  tCacheSize(db->a
1330: 44 62 5b 30 5d 2e 70 42 74 2c 20 64 62 2d 3e 63  Db[0].pBt, db->c
1340: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
1350: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a  }.  }else..  /*.
1360: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 63 61 63    **  PRAGMA cac
1370: 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  he_size.  **  PR
1380: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d  AGMA cache_size=
1390: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
13a0: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
13b0: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c  ts the current l
13c0: 6f 63 61 6c 20 73 65 74 74 69 6e 67 20 66 6f 72  ocal setting for
13d0: 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63   the.  ** page c
13e0: 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20  ache size.  The 
13f0: 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20 63 61  local setting ca
1400: 6e 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 66  n be different f
1410: 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20 70 65 72  rom.  ** the per
1420: 73 69 73 74 65 6e 74 20 63 61 63 68 65 20 73 69  sistent cache si
1430: 7a 65 20 76 61 6c 75 65 20 74 68 61 74 20 69 73  ze value that is
1440: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64   stored in the d
1450: 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 66 69 6c  atabase.  ** fil
1460: 65 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 76  e itself.  The v
1470: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73  alue returned is
1480: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
1490: 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65  ber of.  ** page
14a0: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61  s in the page ca
14b0: 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  che.  The second
14c0: 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c   form sets the l
14d0: 6f 63 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63  ocal.  ** page c
14e0: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e  ache size value.
14f0: 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 63 68    It does not ch
1500: 61 6e 67 65 20 74 68 65 20 70 65 72 73 69 73 74  ange the persist
1510: 65 6e 74 0a 20 20 2a 2a 20 63 61 63 68 65 20 73  ent.  ** cache s
1520: 69 7a 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  ize stored on th
1530: 65 20 64 69 73 6b 20 73 6f 20 74 68 65 20 63 61  e disk so the ca
1540: 63 68 65 20 73 69 7a 65 20 77 69 6c 6c 20 72 65  che size will re
1550: 76 65 72 74 0a 20 20 2a 2a 20 74 6f 20 69 74 73  vert.  ** to its
1560: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77   default value w
1570: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
1580: 20 69 73 20 63 6c 6f 73 65 64 20 61 6e 64 20 72   is closed and r
1590: 65 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 20 4e 20  eopened..  ** N 
15a0: 73 68 6f 75 6c 64 20 62 65 20 61 20 70 6f 73 69  should be a posi
15b0: 74 69 76 65 20 69 6e 74 65 67 65 72 2e 0a 20 20  tive integer..  
15c0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53  */.  if( sqliteS
15d0: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 63 61  trICmp(zLeft,"ca
15e0: 63 68 65 5f 73 69 7a 65 22 29 3d 3d 30 20 29 7b  che_size")==0 ){
15f0: 0a 20 20 20 20 73 74 61 74 69 63 20 56 64 62 65  .    static Vdbe
1600: 4f 70 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b  Op getCacheSize[
1610: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50  ] = {.      { OP
1620: 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c  _ColumnName,  0,
1630: 20 30 2c 20 20 20 20 20 20 20 20 22 63 61 63 68   0,        "cach
1640: 65 5f 73 69 7a 65 22 7d 2c 0a 20 20 20 20 20 20  e_size"},.      
1650: 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20  { OP_Callback,  
1660: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30    1, 0,        0
1670: 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 66  },.    };.    if
1680: 28 20 70 52 69 67 68 74 2d 3e 7a 3d 3d 70 4c 65  ( pRight->z==pLe
1690: 66 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 20 20 69  ft->z ){.      i
16a0: 6e 74 20 73 69 7a 65 20 3d 20 64 62 2d 3e 63 61  nt size = db->ca
16b0: 63 68 65 5f 73 69 7a 65 3b 3b 0a 20 20 20 20 20  che_size;;.     
16c0: 20 69 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69   if( size<0 ) si
16d0: 7a 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20  ze = -size;.    
16e0: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
16f0: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
1700: 20 73 69 7a 65 2c 20 30 29 3b 0a 20 20 20 20 20   size, 0);.     
1710: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
1720: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
1730: 65 28 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c  e(getCacheSize),
1740: 20 67 65 74 43 61 63 68 65 53 69 7a 65 29 3b 0a   getCacheSize);.
1750: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1760: 20 69 6e 74 20 73 69 7a 65 20 3d 20 61 74 6f 69   int size = atoi
1770: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
1780: 69 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69 7a  if( size<0 ) siz
1790: 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20  e = -size;.     
17a0: 20 69 66 28 20 64 62 2d 3e 63 61 63 68 65 5f 73   if( db->cache_s
17b0: 69 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d 20 2d  ize<0 ) size = -
17c0: 73 69 7a 65 3b 0a 20 20 20 20 20 20 64 62 2d 3e  size;.      db->
17d0: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
17e0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42  e;.      sqliteB
17f0: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
1800: 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c  (db->aDb[0].pBt,
1810: 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29   db->cache_size)
1820: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
1830: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
1840: 4d 41 20 64 65 66 61 75 6c 74 5f 73 79 6e 63 68  MA default_synch
1850: 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 50 52 41  ronous.  **  PRA
1860: 47 4d 41 20 64 65 66 61 75 6c 74 5f 73 79 6e 63  GMA default_sync
1870: 68 72 6f 6e 6f 75 73 3d 4f 4e 7c 4f 46 46 7c 4e  hronous=ON|OFF|N
1880: 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a  ORMAL|FULL.  **.
1890: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
18a0: 6f 72 6d 20 72 65 74 75 72 6e 73 20 74 68 65 20  orm returns the 
18b0: 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65  persistent value
18c0: 20 6f 66 20 74 68 65 20 22 73 79 6e 63 68 72 6f   of the "synchro
18d0: 6e 6f 75 73 22 20 73 65 74 74 69 6e 67 0a 20 20  nous" setting.  
18e0: 2a 2a 20 74 68 61 74 20 69 73 20 73 74 6f 72 65  ** that is store
18f0: 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
1900: 65 2e 20 20 54 68 69 73 20 69 73 20 74 68 65 20  e.  This is the 
1910: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74  synchronous sett
1920: 69 6e 67 20 74 68 61 74 0a 20 20 2a 2a 20 69 73  ing that.  ** is
1930: 20 75 73 65 64 20 77 68 65 6e 65 76 65 72 20 74   used whenever t
1940: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f  he database is o
1950: 70 65 6e 65 64 20 75 6e 6c 65 73 73 20 6f 76 65  pened unless ove
1960: 72 72 69 64 64 65 6e 20 62 79 20 61 20 73 65 70  rridden by a sep
1970: 61 72 61 74 65 0a 20 20 2a 2a 20 22 73 79 6e 63  arate.  ** "sync
1980: 68 72 6f 6e 6f 75 73 22 20 70 72 61 67 6d 61 2e  hronous" pragma.
1990: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
19a0: 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20 70 65  m changes the pe
19b0: 72 73 69 73 74 65 6e 74 20 61 6e 64 20 74 68 65  rsistent and the
19c0: 0a 20 20 2a 2a 20 6c 6f 63 61 6c 20 73 79 6e 63  .  ** local sync
19d0: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
19e0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 67 69 76  to the value giv
19f0: 65 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66  en..  **.  ** If
1a00: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73 20   synchronous is 
1a10: 4f 46 46 2c 20 53 51 4c 69 74 65 20 64 6f 65 73  OFF, SQLite does
1a20: 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 61 6e 79   not attempt any
1a30: 20 66 73 79 6e 63 28 29 20 73 79 73 74 65 6d 73   fsync() systems
1a40: 20 63 61 6c 6c 73 0a 20 20 2a 2a 20 74 6f 20 6d   calls.  ** to m
1a50: 61 6b 65 20 73 75 72 65 20 64 61 74 61 20 69 73  ake sure data is
1a60: 20 63 6f 6d 6d 69 74 74 65 64 20 74 6f 20 64 69   committed to di
1a70: 73 6b 2e 20 20 57 72 69 74 65 20 6f 70 65 72 61  sk.  Write opera
1a80: 74 69 6f 6e 73 20 61 72 65 20 76 65 72 79 20 66  tions are very f
1a90: 61 73 74 2c 0a 20 20 2a 2a 20 62 75 74 20 61 20  ast,.  ** but a 
1aa0: 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 63 61  power failure ca
1ab0: 6e 20 6c 65 61 76 65 20 74 68 65 20 64 61 74 61  n leave the data
1ac0: 62 61 73 65 20 69 6e 20 61 6e 20 69 6e 63 6f 6e  base in an incon
1ad0: 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a 20  sistent state.. 
1ae0: 20 2a 2a 20 49 66 20 73 79 6e 63 68 72 6f 6e 6f   ** If synchrono
1af0: 75 73 20 69 73 20 4f 4e 20 6f 72 20 4e 4f 52 4d  us is ON or NORM
1b00: 41 4c 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  AL, SQLite will 
1b10: 64 6f 20 61 6e 20 66 73 79 6e 63 28 29 20 73 79  do an fsync() sy
1b20: 73 74 65 6d 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  stem call to.  *
1b30: 2a 20 6d 61 6b 65 20 73 75 72 65 20 64 61 74 61  * make sure data
1b40: 20 69 73 20 62 65 69 6e 67 20 77 72 69 74 74 65   is being writte
1b50: 6e 20 74 6f 20 64 69 73 6b 2e 20 20 54 68 65 20  n to disk.  The 
1b60: 72 69 73 6b 20 6f 66 20 63 6f 72 72 75 70 74 69  risk of corrupti
1b70: 6f 6e 20 64 75 65 20 74 6f 0a 20 20 2a 2a 20 61  on due to.  ** a
1b80: 20 70 6f 77 65 72 20 6c 6f 73 73 20 69 6e 20 74   power loss in t
1b90: 68 69 73 20 6d 6f 64 65 20 69 73 20 6e 65 67 6c  his mode is negl
1ba0: 69 67 69 62 6c 65 20 62 75 74 20 6e 6f 6e 2d 7a  igible but non-z
1bb0: 65 72 6f 2e 20 20 49 66 20 73 79 6e 63 68 72 6f  ero.  If synchro
1bc0: 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 46 55 4c  nous.  ** is FUL
1bd0: 4c 2c 20 65 78 74 72 61 20 66 73 79 6e 63 28 29  L, extra fsync()
1be0: 73 20 6f 63 63 75 72 20 74 6f 20 72 65 64 75 63  s occur to reduc
1bf0: 65 20 74 68 65 20 72 69 73 6b 20 6f 66 20 63 6f  e the risk of co
1c00: 72 72 75 70 74 69 6f 6e 20 74 6f 20 6e 65 61 72  rruption to near
1c10: 0a 20 20 2a 2a 20 7a 65 72 6f 2c 20 62 75 74 20  .  ** zero, but 
1c20: 77 69 74 68 20 61 20 77 72 69 74 65 20 70 65 72  with a write per
1c30: 66 6f 72 6d 61 6e 63 65 20 70 65 6e 61 6c 74 79  formance penalty
1c40: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d  .  The default m
1c50: 6f 64 65 20 69 73 20 4e 4f 52 4d 41 4c 2e 0a 20  ode is NORMAL.. 
1c60: 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
1c70: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 64  StrICmp(zLeft,"d
1c80: 65 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f  efault_synchrono
1c90: 75 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  us")==0 ){.    s
1ca0: 74 61 74 69 63 20 56 64 62 65 4f 70 20 67 65 74  tatic VdbeOp get
1cb0: 53 79 6e 63 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Sync[] = {.     
1cc0: 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65   { OP_ColumnName
1cd0: 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20  ,  0, 0,        
1ce0: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 7d 2c 0a  "synchronous"},.
1cf0: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
1d00: 6f 6f 6b 69 65 2c 20 20 30 2c 20 33 2c 20 20 20  ookie,  0, 3,   
1d10: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
1d20: 20 4f 50 5f 44 75 70 2c 20 20 20 20 20 20 20 20   OP_Dup,        
1d30: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
1d40: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c  ,.      { OP_If,
1d50: 20 20 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20            0, 0, 
1d60: 20 20 20 20 20 20 20 30 7d 2c 20 20 2f 2a 20 33         0},  /* 3
1d70: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52   */.      { OP_R
1d80: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 32  eadCookie,  0, 2
1d90: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
1da0: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
1db0: 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20       0, 0,      
1dc0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
1dd0: 5f 4c 74 2c 20 20 20 20 20 20 20 20 20 20 30 2c  _Lt,          0,
1de0: 20 35 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   5,        0},. 
1df0: 20 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d       { OP_AddImm
1e00: 2c 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20  ,      1, 0,    
1e10: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
1e20: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20  OP_Callback,    
1e30: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 0,        0},
1e40: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74  .      { OP_Halt
1e50: 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20  ,        0, 0,  
1e60: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
1e70: 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20  { OP_AddImm,    
1e80: 20 2d 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30   -1, 0,        0
1e90: 7d 2c 20 20 2f 2a 20 31 30 20 2a 2f 0a 20 20 20  },  /* 10 */.   
1ea0: 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b     { OP_Callback
1eb0: 2c 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20  ,    1, 0,      
1ec0: 20 20 30 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20    0}.    };.    
1ed0: 69 66 28 20 70 52 69 67 68 74 2d 3e 7a 3d 3d 70  if( pRight->z==p
1ee0: 4c 65 66 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 20  Left->z ){.     
1ef0: 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69   int addr = sqli
1f00: 74 65 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  teVdbeAddOpList(
1f10: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74  v, ArraySize(get
1f20: 53 79 6e 63 29 2c 20 67 65 74 53 79 6e 63 29 3b  Sync), getSync);
1f30: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
1f40: 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64  eChangeP2(v, add
1f50: 72 2b 33 2c 20 61 64 64 72 2b 31 30 29 3b 0a 20  r+3, addr+10);. 
1f60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1f70: 69 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 20 20  int addr;.      
1f80: 69 6e 74 20 73 69 7a 65 20 3d 20 64 62 2d 3e 63  int size = db->c
1f90: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20  ache_size;.     
1fa0: 20 69 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69   if( size<0 ) si
1fb0: 7a 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20  ze = -size;.    
1fc0: 20 20 73 71 6c 69 74 65 42 65 67 69 6e 57 72 69    sqliteBeginWri
1fd0: 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72  teOperation(pPar
1fe0: 73 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  se, 0, 0);.     
1ff0: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
2000: 28 76 2c 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  (v, OP_ReadCooki
2010: 65 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20 20  e, 0, 2);.      
2020: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
2030: 76 2c 20 4f 50 5f 44 75 70 2c 20 30 2c 20 30 29  v, OP_Dup, 0, 0)
2040: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
2050: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76  qliteVdbeAddOp(v
2060: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c  , OP_Integer, 0,
2070: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
2080: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
2090: 5f 4e 65 2c 20 30 2c 20 61 64 64 72 2b 33 29 3b  _Ne, 0, addr+3);
20a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
20b0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 41 64 64  eAddOp(v, OP_Add
20c0: 49 6d 6d 2c 20 4d 41 58 5f 50 41 47 45 53 2c 20  Imm, MAX_PAGES, 
20d0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
20e0: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
20f0: 41 62 73 56 61 6c 75 65 2c 20 30 2c 20 30 29 3b  AbsValue, 0, 0);
2100: 0a 20 20 20 20 20 20 64 62 2d 3e 73 61 66 65 74  .      db->safet
2110: 79 5f 6c 65 76 65 6c 20 3d 20 67 65 74 53 61 66  y_level = getSaf
2120: 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74 29  etyLevel(zRight)
2130: 2b 31 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62  +1;.      if( db
2140: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 3d 3d  ->safety_level==
2150: 31 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  1 ){.        sql
2160: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
2170: 4f 50 5f 4e 65 67 61 74 69 76 65 2c 20 30 2c 20  OP_Negative, 0, 
2180: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 69 7a 65  0);.        size
2190: 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20   = -size;.      
21a0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  }.      sqliteVd
21b0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 65  beAddOp(v, OP_Se
21c0: 74 43 6f 6f 6b 69 65 2c 20 30 2c 20 32 29 3b 0a  tCookie, 0, 2);.
21d0: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
21e0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
21f0: 67 65 72 2c 20 64 62 2d 3e 73 61 66 65 74 79 5f  ger, db->safety_
2200: 6c 65 76 65 6c 2c 20 30 29 3b 0a 20 20 20 20 20  level, 0);.     
2210: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
2220: 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  (v, OP_SetCookie
2230: 2c 20 30 2c 20 33 29 3b 0a 20 20 20 20 20 20 73  , 0, 3);.      s
2240: 71 6c 69 74 65 45 6e 64 57 72 69 74 65 4f 70 65  qliteEndWriteOpe
2250: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 29 3b 0a  ration(pParse);.
2260: 20 20 20 20 20 20 64 62 2d 3e 63 61 63 68 65 5f        db->cache_
2270: 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20  size = size;.   
2280: 20 20 20 73 71 6c 69 74 65 42 74 72 65 65 53 65     sqliteBtreeSe
2290: 74 43 61 63 68 65 53 69 7a 65 28 64 62 2d 3e 61  tCacheSize(db->a
22a0: 44 62 5b 30 5d 2e 70 42 74 2c 20 64 62 2d 3e 63  Db[0].pBt, db->c
22b0: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
22c0: 20 20 73 71 6c 69 74 65 42 74 72 65 65 53 65 74    sqliteBtreeSet
22d0: 53 61 66 65 74 79 4c 65 76 65 6c 28 64 62 2d 3e  SafetyLevel(db->
22e0: 61 44 62 5b 30 5d 2e 70 42 74 2c 20 64 62 2d 3e  aDb[0].pBt, db->
22f0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 3b 0a 20  safety_level);. 
2300: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2310: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
2320: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a   synchronous.  *
2330: 2a 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68  *   PRAGMA synch
2340: 72 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f  ronous=OFF|ON|NO
2350: 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20  RMAL|FULL.  **. 
2360: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
2370: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
2380: 65 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f  e of the synchro
2390: 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e  nous flag.  Chan
23a0: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
23b0: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
23c0: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
23d0: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
23e0: 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65   and the.  ** de
23f0: 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c  fault value will
2400: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
2410: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
2420: 61 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20  atabase is.  ** 
2430: 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 69  opened..  */.  i
2440: 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70  f( sqliteStrICmp
2450: 28 7a 4c 65 66 74 2c 22 73 79 6e 63 68 72 6f 6e  (zLeft,"synchron
2460: 6f 75 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ous")==0 ){.    
2470: 73 74 61 74 69 63 20 56 64 62 65 4f 70 20 67 65  static VdbeOp ge
2480: 74 53 79 6e 63 5b 5d 20 3d 20 7b 0a 20 20 20 20  tSync[] = {.    
2490: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d    { OP_ColumnNam
24a0: 65 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20  e,  0, 0,       
24b0: 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 7d 2c   "synchronous"},
24c0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c  .      { OP_Call
24d0: 62 61 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20 20  back,    1, 0,  
24e0: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b        0},.    };
24f0: 0a 20 20 20 20 69 66 28 20 70 52 69 67 68 74 2d  .    if( pRight-
2500: 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29 7b 0a  >z==pLeft->z ){.
2510: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
2520: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
2530: 67 65 72 2c 20 64 62 2d 3e 73 61 66 65 74 79 5f  ger, db->safety_
2540: 6c 65 76 65 6c 2d 31 2c 20 30 29 3b 0a 20 20 20  level-1, 0);.   
2550: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
2560: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
2570: 69 7a 65 28 67 65 74 53 79 6e 63 29 2c 20 67 65  ize(getSync), ge
2580: 74 53 79 6e 63 29 3b 0a 20 20 20 20 7d 65 6c 73  tSync);.    }els
2590: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  e{.      int siz
25a0: 65 20 3d 20 64 62 2d 3e 63 61 63 68 65 5f 73 69  e = db->cache_si
25b0: 7a 65 3b 0a 20 20 20 20 20 20 69 66 28 20 73 69  ze;.      if( si
25c0: 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d 20 2d 73  ze<0 ) size = -s
25d0: 69 7a 65 3b 0a 20 20 20 20 20 20 64 62 2d 3e 73  ize;.      db->s
25e0: 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 67 65  afety_level = ge
25f0: 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69  tSafetyLevel(zRi
2600: 67 68 74 29 2b 31 3b 0a 20 20 20 20 20 20 69 66  ght)+1;.      if
2610: 28 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  ( db->safety_lev
2620: 65 6c 3d 3d 31 20 29 20 73 69 7a 65 20 3d 20 2d  el==1 ) size = -
2630: 73 69 7a 65 3b 0a 20 20 20 20 20 20 64 62 2d 3e  size;.      db->
2640: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
2650: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42  e;.      sqliteB
2660: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
2670: 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c  (db->aDb[0].pBt,
2680: 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29   db->cache_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 53 61 66 65 74 79 4c 65 76 65  reeSetSafetyLeve
26b0: 6c 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74  l(db->aDb[0].pBt
26c0: 2c 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  , db->safety_lev
26d0: 65 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  el);.    }.  }el
26e0: 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  se..  if( sqlite
26f0: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
2700: 74 72 69 67 67 65 72 5f 6f 76 65 72 68 65 61 64  trigger_overhead
2710: 5f 74 65 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20  _test")==0 ){.  
2720: 20 20 69 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e    if( getBoolean
2730: 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20  (zRight) ){.    
2740: 20 20 61 6c 77 61 79 73 5f 63 6f 64 65 5f 74 72    always_code_tr
2750: 69 67 67 65 72 5f 73 65 74 75 70 20 3d 20 31 3b  igger_setup = 1;
2760: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2770: 20 20 61 6c 77 61 79 73 5f 63 6f 64 65 5f 74 72    always_code_tr
2780: 69 67 67 65 72 5f 73 65 74 75 70 20 3d 20 30 3b  igger_setup = 0;
2790: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
27a0: 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49    if( sqliteStrI
27b0: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 76 64 62 65  Cmp(zLeft, "vdbe
27c0: 5f 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20  _trace")==0 ){. 
27d0: 20 20 20 69 66 28 20 67 65 74 42 6f 6f 6c 65 61     if( getBoolea
27e0: 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20  n(zRight) ){.   
27f0: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
2800: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
2810: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2820: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
2830: 7e 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  ~SQLITE_VdbeTrac
2840: 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  e;.    }.  }else
2850: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74  ..  if( sqliteSt
2860: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 66 75  rICmp(zLeft, "fu
2870: 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22  ll_column_names"
2880: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
2890: 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  getBoolean(zRigh
28a0: 74 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  t) ){.      db->
28b0: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
28c0: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20  FullColNames;.  
28d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
28e0: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c  b->flags &= ~SQL
28f0: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
2900: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
2910: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72  .  if( sqliteStr
2920: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 73 68 6f  ICmp(zLeft, "sho
2930: 77 5f 64 61 74 61 74 79 70 65 73 22 29 3d 3d 30  w_datatypes")==0
2940: 20 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74 42   ){.    if( getB
2950: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29 20 29  oolean(zRight) )
2960: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67  {.      db->flag
2970: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 52 65 70 6f  s |= SQLITE_Repo
2980: 72 74 54 79 70 65 73 3b 0a 20 20 20 20 7d 65 6c  rtTypes;.    }el
2990: 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c  se{.      db->fl
29a0: 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 52  ags &= ~SQLITE_R
29b0: 65 70 6f 72 74 54 79 70 65 73 3b 0a 20 20 20 20  eportTypes;.    
29c0: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
29d0: 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a   sqliteStrICmp(z
29e0: 4c 65 66 74 2c 20 22 63 6f 75 6e 74 5f 63 68 61  Left, "count_cha
29f0: 6e 67 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20  nges")==0 ){.   
2a00: 20 69 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28   if( getBoolean(
2a10: 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20  zRight) ){.     
2a20: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
2a30: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 3b 0a  LITE_CountRows;.
2a40: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2a50: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53   db->flags &= ~S
2a60: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 3b  QLITE_CountRows;
2a70: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
2a80: 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49    if( sqliteStrI
2a90: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 65 6d 70 74  Cmp(zLeft, "empt
2aa0: 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63  y_result_callbac
2ab0: 6b 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  ks")==0 ){.    i
2ac0: 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  f( getBoolean(zR
2ad0: 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20 64  ight) ){.      d
2ae0: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
2af0: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 3b  TE_NullCallback;
2b00: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2b10: 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e    db->flags &= ~
2b20: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
2b30: 61 63 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ack;.    }.  }el
2b40: 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  se..  if( sqlite
2b50: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
2b60: 74 61 62 6c 65 5f 69 6e 66 6f 22 29 3d 3d 30 20  table_info")==0 
2b70: 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  ){.    Table *pT
2b80: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
2b90: 71 6c 69 74 65 46 69 6e 64 54 61 62 6c 65 28 64  qliteFindTable(d
2ba0: 62 2c 20 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20  b, zRight, 0);. 
2bb0: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
2bc0: 20 20 20 20 20 73 74 61 74 69 63 20 56 64 62 65       static Vdbe
2bd0: 4f 70 20 74 61 62 6c 65 49 6e 66 6f 50 72 65 66  Op tableInfoPref
2be0: 61 63 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ace[] = {.      
2bf0: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d    { OP_ColumnNam
2c00: 65 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20  e,  0, 0,       
2c10: 22 63 69 64 22 7d 2c 0a 20 20 20 20 20 20 20 20  "cid"},.        
2c20: 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  { OP_ColumnName,
2c30: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 22 6e    1, 0,       "n
2c40: 61 6d 65 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b  ame"},.        {
2c50: 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20   OP_ColumnName, 
2c60: 20 32 2c 20 30 2c 20 20 20 20 20 20 20 22 74 79   2, 0,       "ty
2c70: 70 65 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20  pe"},.        { 
2c80: 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20  OP_ColumnName,  
2c90: 33 2c 20 30 2c 20 20 20 20 20 20 20 22 6e 6f 74  3, 0,       "not
2ca0: 6e 75 6c 6c 22 7d 2c 0a 20 20 20 20 20 20 20 20  null"},.        
2cb0: 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  { OP_ColumnName,
2cc0: 20 20 34 2c 20 30 2c 20 20 20 20 20 20 20 22 64    4, 0,       "d
2cd0: 66 6c 74 5f 76 61 6c 75 65 22 7d 2c 0a 20 20 20  flt_value"},.   
2ce0: 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20     };.      int 
2cf0: 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  i;.      sqliteV
2d00: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
2d10: 41 72 72 61 79 53 69 7a 65 28 74 61 62 6c 65 49  ArraySize(tableI
2d20: 6e 66 6f 50 72 65 66 61 63 65 29 2c 20 74 61 62  nfoPreface), tab
2d30: 6c 65 49 6e 66 6f 50 72 65 66 61 63 65 29 3b 0a  leInfoPreface);.
2d40: 20 20 20 20 20 20 73 71 6c 69 74 65 56 69 65 77        sqliteView
2d50: 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70  GetColumnNames(p
2d60: 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a 20 20  Parse, pTab);.  
2d70: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
2d80: 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  Tab->nCol; i++){
2d90: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56  .        sqliteV
2da0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49  dbeAddOp(v, OP_I
2db0: 6e 74 65 67 65 72 2c 20 69 2c 20 30 29 3b 0a 20  nteger, i, 0);. 
2dc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
2dd0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 74 72  eAddOp(v, OP_Str
2de0: 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ing, 0, 0);.    
2df0: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 43 68      sqliteVdbeCh
2e00: 61 6e 67 65 50 33 28 76 2c 20 2d 31 2c 20 70 54  angeP3(v, -1, pT
2e10: 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 4e 61 6d  ab->aCol[i].zNam
2e20: 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  e, P3_STATIC);. 
2e30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
2e40: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 74 72  eAddOp(v, OP_Str
2e50: 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ing, 0, 0);.    
2e60: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 43 68      sqliteVdbeCh
2e70: 61 6e 67 65 50 33 28 76 2c 20 2d 31 2c 20 0a 20  angeP3(v, -1, . 
2e80: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
2e90: 61 43 6f 6c 5b 69 5d 2e 7a 54 79 70 65 20 3f 20  aCol[i].zType ? 
2ea0: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 54  pTab->aCol[i].zT
2eb0: 79 70 65 20 3a 20 22 6e 75 6d 65 72 69 63 22 2c  ype : "numeric",
2ec0: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
2ed0: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
2ee0: 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67  ddOp(v, OP_Integ
2ef0: 65 72 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69  er, pTab->aCol[i
2f00: 5d 2e 6e 6f 74 4e 75 6c 6c 2c 20 30 29 3b 0a 20  ].notNull, 0);. 
2f10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
2f20: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 74 72  eAddOp(v, OP_Str
2f30: 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ing, 0, 0);.    
2f40: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 43 68      sqliteVdbeCh
2f50: 61 6e 67 65 50 33 28 76 2c 20 2d 31 2c 20 70 54  angeP3(v, -1, pT
2f60: 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 44 66 6c  ab->aCol[i].zDfl
2f70: 74 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  t, P3_STATIC);. 
2f80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
2f90: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c  eAddOp(v, OP_Cal
2fa0: 6c 62 61 63 6b 2c 20 35 2c 20 30 29 3b 0a 20 20  lback, 5, 0);.  
2fb0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
2fc0: 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  lse..  if( sqlit
2fd0: 65 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  eStrICmp(zLeft, 
2fe0: 22 69 6e 64 65 78 5f 69 6e 66 6f 22 29 3d 3d 30  "index_info")==0
2ff0: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
3000: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
3010: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
3020: 20 73 71 6c 69 74 65 46 69 6e 64 49 6e 64 65 78   sqliteFindIndex
3030: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 30 29 3b  (db, zRight, 0);
3040: 0a 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b  .    if( pIdx ){
3050: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 56 64  .      static Vd
3060: 62 65 4f 70 20 74 61 62 6c 65 49 6e 66 6f 50 72  beOp tableInfoPr
3070: 65 66 61 63 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eface[] = {.    
3080: 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e      { OP_ColumnN
3090: 61 6d 65 2c 20 20 30 2c 20 30 2c 20 20 20 20 20  ame,  0, 0,     
30a0: 20 20 22 73 65 71 6e 6f 22 7d 2c 0a 20 20 20 20    "seqno"},.    
30b0: 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e      { OP_ColumnN
30c0: 61 6d 65 2c 20 20 31 2c 20 30 2c 20 20 20 20 20  ame,  1, 0,     
30d0: 20 20 22 63 69 64 22 7d 2c 0a 20 20 20 20 20 20    "cid"},.      
30e0: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d    { OP_ColumnNam
30f0: 65 2c 20 20 32 2c 20 30 2c 20 20 20 20 20 20 20  e,  2, 0,       
3100: 22 6e 61 6d 65 22 7d 2c 0a 20 20 20 20 20 20 7d  "name"},.      }
3110: 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  ;.      int i;. 
3120: 20 20 20 20 20 70 54 61 62 20 3d 20 70 49 64 78       pTab = pIdx
3130: 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20  ->pTable;.      
3140: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c  sqliteVdbeAddOpL
3150: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
3160: 28 74 61 62 6c 65 49 6e 66 6f 50 72 65 66 61 63  (tableInfoPrefac
3170: 65 29 2c 20 74 61 62 6c 65 49 6e 66 6f 50 72 65  e), tableInfoPre
3180: 66 61 63 65 29 3b 0a 20 20 20 20 20 20 66 6f 72  face);.      for
3190: 28 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e 6e 43  (i=0; i<pIdx->nC
31a0: 6f 6c 75 6d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  olumn; i++){.   
31b0: 20 20 20 20 20 69 6e 74 20 63 6e 75 6d 20 3d 20       int cnum = 
31c0: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69  pIdx->aiColumn[i
31d0: 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ];.        sqlit
31e0: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
31f0: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 30 29 3b  _Integer, i, 0);
3200: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56  .        sqliteV
3210: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49  dbeAddOp(v, OP_I
3220: 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20 30 29  nteger, cnum, 0)
3230: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
3240: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
3250: 53 74 72 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20  String, 0, 0);. 
3260: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
3270: 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29  Tab->nCol>cnum )
3280: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
3290: 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20  VdbeChangeP3(v, 
32a0: 2d 31 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63  -1, pTab->aCol[c
32b0: 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 50 33 5f 53  num].zName, P3_S
32c0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
32d0: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
32e0: 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20  v, OP_Callback, 
32f0: 33 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  3, 0);.      }. 
3300: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
3310: 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d  if( sqliteStrICm
3320: 70 28 7a 4c 65 66 74 2c 20 22 69 6e 64 65 78 5f  p(zLeft, "index_
3330: 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  list")==0 ){.   
3340: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
3350: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
3360: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
3370: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
3380: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 69 66  ight, 0);.    if
3390: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
33a0: 76 20 3d 20 73 71 6c 69 74 65 47 65 74 56 64 62  v = sqliteGetVdb
33b0: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
33c0: 20 70 49 64 78 20 3d 20 70 54 61 62 2d 3e 70 49   pIdx = pTab->pI
33d0: 6e 64 65 78 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ndex;.    }.    
33e0: 69 66 28 20 70 54 61 62 20 26 26 20 70 49 64 78  if( pTab && pIdx
33f0: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 20   ){.      int i 
3400: 3d 20 30 3b 20 0a 20 20 20 20 20 20 73 74 61 74  = 0; .      stat
3410: 69 63 20 56 64 62 65 4f 70 20 69 6e 64 65 78 4c  ic VdbeOp indexL
3420: 69 73 74 50 72 65 66 61 63 65 5b 5d 20 3d 20 7b  istPreface[] = {
3430: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f  .        { OP_Co
3440: 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30 2c  lumnName,  0, 0,
3450: 20 20 20 20 20 20 20 22 73 65 71 22 7d 2c 0a 20         "seq"},. 
3460: 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75         { OP_Colu
3470: 6d 6e 4e 61 6d 65 2c 20 20 31 2c 20 30 2c 20 20  mnName,  1, 0,  
3480: 20 20 20 20 20 22 6e 61 6d 65 22 7d 2c 0a 20 20       "name"},.  
3490: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
34a0: 6e 4e 61 6d 65 2c 20 20 32 2c 20 30 2c 20 20 20  nName,  2, 0,   
34b0: 20 20 20 20 22 75 6e 69 71 75 65 22 7d 2c 0a 20      "unique"},. 
34c0: 20 20 20 20 20 7d 3b 0a 0a 20 20 20 20 20 20 73       };..      s
34d0: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69  qliteVdbeAddOpLi
34e0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
34f0: 69 6e 64 65 78 4c 69 73 74 50 72 65 66 61 63 65  indexListPreface
3500: 29 2c 20 69 6e 64 65 78 4c 69 73 74 50 72 65 66  ), indexListPref
3510: 61 63 65 29 3b 0a 20 20 20 20 20 20 77 68 69 6c  ace);.      whil
3520: 65 28 70 49 64 78 29 7b 0a 20 20 20 20 20 20 20  e(pIdx){.       
3530: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
3540: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
3550: 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  i, 0);.        s
3560: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76  qliteVdbeAddOp(v
3570: 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20  , OP_String, 0, 
3580: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
3590: 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28 76  teVdbeChangeP3(v
35a0: 2c 20 2d 31 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  , -1, pIdx->zNam
35b0: 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  e, P3_STATIC);. 
35c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
35d0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
35e0: 65 67 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45 72  eger, pIdx->onEr
35f0: 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 30 29  ror!=OE_None, 0)
3600: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
3610: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
3620: 43 61 6c 6c 62 61 63 6b 2c 20 33 2c 20 30 29 3b  Callback, 3, 0);
3630: 0a 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20  .        ++i;.  
3640: 20 20 20 20 20 20 70 49 64 78 20 3d 20 70 49 64        pIdx = pId
3650: 78 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  x->pNext;.      
3660: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
3670: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72  .  if( sqliteStr
3680: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 64 61 74  ICmp(zLeft, "dat
3690: 61 62 61 73 65 5f 6c 69 73 74 22 29 3d 3d 30 20  abase_list")==0 
36a0: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
36b0: 20 20 73 74 61 74 69 63 20 56 64 62 65 4f 70 20    static VdbeOp 
36c0: 69 6e 64 65 78 4c 69 73 74 50 72 65 66 61 63 65  indexListPreface
36d0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
36e0: 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30  P_ColumnName,  0
36f0: 2c 20 30 2c 20 20 20 20 20 20 20 22 73 65 71 22  , 0,       "seq"
3700: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f  },.      { OP_Co
3710: 6c 75 6d 6e 4e 61 6d 65 2c 20 20 31 2c 20 30 2c  lumnName,  1, 0,
3720: 20 20 20 20 20 20 20 22 6e 61 6d 65 22 7d 2c 0a         "name"},.
3730: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
3740: 6e 4e 61 6d 65 2c 20 20 32 2c 20 30 2c 20 20 20  nName,  2, 0,   
3750: 20 20 20 20 22 66 69 6c 65 22 7d 2c 0a 20 20 20      "file"},.   
3760: 20 7d 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65 56   };..    sqliteV
3770: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
3780: 41 72 72 61 79 53 69 7a 65 28 69 6e 64 65 78 4c  ArraySize(indexL
3790: 69 73 74 50 72 65 66 61 63 65 29 2c 20 69 6e 64  istPreface), ind
37a0: 65 78 4c 69 73 74 50 72 65 66 61 63 65 29 3b 0a  exListPreface);.
37b0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
37c0: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
37d0: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
37e0: 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74  i].pBt==0 ) cont
37f0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65  inue;.      asse
3800: 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  rt( db->aDb[i].z
3810: 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20  Name!=0 );.     
3820: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
3830: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
3840: 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  i, 0);.      sql
3850: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
3860: 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 29  OP_String, 0, 0)
3870: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  ;.      sqliteVd
3880: 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 2d 31  beChangeP3(v, -1
3890: 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
38a0: 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  me, P3_STATIC);.
38b0: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
38c0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 74 72 69  AddOp(v, OP_Stri
38d0: 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  ng, 0, 0);.     
38e0: 20 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67   sqliteVdbeChang
38f0: 65 50 33 28 76 2c 20 2d 31 2c 20 73 71 6c 69 74  eP3(v, -1, sqlit
3900: 65 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d  eBtreeGetFilenam
3910: 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  e(db->aDb[i].pBt
3920: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 50 33  ),.           P3
3930: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
3940: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
3950: 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20  v, OP_Callback, 
3960: 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  3, 0);.    }.  }
3970: 65 6c 73 65 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  else.  /*.  **  
3980: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
3990: 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  re.  **   PRAGMA
39a0: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64   temp_store = "d
39b0: 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22  efault"|"memory"
39c0: 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a  |"file".  **.  *
39d0: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
39e0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
39f0: 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72  of the temp_stor
3a00: 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  e flag.  Changin
3a10: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
3a20: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
3a30: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
3a40: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
3a50: 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  d the default.  
3a60: 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  ** value will be
3a70: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
3a80: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
3a90: 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a  base is opened..
3aa0: 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74    **.  ** Note t
3ab0: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
3ac0: 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61  le for the libra
3ad0: 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ry compile-time 
3ae0: 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20  options to.  ** 
3af0: 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65  override this se
3b00: 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 69 66 28  tting.  */.  if(
3b10: 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a   sqliteStrICmp(z
3b20: 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74 6f 72  Left, "temp_stor
3b30: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74  e")==0 ){.    st
3b40: 61 74 69 63 20 56 64 62 65 4f 70 20 67 65 74 54  atic VdbeOp getT
3b50: 6d 70 44 62 4c 6f 63 5b 5d 20 3d 20 7b 0a 20 20  mpDbLoc[] = {.  
3b60: 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e      { OP_ColumnN
3b70: 61 6d 65 2c 20 20 30 2c 20 30 2c 20 20 20 20 20  ame,  0, 0,     
3b80: 20 20 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 7d     "temp_store"}
3b90: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c  ,.      { OP_Cal
3ba0: 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20  lback,    1, 0, 
3bb0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d         0},.    }
3bc0: 3b 0a 20 20 20 20 69 66 28 20 70 52 69 67 68 74  ;.    if( pRight
3bd0: 2d 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29 7b  ->z==pLeft->z ){
3be0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
3bf0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
3c00: 65 67 65 72 2c 20 64 62 2d 3e 74 65 6d 70 5f 73  eger, db->temp_s
3c10: 74 6f 72 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  tore, 0);.      
3c20: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c  sqliteVdbeAddOpL
3c30: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
3c40: 28 67 65 74 54 6d 70 44 62 4c 6f 63 29 2c 20 67  (getTmpDbLoc), g
3c50: 65 74 54 6d 70 44 62 4c 6f 63 29 3b 0a 20 20 20  etTmpDbLoc);.   
3c60: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
3c70: 20 28 26 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42   (&db->aDb[1].pB
3c80: 74 20 21 3d 20 30 29 20 7b 0a 09 73 71 6c 69 74  t != 0) {..sqlit
3c90: 65 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  eErrorMsg(pParse
3ca0: 2c 20 22 54 68 65 20 74 65 6d 70 6f 72 61 72 79  , "The temporary
3cb0: 20 64 61 74 61 62 61 73 65 20 61 6c 72 65 61 64   database alread
3cc0: 79 20 65 78 69 73 74 73 20 2d 20 22 0a 20 20 20  y exists - ".   
3cd0: 20 20 20 20 20 20 20 22 69 74 73 20 6c 6f 63 61         "its loca
3ce0: 74 69 6f 6e 20 63 61 6e 6e 6f 74 20 6e 6f 77 20  tion cannot now 
3cf0: 62 65 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  be changed");.  
3d00: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 64 62      } else {..db
3d10: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 67  ->temp_store = g
3d20: 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 52 69 67  etTempStore(zRig
3d30: 68 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ht);.      }.   
3d40: 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a   }.  }else..  /*
3d50: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64  .  **   PRAGMA d
3d60: 65 66 61 75 6c 74 5f 74 65 6d 70 5f 73 74 6f 72  efault_temp_stor
3d70: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
3d80: 64 65 66 61 75 6c 74 5f 74 65 6d 70 5f 73 74 6f  default_temp_sto
3d90: 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22 7c 22  re = "default"|"
3da0: 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a 20  memory"|"file". 
3db0: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
3dc0: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
3dd0: 20 6f 66 20 74 68 65 20 70 65 72 73 69 73 74 65   of the persiste
3de0: 6e 74 20 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c  nt temp_store fl
3df0: 61 67 20 28 61 73 0a 20 20 2a 2a 20 77 65 6c 6c  ag (as.  ** well
3e00: 20 61 73 20 74 68 65 20 76 61 6c 75 65 20 63 75   as the value cu
3e10: 72 72 65 6e 74 6c 79 20 69 6e 20 66 6f 72 63 65  rrently in force
3e20: 29 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74  )..  **.  ** Not
3e30: 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73  e that it is pos
3e40: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69  sible for the li
3e50: 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69  brary compile-ti
3e60: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20  me options to.  
3e70: 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ** override this
3e80: 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20   setting.  */.  
3e90: 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d  if( sqliteStrICm
3ea0: 70 28 7a 4c 65 66 74 2c 20 22 64 65 66 61 75 6c  p(zLeft, "defaul
3eb0: 74 5f 74 65 6d 70 5f 73 74 6f 72 65 22 29 3d 3d  t_temp_store")==
3ec0: 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20  0 ){.    static 
3ed0: 56 64 62 65 4f 70 20 67 65 74 54 6d 70 44 62 4c  VdbeOp getTmpDbL
3ee0: 6f 63 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  oc[] = {.      {
3ef0: 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20   OP_ColumnName, 
3f00: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 22 74   0, 0,        "t
3f10: 65 6d 70 5f 73 74 6f 72 65 22 7d 2c 0a 20 20 20  emp_store"},.   
3f20: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
3f30: 69 65 2c 20 20 30 2c 20 35 2c 20 20 20 20 20 20  ie,  0, 5,      
3f40: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
3f50: 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c  _Callback,    1,
3f60: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 7d 3b 0a   0,        0}};.
3f70: 20 20 20 20 69 66 28 20 70 52 69 67 68 74 2d 3e      if( pRight->
3f80: 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29 7b 0a 20  z==pLeft->z ){. 
3f90: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
3fa0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
3fb0: 79 53 69 7a 65 28 67 65 74 54 6d 70 44 62 4c 6f  ySize(getTmpDbLo
3fc0: 63 29 2c 20 67 65 74 54 6d 70 44 62 4c 6f 63 29  c), getTmpDbLoc)
3fd0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3fe0: 20 20 20 69 66 20 28 26 64 62 2d 3e 61 44 62 5b     if (&db->aDb[
3ff0: 31 5d 2e 70 42 74 20 21 3d 20 30 29 20 7b 0a 09  1].pBt != 0) {..
4000: 73 71 6c 69 74 65 45 72 72 6f 72 4d 73 67 28 70  sqliteErrorMsg(p
4010: 50 61 72 73 65 2c 20 22 54 68 65 20 74 65 6d 70  Parse, "The temp
4020: 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 61  orary database a
4030: 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 2d 20  lready exists - 
4040: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 69  ".            "i
4050: 74 73 20 6c 6f 63 61 74 69 6f 6e 20 63 61 6e 6e  ts location cann
4060: 6f 74 20 6e 6f 77 20 62 65 20 63 68 61 6e 67 65  ot now be change
4070: 64 22 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  d");.      } els
4080: 65 20 7b 0a 09 73 71 6c 69 74 65 42 65 67 69 6e  e {..sqliteBegin
4090: 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70  WriteOperation(p
40a0: 50 61 72 73 65 2c 20 30 2c 20 30 29 3b 0a 09 64  Parse, 0, 0);..d
40b0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  b->temp_store = 
40c0: 67 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 52 69  getTempStore(zRi
40d0: 67 68 74 29 3b 0a 09 73 71 6c 69 74 65 56 64 62  ght);..sqliteVdb
40e0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
40f0: 65 67 65 72 2c 20 64 62 2d 3e 74 65 6d 70 5f 73  eger, db->temp_s
4100: 74 6f 72 65 2c 20 30 29 3b 0a 09 73 71 6c 69 74  tore, 0);..sqlit
4110: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
4120: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 30 2c 20 35  _SetCookie, 0, 5
4130: 29 3b 0a 09 73 71 6c 69 74 65 45 6e 64 57 72 69  );..sqliteEndWri
4140: 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72  teOperation(pPar
4150: 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  se);.      }.   
4160: 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e   }.  }else..#ifn
4170: 64 65 66 20 4e 44 45 42 55 47 0a 20 20 69 66 28  def NDEBUG.  if(
4180: 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a   sqliteStrICmp(z
4190: 4c 65 66 74 2c 20 22 70 61 72 73 65 72 5f 74 72  Left, "parser_tr
41a0: 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ace")==0 ){.    
41b0: 65 78 74 65 72 6e 20 76 6f 69 64 20 73 71 6c 69  extern void sqli
41c0: 74 65 50 61 72 73 65 72 54 72 61 63 65 28 46 49  teParserTrace(FI
41d0: 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 20 20  LE*, char *);.  
41e0: 20 20 69 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e    if( getBoolean
41f0: 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20  (zRight) ){.    
4200: 20 20 73 71 6c 69 74 65 50 61 72 73 65 72 54 72    sqliteParserTr
4210: 61 63 65 28 73 74 64 6f 75 74 2c 20 22 70 61 72  ace(stdout, "par
4220: 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 7d 65 6c  ser: ");.    }el
4230: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
4240: 50 61 72 73 65 72 54 72 61 63 65 28 30 2c 20 30  ParserTrace(0, 0
4250: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
4260: 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 73  .#endif..  if( s
4270: 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c 65  qliteStrICmp(zLe
4280: 66 74 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63  ft, "integrity_c
4290: 68 65 63 6b 22 29 3d 3d 30 20 29 7b 0a 20 20 20  heck")==0 ){.   
42a0: 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 3b   int i, j, addr;
42b0: 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20 74 68  ..    /* Code th
42c0: 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 74  at initializes t
42d0: 68 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  he integrity che
42e0: 63 6b 20 70 72 6f 67 72 61 6d 2e 20 20 53 65 74  ck program.  Set
42f0: 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f   the.    ** erro
4300: 72 20 6d 65 73 73 61 67 65 20 74 6f 20 61 6e 20  r message to an 
4310: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 61 6e 64  empty string and
4320: 20 72 65 67 69 73 74 65 72 20 74 68 65 20 63 61   register the ca
4330: 6c 6c 62 61 63 6b 0a 20 20 20 20 2a 2a 20 63 6f  llback.    ** co
4340: 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 20 20 20 20 2a  lumn name..    *
4350: 2f 0a 20 20 20 20 73 74 61 74 69 63 20 56 64 62  /.    static Vdb
4360: 65 4f 70 20 69 6e 69 74 43 6f 64 65 5b 5d 20 3d  eOp initCode[] =
4370: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74   {.      { OP_St
4380: 72 69 6e 67 2c 20 20 20 20 20 20 30 2c 20 30 2c  ring,      0, 0,
4390: 20 20 20 20 20 20 20 20 22 22 7d 2c 0a 20 20 20          ""},.   
43a0: 20 20 20 7b 20 4f 50 5f 4d 65 6d 53 74 6f 72 65     { OP_MemStore
43b0: 2c 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20  ,    0, 1,      
43c0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
43d0: 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c  _ColumnName,  0,
43e0: 20 30 2c 20 20 20 20 20 20 20 20 22 69 6e 74 65   0,        "inte
43f0: 67 72 69 74 79 5f 63 68 65 63 6b 22 7d 2c 0a 20  grity_check"},. 
4400: 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f     };..    /* Co
4410: 64 65 20 74 6f 20 64 6f 20 61 6e 20 42 54 72 65  de to do an BTre
4420: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
4430: 6b 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 64 61  k on a single da
4440: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20  tabase file..   
4450: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 56   */.    static V
4460: 64 62 65 4f 70 20 63 68 65 63 6b 44 62 5b 5d 20  dbeOp checkDb[] 
4470: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53  = {.      { OP_S
4480: 65 74 49 6e 73 65 72 74 2c 20 20 20 30 2c 20 30  etInsert,   0, 0
4490: 2c 20 20 20 20 20 20 20 20 22 32 22 7d 2c 0a 20  ,        "2"},. 
44a0: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
44b0: 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20  r,     0, 0,    
44c0: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20      0},    /* 1 
44d0: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4f 70  */.      { OP_Op
44e0: 65 6e 52 65 61 64 2c 20 20 20 20 30 2c 20 32 2c  enRead,    0, 2,
44f0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
4500: 20 20 7b 20 4f 50 5f 52 65 77 69 6e 64 2c 20 20    { OP_Rewind,  
4510: 20 20 20 20 30 2c 20 37 2c 20 20 20 20 20 20 20      0, 7,       
4520: 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a   0},    /* 3 */.
4530: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
4540: 6e 2c 20 20 20 20 20 20 30 2c 20 33 2c 20 20 20  n,      0, 3,   
4550: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34       0},    /* 4
4560: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53   */.      { OP_S
4570: 65 74 49 6e 73 65 72 74 2c 20 20 20 30 2c 20 30  etInsert,   0, 0
4580: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
4590: 20 20 20 7b 20 4f 50 5f 4e 65 78 74 2c 20 20 20     { OP_Next,   
45a0: 20 20 20 20 20 30 2c 20 34 2c 20 20 20 20 20 20       0, 4,      
45b0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 36 20 2a 2f    0},    /* 6 */
45c0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65  .      { OP_Inte
45d0: 67 72 69 74 79 43 6b 2c 20 30 2c 20 30 2c 20 20  grityCk, 0, 0,  
45e0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
45f0: 37 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  7 */.      { OP_
4600: 44 75 70 2c 20 20 20 20 20 20 20 20 20 30 2c 20  Dup,         0, 
4610: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  1,        0},.  
4620: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c      { OP_String,
4630: 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20        0, 0,     
4640: 20 20 20 22 6f 6b 22 7d 2c 0a 20 20 20 20 20 20     "ok"},.      
4650: 7b 20 4f 50 5f 53 74 72 45 71 2c 20 20 20 20 20  { OP_StrEq,     
4660: 20 20 30 2c 20 31 32 2c 20 20 20 20 20 20 20 30    0, 12,       0
4670: 7d 2c 20 20 20 20 2f 2a 20 31 30 20 2a 2f 0a 20  },    /* 10 */. 
4680: 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f 61       { OP_MemLoa
4690: 64 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20  d,     0, 0,    
46a0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
46b0: 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 20 20 20  OP_String,      
46c0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 22 2a 2a  0, 0,        "**
46d0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 22 7d  * in database "}
46e0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72  ,.      { OP_Str
46f0: 69 6e 67 2c 20 20 20 20 20 20 30 2c 20 30 2c 20  ing,      0, 0, 
4700: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
4710: 20 31 33 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f   13 */.      { O
4720: 50 5f 53 74 72 69 6e 67 2c 20 20 20 20 20 20 30  P_String,      0
4730: 2c 20 30 2c 20 20 20 20 20 20 20 20 22 20 2a 2a  , 0,        " **
4740: 2a 5c 6e 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f  *\n"},.      { O
4750: 50 5f 50 75 6c 6c 2c 20 20 20 20 20 20 20 20 34  P_Pull,        4
4760: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
4770: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61        { OP_Conca
4780: 74 2c 20 20 20 20 20 20 35 2c 20 31 2c 20 20 20  t,      5, 1,   
4790: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
47a0: 20 4f 50 5f 4d 65 6d 53 74 6f 72 65 2c 20 20 20   OP_MemStore,   
47b0: 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   0, 1,        0}
47c0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
47d0: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 30 2c 20  eger,     0, 0, 
47e0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
47f0: 20 7b 20 4f 50 5f 50 6f 70 2c 20 20 20 20 20 20   { OP_Pop,      
4800: 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20     1, 0,        
4810: 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20  0},.    };..    
4820: 2f 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70 70  /* Code that app
4830: 65 61 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  ears at the end 
4840: 6f 66 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  of the integrity
4850: 20 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65   check.  If no e
4860: 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73  rror.    ** mess
4870: 61 67 65 73 20 68 61 76 65 20 62 65 65 6e 20 67  ages have been g
4880: 65 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74  enerated, output
4890: 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20   OK.  Otherwise 
48a0: 6f 75 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a  output the.    *
48b0: 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a  * error message.
48c0: 20 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69      */.    stati
48d0: 63 20 56 64 62 65 4f 70 20 65 6e 64 43 6f 64 65  c VdbeOp endCode
48e0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
48f0: 50 5f 4d 65 6d 4c 6f 61 64 2c 20 20 20 20 20 30  P_MemLoad,     0
4900: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
4910: 20 20 20 20 20 20 7b 20 4f 50 5f 44 75 70 2c 20        { OP_Dup, 
4920: 20 20 20 20 20 20 20 20 30 2c 20 31 2c 20 20 20          0, 1,   
4930: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
4940: 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 20 20   OP_String,     
4950: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 22 22   0, 0,        ""
4960: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74  },.      { OP_St
4970: 72 4e 65 2c 20 20 20 20 20 20 20 30 2c 20 30 2c  rNe,       0, 0,
4980: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
4990: 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 3 */.      { O
49a0: 50 5f 50 6f 70 2c 20 20 20 20 20 20 20 20 20 31  P_Pop,         1
49b0: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
49c0: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
49d0: 67 2c 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20  g,      0, 0,   
49e0: 20 20 20 20 20 22 6f 6b 22 7d 2c 0a 20 20 20 20       "ok"},.    
49f0: 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c    { OP_Callback,
4a00: 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20      1, 0,       
4a10: 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20   0},.    };..   
4a20: 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74   /* Initialize t
4a30: 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20  he VDBE program 
4a40: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 56 64 62  */.    sqliteVdb
4a50: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
4a60: 72 61 79 53 69 7a 65 28 69 6e 69 74 43 6f 64 65  raySize(initCode
4a70: 29 2c 20 69 6e 69 74 43 6f 64 65 29 3b 0a 0a 20  ), initCode);.. 
4a80: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
4a90: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65  grity check on e
4aa0: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
4ab0: 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30  e */.    for(i=0
4ac0: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
4ad0: 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65  ){.      HashEle
4ae0: 6d 20 2a 78 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  m *x;..      /* 
4af0: 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20  Do an integrity 
4b00: 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54  check of the B-T
4b10: 72 65 65 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ree.      */.   
4b20: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
4b30: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
4b40: 20 41 72 72 61 79 53 69 7a 65 28 63 68 65 63 6b   ArraySize(check
4b50: 44 62 29 2c 20 63 68 65 63 6b 44 62 29 3b 0a 20  Db), checkDb);. 
4b60: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 43       sqliteVdbeC
4b70: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
4b80: 31 2c 20 69 29 3b 0a 20 20 20 20 20 20 73 71 6c  1, i);.      sql
4b90: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 32 28  iteVdbeChangeP2(
4ba0: 76 2c 20 61 64 64 72 2b 33 2c 20 61 64 64 72 2b  v, addr+3, addr+
4bb0: 37 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  7);.      sqlite
4bc0: 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20  VdbeChangeP2(v, 
4bd0: 61 64 64 72 2b 36 2c 20 61 64 64 72 2b 34 29 3b  addr+6, addr+4);
4be0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
4bf0: 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64  eChangeP2(v, add
4c00: 72 2b 37 2c 20 69 29 3b 0a 20 20 20 20 20 20 73  r+7, i);.      s
4c10: 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65 50  qliteVdbeChangeP
4c20: 32 28 76 2c 20 61 64 64 72 2b 31 30 2c 20 61 64  2(v, addr+10, ad
4c30: 64 72 2b 41 72 72 61 79 53 69 7a 65 28 63 68 65  dr+ArraySize(che
4c40: 63 6b 44 62 29 2d 31 29 3b 0a 20 20 20 20 20 20  ckDb)-1);.      
4c50: 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65  sqliteVdbeChange
4c60: 50 33 28 76 2c 20 61 64 64 72 2b 31 33 2c 20 64  P3(v, addr+13, d
4c70: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
4c80: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20   P3_STATIC);..  
4c90: 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
4ca0: 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73   all the indices
4cb0: 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64   are constructed
4cc0: 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20   correctly..    
4cd0: 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
4ce0: 65 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  eCodeVerifySchem
4cf0: 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20 20  a(pParse, i);.  
4d00: 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65      for(x=sqlite
4d10: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
4d20: 44 62 5b 69 5d 2e 74 62 6c 48 61 73 68 29 3b 20  Db[i].tblHash); 
4d30: 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e  x; x=sqliteHashN
4d40: 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20  ext(x)){.       
4d50: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
4d60: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29  qliteHashData(x)
4d70: 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
4d80: 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69  *pIdx;.        i
4d90: 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 0a 20 20 20  nt loopTop;..   
4da0: 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70       if( pTab->p
4db0: 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69  Index==0 ) conti
4dc0: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  nue;.        sql
4dd0: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
4de0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 30  OP_Integer, i, 0
4df0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
4e00: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
4e10: 5f 4f 70 65 6e 52 65 61 64 2c 20 31 2c 20 70 54  _OpenRead, 1, pT
4e20: 61 62 2d 3e 74 6e 75 6d 29 3b 0a 20 20 20 20 20  ab->tnum);.     
4e30: 20 20 20 73 71 6c 69 74 65 56 64 62 65 43 68 61     sqliteVdbeCha
4e40: 6e 67 65 50 33 28 76 2c 20 2d 31 2c 20 70 54 61  ngeP3(v, -1, pTa
4e50: 62 2d 3e 7a 4e 61 6d 65 2c 20 50 33 5f 53 54 41  b->zName, P3_STA
4e60: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  TIC);.        fo
4e70: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
4e80: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
4e90: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
4ea0: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
4eb0: 20 20 69 66 28 20 70 49 64 78 2d 3e 74 6e 75 6d    if( pIdx->tnum
4ec0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
4ed0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
4ee0: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
4ef0: 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 69  Integer, pIdx->i
4f00: 44 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  Db, 0);.        
4f10: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
4f20: 70 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  p(v, OP_OpenRead
4f30: 2c 20 6a 2b 32 2c 20 70 49 64 78 2d 3e 74 6e 75  , j+2, pIdx->tnu
4f40: 6d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  m);.          sq
4f50: 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 33  liteVdbeChangeP3
4f60: 28 76 2c 20 2d 31 2c 20 70 49 64 78 2d 3e 7a 4e  (v, -1, pIdx->zN
4f70: 61 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  ame, P3_STATIC);
4f80: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4f90: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
4fa0: 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  Op(v, OP_Integer
4fb0: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
4fc0: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
4fd0: 28 76 2c 20 4f 50 5f 4d 65 6d 53 74 6f 72 65 2c  (v, OP_MemStore,
4fe0: 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   1, 1);.        
4ff0: 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65  loopTop = sqlite
5000: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
5010: 52 65 77 69 6e 64 2c 20 31 2c 20 30 29 3b 0a 20  Rewind, 1, 0);. 
5020: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
5030: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4d 65 6d  eAddOp(v, OP_Mem
5040: 49 6e 63 72 2c 20 31 2c 20 30 29 3b 0a 20 20 20  Incr, 1, 0);.   
5050: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
5060: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
5070: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
5080: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
5090: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b 2c 20           int k, 
50a0: 6a 6d 70 32 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp2;.          
50b0: 73 74 61 74 69 63 20 56 64 62 65 4f 70 20 69 64  static VdbeOp id
50c0: 78 45 72 72 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  xErr[] = {.     
50d0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c         { OP_MemL
50e0: 6f 61 64 2c 20 20 20 20 20 30 2c 20 20 30 2c 20  oad,     0,  0, 
50f0: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   0},.           
5100: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20   { OP_String,   
5110: 20 20 20 30 2c 20 20 30 2c 20 20 22 72 6f 77 69     0,  0,  "rowi
5120: 64 20 22 7d 2c 0a 20 20 20 20 20 20 20 20 20 20  d "},.          
5130: 20 20 7b 20 4f 50 5f 52 65 63 6e 6f 2c 20 20 20    { OP_Recno,   
5140: 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 2c 0a      1,  0,  0},.
5150: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
5160: 5f 53 74 72 69 6e 67 2c 20 20 20 20 20 20 30 2c  _String,      0,
5170: 20 20 30 2c 20 20 22 20 6d 69 73 73 69 6e 67 20    0,  " missing 
5180: 66 72 6f 6d 20 69 6e 64 65 78 20 22 7d 2c 0a 20  from index "},. 
5190: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
51a0: 53 74 72 69 6e 67 2c 20 20 20 20 20 20 30 2c 20  String,      0, 
51b0: 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34   0,  0},    /* 4
51c0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
51d0: 7b 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 20  { OP_String,    
51e0: 20 20 30 2c 20 20 30 2c 20 20 22 5c 6e 22 7d 2c    0,  0,  "\n"},
51f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
5200: 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20 20 36  P_Concat,      6
5210: 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20  ,  0,  0},.     
5220: 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 53         { OP_MemS
5230: 74 6f 72 65 2c 20 20 20 20 30 2c 20 20 31 2c 20  tore,    0,  1, 
5240: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 7d   0},.          }
5250: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
5260: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
5270: 50 5f 52 65 63 6e 6f 2c 20 31 2c 20 30 29 3b 0a  P_Recno, 1, 0);.
5280: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d            for(k=
5290: 30 3b 20 6b 3c 70 49 64 78 2d 3e 6e 43 6f 6c 75  0; k<pIdx->nColu
52a0: 6d 6e 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20 20 20  mn; k++){.      
52b0: 20 20 20 20 20 20 69 6e 74 20 69 64 78 20 3d 20        int idx = 
52c0: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b  pIdx->aiColumn[k
52d0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ];.            i
52e0: 66 28 20 69 64 78 3d 3d 70 54 61 62 2d 3e 69 50  f( idx==pTab->iP
52f0: 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Key ){.         
5300: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
5310: 64 64 4f 70 28 76 2c 20 4f 50 5f 52 65 63 6e 6f  ddOp(v, OP_Recno
5320: 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 1, 0);.       
5330: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5340: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
5350: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
5360: 43 6f 6c 75 6d 6e 2c 20 31 2c 20 69 64 78 29 3b  Column, 1, idx);
5370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
5380: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
5390: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
53a0: 64 64 4f 70 28 76 2c 20 4f 50 5f 4d 61 6b 65 49  ddOp(v, OP_MakeI
53b0: 64 78 4b 65 79 2c 20 70 49 64 78 2d 3e 6e 43 6f  dxKey, pIdx->nCo
53c0: 6c 75 6d 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20  lumn, 0);.      
53d0: 20 20 20 20 69 66 28 20 64 62 2d 3e 66 69 6c 65      if( db->file
53e0: 5f 66 6f 72 6d 61 74 3e 3d 34 20 29 20 73 71 6c  _format>=4 ) sql
53f0: 69 74 65 41 64 64 49 64 78 4b 65 79 54 79 70 65  iteAddIdxKeyType
5400: 28 76 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20  (v, pIdx);.     
5410: 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69       jmp2 = sqli
5420: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
5430: 50 5f 46 6f 75 6e 64 2c 20 6a 2b 32 2c 20 30 29  P_Found, j+2, 0)
5440: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72  ;.          addr
5450: 20 3d 20 73 71 6c 69 74 65 56 64 62 65 41 64 64   = sqliteVdbeAdd
5460: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
5470: 69 7a 65 28 69 64 78 45 72 72 29 2c 20 69 64 78  ize(idxErr), idx
5480: 45 72 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Err);.          
5490: 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65  sqliteVdbeChange
54a0: 50 33 28 76 2c 20 61 64 64 72 2b 34 2c 20 70 49  P3(v, addr+4, pI
54b0: 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 33 5f 53 54  dx->zName, P3_ST
54c0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20  ATIC);.         
54d0: 20 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67   sqliteVdbeChang
54e0: 65 50 32 28 76 2c 20 6a 6d 70 32 2c 20 73 71 6c  eP2(v, jmp2, sql
54f0: 69 74 65 56 64 62 65 43 75 72 72 65 6e 74 41 64  iteVdbeCurrentAd
5500: 64 72 28 76 29 29 3b 0a 20 20 20 20 20 20 20 20  dr(v));.        
5510: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
5520: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
5530: 4e 65 78 74 2c 20 31 2c 20 6c 6f 6f 70 54 6f 70  Next, 1, loopTop
5540: 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +1);.        sql
5550: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 32 28  iteVdbeChangeP2(
5560: 76 2c 20 6c 6f 6f 70 54 6f 70 2c 20 73 71 6c 69  v, loopTop, sqli
5570: 74 65 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  teVdbeCurrentAdd
5580: 72 28 76 29 29 3b 0a 20 20 20 20 20 20 20 20 66  r(v));.        f
5590: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
55a0: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
55b0: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
55c0: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
55d0: 20 20 20 73 74 61 74 69 63 20 56 64 62 65 4f 70     static VdbeOp
55e0: 20 63 6e 74 49 64 78 5b 5d 20 3d 20 7b 0a 20 20   cntIdx[] = {.  
55f0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
5600: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20 30 2c  Integer,      0,
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 20 7b 20 4f 50 5f 4d 65 6d 53         { OP_MemS
5630: 74 6f 72 65 2c 20 20 20 20 20 32 2c 20 20 31 2c  tore,     2,  1,
5640: 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    0},.          
5650: 20 20 20 7b 20 4f 50 5f 52 65 77 69 6e 64 2c 20     { OP_Rewind, 
5660: 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d        0,  0,  0}
5670: 2c 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20  ,  /* 2 */.     
5680: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d          { OP_Mem
5690: 49 6e 63 72 2c 20 20 20 20 20 20 32 2c 20 20 30  Incr,      2,  0
56a0: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
56b0: 20 20 20 20 7b 20 4f 50 5f 4e 65 78 74 2c 20 20      { OP_Next,  
56c0: 20 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30         0,  0,  0
56d0: 7d 2c 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20  },  /* 4 */.    
56e0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65           { OP_Me
56f0: 6d 4c 6f 61 64 2c 20 20 20 20 20 20 31 2c 20 20  mLoad,      1,  
5700: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20  0,  0},.        
5710: 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f 61       { OP_MemLoa
5720: 64 2c 20 20 20 20 20 20 32 2c 20 20 30 2c 20 20  d,      2,  0,  
5730: 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  0},.            
5740: 20 7b 20 4f 50 5f 45 71 2c 20 20 20 20 20 20 20   { OP_Eq,       
5750: 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20      0,  0,  0}, 
5760: 20 2f 2a 20 37 20 2a 2f 0a 20 20 20 20 20 20 20   /* 7 */.       
5770: 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f        { OP_MemLo
5780: 61 64 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20  ad,      0,  0, 
5790: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   0},.           
57a0: 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20    { OP_String,  
57b0: 20 20 20 20 20 30 2c 20 20 30 2c 20 20 22 77 72       0,  0,  "wr
57c0: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
57d0: 20 69 6e 20 69 6e 64 65 78 20 22 7d 2c 0a 20 20   in index "},.  
57e0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
57f0: 53 74 72 69 6e 67 2c 20 20 20 20 20 20 20 30 2c  String,       0,
5800: 20 20 30 2c 20 20 30 7d 2c 20 20 2f 2a 20 31 30    0,  0},  /* 10
5810: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
5820: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20   { OP_String,   
5830: 20 20 20 20 30 2c 20 20 30 2c 20 20 22 5c 6e 22      0,  0,  "\n"
5840: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  },.             
5850: 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20  { OP_Concat,    
5860: 20 20 20 34 2c 20 20 30 2c 20 20 30 7d 2c 0a 20     4,  0,  0},. 
5870: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
5880: 5f 4d 65 6d 53 74 6f 72 65 2c 20 20 20 20 20 30  _MemStore,     0
5890: 2c 20 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20 20  ,  1,  0},.     
58a0: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20       };.        
58b0: 20 20 69 66 28 20 70 49 64 78 2d 3e 74 6e 75 6d    if( pIdx->tnum
58c0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
58d0: 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d            addr =
58e0: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
58f0: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
5900: 65 28 63 6e 74 49 64 78 29 2c 20 63 6e 74 49 64  e(cntIdx), cntId
5910: 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  x);.          sq
5920: 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 31  liteVdbeChangeP1
5930: 28 76 2c 20 61 64 64 72 2b 32 2c 20 6a 2b 32 29  (v, addr+2, j+2)
5940: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
5950: 74 65 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  teVdbeChangeP2(v
5960: 2c 20 61 64 64 72 2b 32 2c 20 61 64 64 72 2b 35  , addr+2, addr+5
5970: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
5980: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 31 28  iteVdbeChangeP1(
5990: 76 2c 20 61 64 64 72 2b 34 2c 20 6a 2b 32 29 3b  v, addr+4, j+2);
59a0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
59b0: 65 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c  eVdbeChangeP2(v,
59c0: 20 61 64 64 72 2b 34 2c 20 61 64 64 72 2b 33 29   addr+4, addr+3)
59d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
59e0: 74 65 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  teVdbeChangeP2(v
59f0: 2c 20 61 64 64 72 2b 37 2c 20 61 64 64 72 2b 41  , addr+7, addr+A
5a00: 72 72 61 79 53 69 7a 65 28 63 6e 74 49 64 78 29  rraySize(cntIdx)
5a10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
5a20: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28  iteVdbeChangeP3(
5a30: 76 2c 20 61 64 64 72 2b 31 30 2c 20 70 49 64 78  v, addr+10, pIdx
5a40: 2d 3e 7a 4e 61 6d 65 2c 20 50 33 5f 53 54 41 54  ->zName, P3_STAT
5a50: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  IC);.        }. 
5a60: 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20       } .    }.  
5a70: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 56    addr = sqliteV
5a80: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
5a90: 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64  ArraySize(endCod
5aa0: 65 29 2c 20 65 6e 64 43 6f 64 65 29 3b 0a 20 20  e), endCode);.  
5ab0: 20 20 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e    sqliteVdbeChan
5ac0: 67 65 50 32 28 76 2c 20 61 64 64 72 2b 33 2c 20  geP2(v, addr+3, 
5ad0: 61 64 64 72 2b 41 72 72 61 79 53 69 7a 65 28 65  addr+ArraySize(e
5ae0: 6e 64 43 6f 64 65 29 2d 31 29 3b 0a 20 20 7d 65  ndCode)-1);.  }e
5af0: 6c 73 65 0a 0a 20 20 7b 7d 0a 20 20 73 71 6c 69  lse..  {}.  sqli
5b00: 74 65 46 72 65 65 28 7a 4c 65 66 74 29 3b 0a 20  teFree(zLeft);. 
5b10: 20 73 71 6c 69 74 65 46 72 65 65 28 7a 52 69 67   sqliteFree(zRig
5b20: 68 74 29 3b 0a 7d 0a                             ht);.}.